pax_global_header00006660000000000000000000000064146651260140014517gustar00rootroot0000000000000052 comment=90036084b3cf811a89181d2f8e9da2558a2f6cc3 fuzzy-logic-toolkit-0.6.1/000077500000000000000000000000001466512601400154705ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.1/CITATION000066400000000000000000000022641466512601400166310ustar00rootroot00000000000000To cite the fuzzy-logic-toolkit in publications, please use: L. Markowsky and B. Segee. "The Octave Fuzzy Logic Toolkit," Proceedings of the 2011 IEEE International Workshop on Open-Source Software for Scientific Computation (OSSC-2011), pp. 118-125, October 2011. L. Markowsky and B. Segee. "Unsupervised Clustering With the Octave Fuzzy Logic Toolkit," Proceedings of the 2013 IEEE 10th International Conference on Fuzzy Systems and Knowledge Discovery (FSKD-2013), pp. 207-212, July 2013. The BibTex entries for LaTex users: @inproceedings{octavefuzzy01, author = "L. Markowsky and B. Segee", title = {{The Octave Fuzzy Logic Toolkit}}, booktitle = "Proceedings of the 2011 IEEE International Workshop on Open-Source Software for Scientific Computation", month = "October", year = 2011, pages = {118--125} } @inproceedings{octavefuzzy02, author = "L. Markowsky and B. Segee", title = {{Unsupervised Clustering With the Octave Fuzzy Logic Toolkit}}, booktitle = "Proceedings of the 2013 IEEE 10th International Conference on Fuzzy Systems and Knowledge Discovery", month = "July", year = 2013, pages = {207--212} } fuzzy-logic-toolkit-0.6.1/COPYING000066400000000000000000001045131466512601400165270ustar00rootroot00000000000000 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 . fuzzy-logic-toolkit-0.6.1/ChangeLog000066400000000000000000000356651466512601400172610ustar00rootroot000000000000002024-08-31 L. Markowsky * Version 0.6.1 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/*.m and inst/private/*.m: Improved many comments. * docs/*.html: Updated html documentation. 2024-06-05 L. Markowsky * Version 0.6.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/*.m and inst/private/*.m: Added many built-in self tests, simplified error messages, and made minor improvements to comments. * inst/private/square_distance_matrix.m and inst/private/update_cluster_membership.m: Reimplemented the two private functions. Tested for identical results with previous implementation using an embedded test in each file. * docs/*.html: New directory containing html documentation for each top-level function. 2024-05-16 L. Markowsky * Version 0.5.1 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. 2024-05-12 L. Markowsky * Version 0.5.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/algebraic_sum.m, inst/bounded_difference.m, and inst/bounded_sum.m: Replaced deprecated '.+' and '.-' operators with '+' and '-', respectively. * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. 2021-02-16 L. Markowsky * Version 0.4.6 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/defuzz.m: Bug #53549 was fixed (parse error in function defuzz.m -- anonymous function body requires only a single expression). * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. 2014-07-01 L. Markowsky * Version 0.4.5 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/setfis.m: Bug #38018 was fixed (typo in function setfis.m -- wrong function name). 2014-06-26 L. Markowsky * Version 0.4.4 released. * ChangeLog: Updated file. * CITATION: New file. References to two published papers about the fuzzy-logic-toolkit. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/readfis.m: Modified to workaround change to strsplit beginning in Octave 3.8.0. * inst/evalmf.m: Removed continuation "..." within double quoted string by writing instruction on one line to maintain compatibility with future versions of Octave. * inst/writefis.m: Changed continuation within double quoted string from "..." to "\" to maintain compatibility with future versions of Octave. * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. * Demos tested under: Fedora 20/Octave 3.8.1 * Demos tested under: Fedora 20/Octave 3.8.0 * Demos tested under: Fedora 20/Octave 3.6.4 2012-10-02 L. Markowsky * Version 0.4.2 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/*.m: Some trivial changes to line length and comments. * inst/fcm.m: Edited to reflect the five renamed private functions. Edited the demos to calculate and print the three cluster validity indices. Edited comment. * inst/gustafson_kessel.m: Edited to reflect the five renamed private functions. Edited the demos to calculate and print the three cluster validity indices. Edited comment. * inst/partition_coeff.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/partition_entropy.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/xie_beni_index.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/private/evalmf_private.m: Edited comment. * inst/private/is_builtin_language.m: Edited comment. * inst/private/fcm_compute_convergence_criterion.m: Edited and renamed compute_cluster_convergence.m. * inst/private/fcm_compute_objective_fcn.m: Edited and renamed compute_cluster_obj_fcn.m. * inst/private/fcm_init_prototype.m: Edited and renamed init_cluster_prototypes.m. * inst/private/fcm_update_cluster_centers.m: Edited and renamed update_cluster_prototypes.m. * inst/private/fcm_update_membership_fcn.m: Edited and renamed update_cluster_membership.m. * inst/private/probor.m: Removed unused private function. * Demos tested under: Fedora 17/Octave 3.6.2 * Demos tested under: Fedora 16/Octave 3.4.3 * Demos tested under: Windows 7/Octave 3.2.4 2012-08-26 L. Markowsky * Version 0.4.1 released. * ChangeLog: Updated file. * COPYING: Replaced GPLv2 with GPLv3 (to fix inconsistency with source files). * DESCRIPTION: Updated file. * INDEX: Updated file. * NEWS: Updated file. * inst/fcm.m: Rewrote and embedded the demos previously contained in fcm_demo_1.m and fcm_demo_2.m. * inst/fcm_demo_1.m: Removed script file. * inst/fcm_demo_2.m: Removed script file. * inst/gustafson_kessel.m: Rewrote and embedded the demos previously contained in gustafson_kessel_demo_1.m and gustafson_kessel_demo_2.m. * inst/gustafson_kessel_demo_1.m: Removed script file. * inst/gustafson_kessel_demo_2.m: Removed script file. * inst/*.m: Many trivial changes to line length and copyright notices. * inst/private/*.m: Many trivial changes to line length and copyright notice. * All demos tested under: Fedora 17/Octave 3.6.2 2012-07-10 L. Markowsky * Version 0.4.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * NEWS: New file. * inst/fcm.m: New file. Addition of the Fuzzy C-Means clustering algorithm to the toolkit. * inst/fcm_demo_1.m: New file. Addition of demo script. * inst/fcm_demo_2.m: New file. Addition of demo script. * inst/gustafson_kessel.m: New file. Addition of the Gustafson-Kessel clustering algorithm to the toolkit. * inst/gustafson_kessel_demo_1.m: New file. Addition of demo script. * inst/gustafson_kessel_demo_2.m: New file. Addition of demo script. * inst/partition_coeff.m: New file. Addition of a measure of cluster validity. * inst/partition_entropy.m: New file. Addition of a measure of cluster validity. * inst/xie_beni_index.m: New file. Addition of a measure of cluster validity. * inst/private/fcm_compute_convergence_criterion.m: New file. * inst/private/fcm_compute_objective_fcn.m: New file. * inst/private/fcm_init_prototype.m: New file. * inst/private/fcm_update_cluster_centers.m: New file. * inst/private/fcm_update_membership_fcn.m: New file. * inst/private/square_dist_matrix.m: New file. * New demos tested under: Fedora 16/Octave 3.4.3 2011-11-12 L. Markowsky * Version 0.3.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * inst/*.m: Many trivial changes to comments and spacing in parameter lists. * inst/addrule.m: Edited comment to describe use with hedges. * inst/algebraic_product.m: New file. * inst/algebraic_sum.m: New file. * inst/bounded_difference.m: New file. * inst/bounded_sum.m: New file. * inst/cubic_approx_demo.m: Added plot of output membership functions. * inst/cubic_approximator.fis: Corrected range for FIS output. * inst/drastic_product.m: New file. * inst/drastic_sum.m: New file. * inst/einstein_product.m: New file. * inst/einstein_sum.m: New file. * inst/evalmf.m: Edited to add custom and new built-in hedge support. * inst/hamacher_product.m: New file. * inst/hamacher_sum.m: New file. * inst/heart_disease_demo_1.m : Edited and renamed heart_demo_1.m. Edited script to demonstrate hedges and new T-norm/S-norm pairs. * inst/heart_disease_demo_2.m : Renamed heart_demo_2.m. * inst/investment_portfolio.fis: New file. * inst/investment_portfolio_demo.m: New file. * inst/plotmf.m: Edited to add support for linear output membership functions and to support optional y-limit arguments. * inst/readfis.m: Edited to add custom and built-in hedge support. * inst/showrule.m: Edited to add Chinese, Russian, and Spanish to the built-in languages and to add custom language support. Also edited to add custom hedge support and to implement the hedges "somewhat", "very", "extremely", and "very very". * inst/sugeno_tip_calculator.fis: Edited to demonstrate hedges. * inst/sugeno_tip_demo.m: Edited to demonstrate hedges. * inst/writefis.m: Edited comment to note that zenity is required by the GUI. Code edited to support hedges. * inst/private/*.m: Many trivial changes to spacing in parameter lists. * inst/private/aggregate_output_mamdani.m: Edited to support new built-in T-norm/S-norm pairs when used as the FIS aggregation method. * inst/private/eval_firing_strength.m: Edited to support new built-in T-norm/S-norm pairs when used as the FIS 'and' or 'or' method. * inst/private/evalmf_private.m: Edited to evaluate linear membership functions and to add custom and new built-in hedge support. * inst/private/eval_rules_mamdani.m: Edited to add custom and built-in hedge support. * inst/private/eval_rules_sugeno.m: Edited to add custom and built-in hedge support. * inst/private/fuzzify_input.m: Edited to add custom and built-in hedge support. * inst/private/get_mf_index_and_hedge.m: New file to add hedge support. * inst/private/is_real.m: Improved test. * inst/private/is_real_matrix.m: Improved test. * inst/private/is_builtin_language.m: Renamed is_language.m. Edited test to add 'chinese', 'mandarin', 'pinyin', 'russian', 'pycckii', 'russkij', 'spanish', 'french', and 'german' to the strings specifying built-in languages. * Demos tested under: Fedora 15/Octave 3.4.2 * Demos tested under: Windows 7/Octave 3.2.4 2011-09-01 L. Markowsky * Version 0.2.4 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * inst/*.m: Numerous trivial changes. * inst/addmf_demo.m: Merged into addmf.m as an embedded demo and then removed. * inst/addvar_demo.m: Merged into addvar.m as an embedded demo and then removed. * inst/showrule_demo.m: Merged into showrule.m as four embedded demos and then removed. * inst/gensurf.m: Edited to permit scalar grids argument. * inst/getfis.m: Edited to implement "version" field in the FIS. * inst/newfis.m: Edited to implement "version" field in the FIS. * inst/readfis.m: Edited to implement "version" field in the FIS and to handle comments, whitespace, and variable number of membership function parameters. * inst/setfis.m: Edited to implement "version" field in the FIS. Fixed several bugs. * inst/writefis.m: Edited to implement "version" field in the FIS. * inst/cubic_approximator.fis: Renamed cubic-approximator.fis. * inst/heart_disease_risk.fis: Renamed heart-disease-risk.fis. Added comments and whitespace. * inst/linear_tip_calculator.fis: Renamed linear-tip-calculator.fis. * inst/mamdani_tip_calculator.fis: Renamed mamdani-tip-calculator.fis and edited to have multiple outputs. * inst/mamdani_tip_demo.m: Edited to demonstrate multiple outputs. * inst/sugeno_tip_calculator.fis: Renamed sugeno-tip-calculator.fis and edited to have multiple outputs. * inst/sugeno_tip_demo.m: Edited to demonstrate multiple outputs. * inst/private/defuzzify_output_mamdani.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/defuzzify_output_sugeno.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/eval_firing_strength.m: Bug fix. * inst/private/eval_rules_mamdani.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/eval_rules_sugeno.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/is_grid_spec.m: Edited test to make more efficient. * inst/private/is_real.m: New file. * Demos tested under: Fedora 15/Octave 3.4.2 * Demos tested under: Fedora 15/Octave 3.2.4 * Demos tested under: Windows 7/Octave 3.2.4 2011-07-19 L. Markowsky * Version 0.2.3 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * inst/*.m: Edited numerous comments and texinfo comment blocks. * inst/private/*.m: Edited numerous comments and texinfo comment blocks. * inst/cubic_approx_demo.m: New file. * inst/cubic-approximator.fis: New file. * inst/linear-tip-calculator.fis: New file. * inst/linear_tip_demo.m: New file. * inst/heart_demo_1.m: Renamed commandline_demo.m. * inst/heart_demo_2.m: Renamed heart_demo.m. * inst/mamdani_tip_demo.m: Renamed mamdani_demo.m. * inst/sugeno_tip_demo.m: Renamed tipping_demo.m. * inst/gensurf.m: Edited to handle 2-dimensional plots. * inst/private/eval_rules_sugeno.m: Edited to handle linear output membership functions. * Demos tested under: Fedora 15/Octave 3.4.0 * Demos tested under: Fedora 15/Octave 3.2.4 2011-06-21 L. Markowsky * Version 0.2.2 released. * ChangeLog: New file. * DESCRIPTION: Updated file. * inst/addmf.m: Modified to workaround a bug in Octave 3.4.0. * inst/addrule.m: Modified to workaround a bug in Octave 3.4.0. * inst/addvar.m: Modified to workaround a bug in Octave 3.4.0. * inst/gaussmf.m: Modified demo and texinfo comment string. * inst/getfis.m: Modified to workaround a bug in Octave 3.4.0. * inst/readfis.m: Modified to workaround a bug in Octave 3.4.0. * inst/private/aggregate_output_mamdani.m: Modified to workaround a bug in Octave 3.4.0. * inst/private/evalmf_private.m: Modified to workaround a bug in Octave 3.4.0. * Demos tested under: Fedora 15/Octave 3.4.0 * Demos tested under: Fedora 15/Octave 3.2.4 2011-06-08 L. Markowsky * Version 0.2.1 released. * Initial release on Octave-Forge. * Merged membership function demos into related function files. * Created documentation for Octave-Forge website. * DESCRIPTION: Updated file. * Demos tested under: Fedora 13/Octave 3.2.4 2011-05-25 L. Markowsky * Version 0.2 released. * Moved tests/demos/* and tests/fis/* to inst/*. * Changed indentation and spacing to conform to Octave style. * Converted comments to texinfo. * DESCRIPTION: Update file. * Demos tested under: Fedora 13/Octave 3.2.4 2011-04-19 L. Markowsky * Version 0.1 released. * Initial release on SourceForge. * Demos tested under: Fedora 13/Octave 3.2.4 fuzzy-logic-toolkit-0.6.1/DESCRIPTION000066400000000000000000000006021466512601400171740ustar00rootroot00000000000000Name: fuzzy-logic-toolkit Version: 0.6.1 Date: 2024-08-31 Author: L. Markowsky Maintainer: L. Markowsky Title: Octave Fuzzy Logic Toolkit Description: A mostly MATLAB-compatible fuzzy logic toolkit for Octave. Depends: octave (>= 3.2.4) Autoload: no License: GPLv3+ Url: https://github.com/lmarkowsky/fuzzy-logic-toolkit/releases/tag/0.6.1 fuzzy-logic-toolkit-0.6.1/INDEX000066400000000000000000000017111466512601400162620ustar00rootroot00000000000000fuzzy-logic-toolkit >> Octave Fuzzy Logic Toolkit Evaluation defuzz evalfis evalmf Plotting gensurf plotmf File Input/Output of Fuzzy Inference Systems readfis writefis Command-Line Creation and Modification of Fuzzy Inference Systems addmf addrule addvar newfis rmmf rmvar setfis Text Representation of Fuzzy Inference Systems getfis showfis showrule Membership Functions dsigmf gauss2mf gaussmf gbellmf pimf psigmf sigmf smf trapmf trimf zmf T-Norms and S-Norms (in addition to max/min) algebraic_product algebraic_sum bounded_difference bounded_sum drastic_product drastic_sum einstein_product einstein_sum hamacher_product hamacher_sum Complete Fuzzy Inference System Demos cubic_approx_demo heart_disease_demo_1 heart_disease_demo_2 investment_portfolio_demo linear_tip_demo mamdani_tip_demo sugeno_tip_demo Fuzzy Clustering Functions fcm gustafson_kessel partition_coeff partition_entropy xie_beni_index fuzzy-logic-toolkit-0.6.1/Makefile000066400000000000000000000227451466512601400171420ustar00rootroot00000000000000## Copyright 2015-2016 Carnë Draug ## Copyright 2015-2016 Oliver Heimlich ## Copyright 2017 Julien Bect ## Copyright 2017 Olaf Till ## Copyright 2019 John Donoghue ## ## Copying and distribution of this file, with or without modification, ## are permitted in any medium without royalty provided the copyright ## notice and this notice are preserved. This file is offered as-is, ## without any warranty. TOPDIR := $(shell pwd) ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut TR ?= tr TEXI2PDF ?= texi2pdf -q ## Note the use of ':=' (immediate set) and not just '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" " | \ $(TR) '[:upper:]' '[:lower:]') version := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ") ## These are the paths that will be created for the releases. target_dir := target release_dir := $(target_dir)/$(package)-$(version) release_tarball := $(target_dir)/$(package)-$(version).tar.gz html_dir := $(target_dir)/$(package)-html html_tarball := $(target_dir)/$(package)-html.tar.gz ## Using $(realpath ...) avoids problems with symlinks due to bug ## #50994 in Octaves scripts/pkg/private/install.m. But at least the ## release directory above is needed in the relative form, for 'git ## archive --format=tar --prefix=$(release_dir). real_target_dir := $(realpath .)/$(target_dir) installation_dir := $(real_target_dir)/.installation package_list := $(installation_dir)/.octave_packages install_stamp := $(installation_dir)/.install_stamp ## These can be set by environment variables which allow to easily ## test with different Octave versions. ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc MKOCTFILE ?= mkoctfile ## Command used to set permissions before creating tarballs FIX_PERMISSIONS ?= chmod -R a+rX,u+w,go-w,ug-s HG := hg HG_CMD = $(HG) --config alias.$(1)=$(1) --config defaults.$(1)= $(1) HG_ID := $(shell $(call HG_CMD,identify) --id | sed -e 's/+//' ) HG_TIMESTAMP := $(firstword $(shell $(call HG_CMD,log) --rev $(HG_ID) --template '{date|hgdate}')) ## Detect which VCS is used vcs := $(if $(wildcard .hg),hg,$(if $(wildcard .git),git,unknown)) ifeq ($(vcs),hg) release_dir_dep := .hg/dirstate endif ifeq ($(vcs),git) release_dir_dep := .git/index endif TAR_REPRODUCIBLE_OPTIONS := --sort=name --mtime="@$(HG_TIMESTAMP)" --owner=0 --group=0 --numeric-owner TAR_OPTIONS := --format=ustar $(TAR_REPRODUCIBLE_OPTIONS) ## .PHONY indicates targets that are not filenames ## (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html) .PHONY: help ## make will display the command before runnning them. Use @command ## to not display it (makes specially sense for echo). help: @echo "Targets:" @echo " dist - Create $(release_tarball) for release." @echo " html - Create $(html_tarball) for release." @echo " release - Create both of the above and show md5sums." @echo " install - Install the package in $(installation_dir), where it is not visible in a normal Octave session." @echo " check - Execute package tests." @echo " doctest - Test the help texts with the doctest package." @echo " run - Run Octave with the package installed in $(installation_dir) in the path." @echo " clean - Remove everything made with this Makefile." ## ## Recipes for release tarballs (package + html) ## .PHONY: release dist html clean-tarballs clean-unpacked-release ## To make a release, build the distribution and html tarballs. release: dist html md5sum $(release_tarball) $(html_tarball) @echo "Upload @ https://sourceforge.net/p/octave/package-releases/new/" @echo " and note the changeset the release corresponds to" ## dist and html targets are only PHONY/alias targets to the release ## and html tarballs. dist: $(release_tarball) html: $(html_tarball) ## An implicit rule with a recipe to build the tarballs correctly. %.tar.gz: % $(TAR) -cf - $(TAR_OPTIONS) -C "$(target_dir)/" "$(notdir $<)" | gzip -9n > "$@" clean-tarballs: @echo "## Cleaning release tarballs (package + html)..." -$(RM) $(release_tarball) $(html_tarball) @echo ## Create the unpacked package. ## ## Notes: ## * having ".hg/dirstate" (or ".git/index") as a prerequesite means it is ## only rebuilt if we are at a different commit. ## * the variable RM usually defaults to "rm -f" ## * having this recipe separate from the one that makes the tarball ## makes it easy to have packages in alternative formats (such as zip) ## * note that if a commands needs to be run in a specific directory, ## the command to "cd" needs to be on the same line. Each line restores ## the original working directory. $(release_dir): $(release_dir_dep) -$(RM) -r "$@" ifeq (${vcs},hg) hg archive --exclude ".hg*" --type files "$@" endif ifeq (${vcs},git) git archive --format=tar --prefix="$@/" HEAD | $(TAR) -x $(RM) "$@/.gitignore" endif ## Don't fall back to run the supposed necessary contents of ## 'bootstrap' here. Users are better off if they provide ## 'bootstrap'. Administrators, checking build reproducibility, can ## put in the missing 'bootstrap' file if they feel they know its ## necessary contents. ifneq (,$(wildcard src/bootstrap)) cd "$@/src" && ./bootstrap && $(RM) -r "autom4te.cache" endif ## Uncomment this if your src/Makefile.in has these targets for ## pre-building something for the release (e.g. documentation). # cd "$@/src" && ./configure && $(MAKE) prebuild && \ # $(MAKE) clean && $(RM) Makefile ## # $(MAKE) -C "$@" docs # cd "$@" && $(MAKE) tests # remove dev stuff # cd "$@" && $(RM) -rf "devel" ${FIX_PERMISSIONS} "$@" run_in_place = $(OCTAVE) --eval ' pkg ("local_list", "$(package_list)"); ' \ --eval ' pkg ("load", "$(package)"); ' # html_options = --eval 'options = get_html_options ("octave-forge");' ## Uncomment this for package documentation. html_options = --eval 'options = get_html_options ("octave-forge");' \ --eval 'options.package_doc = "$(package).texi";' $(html_dir): $(install_stamp) $(RM) -r "$@"; $(run_in_place) \ --eval ' pkg load generate_html; ' \ $(html_options) \ --eval ' generate_package_html ("$(package)", "$@", options); '; $(FIX_PERMISSIONS) "$@"; clean-unpacked-release: @echo "## Cleaning unpacked release tarballs (package + html)..." -$(RM) -r $(release_dir) $(html_dir) @echo ## ## Recipes for installing the package. ## .PHONY: install clean-install octave_install_commands = \ ' llist_path = pkg ("local_list"); \ mkdir ("$(installation_dir)"); \ load (llist_path); \ local_packages(cellfun (@ (x) strcmp ("$(package)", x.name), local_packages)) = []; \ save ("$(package_list)", "local_packages"); \ pkg ("local_list", "$(package_list)"); \ pkg ("prefix", "$(installation_dir)", "$(installation_dir)"); \ pkg ("install", "-local", "-verbose", "$(release_tarball)"); ' ## Install unconditionally. Maybe useful for testing installation with ## different versions of Octave. install: $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) ## Install only if installation (under target/...) is not current. $(install_stamp): $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) clean-install: @echo "## Cleaning installation under $(installation_dir) ..." -$(RM) -r $(installation_dir) @echo ## ## Recipes for testing purposes ## .PHONY: run doctest check ## Start an Octave session with the package directories on the path for ## interactice test of development sources. run: $(install_stamp) $(run_in_place) --persist ## Test example blocks in the documentation. Needs doctest package ## https://octave.sourceforge.io/doctest/index.html doctest: $(install_stamp) $(run_in_place) --eval 'pkg load doctest;' \ --eval "targets = '$(shell (ls inst; ls src | $(GREP) .oct) | $(CUT) -f2 -d@ | $(CUT) -f1 -d.)';" \ --eval "targets = strsplit (targets, ' '); doctest (targets);" ## Test package. octave_test_commands = \ ' pkgs = pkg("list", "$(package)"); \ dirs = {pkgs{1}.dir}; \ __run_test_suite__ (dirs, {}); ' ## the following works, too, but provides no overall summary output as ## __run_test_suite__ does: ## ## else cellfun (@runtests, horzcat (cellfun (@ (dir) ostrsplit (([~, dirs] = system (sprintf ("find %s -type d", dir))), "\n\r", true), dirs, "UniformOutput", false){:})); endif ' check: $(install_stamp) $(run_in_place) --eval $(octave_test_commands) ## ## CLEAN ## .PHONY: clean clean: clean-tarballs clean-unpacked-release clean-install test -e inst/test && rmdir inst/test || true test -e $(target_dir)/fntests.log && rm -f $(target_dir)/fntests.log || true @echo "## Removing target directory (if empty)..." test -e $(target_dir) && rmdir $(target_dir) || true @echo @echo "## Cleaning done" @echo .PHONY: tests CC_TST_SOURCES := $(shell $(GREP) --files-with-matches '^%!' src/*.cc) TST_SOURCES := $(patsubst src/%.cc,inst/test/%.cc-tst,$(CC_TST_SOURCES)) inst/test: @mkdir -p "$@" $(TST_SOURCES): inst/test/%.cc-tst: src/%.cc | inst/test @echo "Extracting tests from $< ..." @$(RM) -f "$@" "$@-t" @( echo "## Generated from $<"; \ $(GREP) '^%!' "$<") > "$@" tests: $(TST_SOURCES) fuzzy-logic-toolkit-0.6.1/NEWS000066400000000000000000000075021466512601400161730ustar00rootroot00000000000000Summary of important user-visible changes for fuzzy-logic-toolkit 0.6.1: ------------------------------------------------------------------------ ** Improved many comments and updated the html documentation. Summary of important user-visible changes for fuzzy-logic-toolkit 0.6.0: ------------------------------------------------------------------------ ** Added many built-in self tests, simplified error messages, and made minor improvements to comments. ** Reimplemented two private functions: square_distance_matrix.m and update_cluster_membership.m. Tested for identical results with previous implementation using an embedded test in each file. ** Added new docs directory containing html documentation for each top-level function. Summary of important user-visible changes for fuzzy-logic-toolkit 0.5.1: ------------------------------------------------------------------------ ** Updated several top-level text files (ChangeLog, DESCRIPTION, and NEWS). No change to any code. Summary of important user-visible changes for fuzzy-logic-toolkit 0.5.0: ------------------------------------------------------------------------ ** Replaced several occurrences of the deprecated '.+' and '.-' operators with '+' and '-', respectively. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.6: ------------------------------------------------------------------------ ** Bug #53549 was fixed (parse error in function defuzz.m -- anonymous function body requires only a single expression). Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.5: ------------------------------------------------------------------------ ** Bug #38018 was fixed (typo in function setfis.m -- wrong function name). Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.4: ------------------------------------------------------------------------ ** The function readfis was modified to workaround the change to strsplit beginning in Octave 3.8.0. Without the modification, readfis will not work with Octave versions >= 3.8.0. The new version of readfis works with all versions of Octave >= 3.2.4 by first checking for the version number of Octave and then selecting either ostrsplit (for Octave >= 3.8.0) or strsplit (for Octave < 3.8.0). ** The files writefis.m and evalmf.m were edited to maintain compatibility with future versions of Octave. Two occurrences of the continuation "..." within double quoted strings in writefis.m were changed to "\". One occurrence of "..." in evalmf.m was removed by writing the instruction on a single line. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.2: ------------------------------------------------------------------------ ** The demos embedded in partition_coeff.m, partition_entropy.m, and xie_beni_index.m were merged with the embedded demos in fcm.m and gustafson_kessel.m. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.1: ------------------------------------------------------------------------ ** The package is no longer automatically loaded. ** The following demo scripts were rewritten and embedded in fcm.m, gustafson_kessel.m, partition_coeff.m, partition_entropy.m, and xie_beni_index.m: fcm_demo_1 fcm_demo_2 gustafson_kessel_demo_1 gustafson_kessel_demo_2 (The separate demo script files have been removed.) Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.0: ------------------------------------------------------------------------ ** The following functions are new: fcm gustafson_kessel partition_coeff partition_entropy xie_beni_index ** The following demo scripts are new: fcm_demo_1 fcm_demo_2 gustafson_kessel_demo_1 gustafson_kessel_demo_2 fuzzy-logic-toolkit-0.6.1/docs/000077500000000000000000000000001466512601400164205ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.1/docs/addmf.html000066400000000000000000000172351466512601400203710ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addmf

Function Reference: addmf

Function File: fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, mf_params)

Add a membership function to an existing FIS structure and return the updated FIS.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
in_or_out’input’ or ’output’ (case-insensitive)
var_indexvalid index of an FIS input/output variable
mf_namea string
mf_typea string
mf_paramsa vector

If mf_type is one of the built-in membership functions, then the number and values of the parameters must satisfy the membership function requirements for the specified mf_type.

Note that addmf will allow the user to add membership functions or membership function names for a given input or output variable that duplicate mfs or mf names already entered.

Also, constant and linear membership functions are not restricted to FIS structure outputs or to Sugeno-type FIS structures, and the result of using them for FIS inputs or Mamdani-type FIS outputs has not yet been tested.

To run the demonstration code, type "demo addmf" (without the quotation marks) at the Octave prompt. This demo creates two FIS input variables and associated membership functions and then produces two figures showing the term sets for the two FIS inputs.

See also: rmmf, setfis

Example: 1

 

 ## Create new FIS.
 a = newfis ('Heart-Disease-Risk', 'sugeno', ...
             'min', 'max', 'min', 'max', 'wtaver');
 
 ## Add two inputs and their membership functions.
 a = addvar (a, 'input', 'LDL-Level', [0 300]);
 a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]);
 a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ...
            [90 110 120 140]);
 a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ...
            [120 140 150 170]);
 a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ...
            [150 170 180 200]);
 a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]);
 
 a = addvar (a, 'input', 'HDL-Level', [0 100]);
 a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]);
 a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]);
 a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]);
 
 ## Plot the input membership functions.
 plotmf (a, 'input', 1);
 plotmf (a, 'input', 2);

hold is now off for current axes
hold is now off for current axes
                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.1/docs/addrule.html000066400000000000000000000141101466512601400207230ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addrule

Function Reference: addrule

Function File: fis = addrule (fis, rule_matrix)

Add a list of rules to an existing FIS structure and return the updated FIS.

Each row of the rule_matrix represents one rule and has the form:

     [in1_mf ... inM_mf out1_mf ... outN_mf weight connect]
 

where:

Element in Rule VectorExpected Type or Value
in<i>_mfmembership function index for input i
out<j>_mfmembership function index for output j
weightrelative weight of the rule (0 <= weight <= 1)
connectantecedent connective (1 == and; 2 == or)
    
Hedge StringEffect of Applying Hedge
"not"prepend a minus sign to the membership function index
"somewhat"append ".05" to the membership function index
"very"append ".20" to the membership function index
"extremely"append ".30" to the membership function index
"very very"append ".40" to the membership function index
custom hedgeappend .xy, where x.y is the degree to which the membership value should be raised, to the membership function index

To omit an input or output, use 0 for the membership function index. The consequent connective is always "and".

For example, to express:

     "If (input_1 is mf_2) or (input_3 is not mf_1) or (input_4 is very mf_1),
      then (output_1 is mf_2) and (output_2 is mf_1^0.3)."
 

with weight 1, the corresponding row of rule_matrix would be:

     [2   0   -1   4.2   2   1.03   1   2]
 

For a complete example that uses addrule, see heart_disease_demo_1.m.

See also: heart_disease_demo_1, showrule

fuzzy-logic-toolkit-0.6.1/docs/addvar.html000066400000000000000000000131641466512601400205540ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addvar

Function Reference: addvar

Function File: fis = addvar (fis, in_or_out, var_name, var_range)

Add an input or output variable to an existing FIS structure and return the updated FIS.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
in_or_outeither ’input’ or ’output’ (case-insensitive)
var_namea string
var_rangea vector [x1 x2] of two real numbers

The vector components x1 and x2, which must also satisfy x1 <= x2, specify the lower and upper bounds of the variable’s domain.

To run the demonstration code, type "demo addvar" (without the quotation marks) at the Octave prompt.

Example: 1

 

 a = newfis ('Heart-Disease-Risk', 'sugeno', ...
             'min', 'max', 'min', 'max', 'wtaver');
 a = addvar (a, 'input', 'LDL-Level', [0 300]);
 getfis (a, 'input', 1);

Name = LDL-Level
NumMFs = 0
MFLabels = 
Range = [0 300]
                    
fuzzy-logic-toolkit-0.6.1/docs/algebraic_product.html000066400000000000000000000112201466512601400227530ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: algebraic_product

Function Reference: algebraic_product

Function File: retval = algebraic_product (x)
Function File: retval = algebraic_product (x, y)

Return the algebraic product of the input. The algebraic product of two real scalars x and y is: x * y

For one vector argument, apply the algebraic product to all of elements of the vector. (The algebraic product is associative.) For one two-dimensional matrix argument, return a vector of the algebraic product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise product.

See also: algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/algebraic_sum.html000066400000000000000000000111721466512601400221050ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: algebraic_sum

Function Reference: algebraic_sum

Function File: retval = algebraic_sum (x, y)
Function File: retval = algebraic_sum (x, y)

Return the algebraic sum of the input. The algebraic sum of two real scalars x and y is: x + y - x * y

For one vector argument, apply the algebraic sum to all of elements of the vector. (The algebraic sum is associative.) For one two-dimensional matrix argument, return a vector of the algebraic sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise algebraic sum.

See also: algebraic_product, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/assets/000077500000000000000000000000001466512601400177225ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.1/docs/assets/addmf_101.png000066400000000000000000001011671466512601400220720ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯw\×Úđg) ‚4Q+FÀ®¨bAQcĂ˜„¨1–ÄØÈå½Ñ1¶Û%orm¹¶M® ¨QÁ† ¨XC¢‚"(°́ûÇà̀ÀR†ewḮîïû¹ŸÜgggÎ<3ñqfÎ…J¥"€Ê˜±N  G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ Ö !OOOÖ)€n%%%±N:a?Lræéé‰N‘t<¡_d"C&{‘·ª@ G…#H‚Â$Aá&áđáìS€̉Đ)̣„~‘!t È G…#H‚Â$Aá’ pIP8€$(@ ‰ë´ÆÓÓ“u `’’’X§`P8€QAU…oH‡[Ơ G…#H‚Â$Aá’ pIP8€$(@ G…#3K—.U(gΜ‘Ơ®  P(”J¥xM™™YË–-ßÿư˜˜™ è ̃U •7n\£FˆèåË—W®\ Û»wïúơë§M›Æ:5ĐP¹3føøøđõ¼9bĈ?₫ØÇǧmÛ¶¬³=Á­j¨²–-[îܹS¥R-[¶Œu. ?(À(,ÿçèXÜccc‡ R¿~}WW×!C†ÄÆÆrËÇŒcii™““Ă}ܳgB¡hß¾=¿ágŸ}¦P(.^¼¨£“Ú¥KŸ_ưµ°°P2€Â@¾~ûí7Ÿ+W®¼óÎ;ăÆ»zơªÏo¿ưFDƒ.,,xđ@J†W¥`|P8€ 0̀É“““‰¨C‡â…ÜSŒÉÉÉ̃̃̃ƒ₫öÛo333OŸ>­R©üüüzö́ED'O´°°èß¿?Ư¹s§E‹| [·n0a—+͹té’Ä‘»IƯ¼ysÖ§ ô…#€L©T*R»ªgnnNDDäïïuö́Ù&M4ỉÄ××wáÂ…Ï=;ỵdÏ=ííí‰ÈÅÅeçÎ| Ư»w×V†—/_¶°°P¿f Æ …c%î̃½;xđà½{÷–ú€®¹»»Ñ•+WúôéĂ/LLL$"OOO"̣ññ±³³;~üxlllï̃½‰¨oß¾EEEÿûßÿ.^¼¸bÅ n[[Û÷̃{Oëé%$$œ:uj́ر('LÇTbǬSƠ©S§&M¬]»633“[̣ôéÓ5kÖ4mÚÔËË‹ˆ,--ưüü"""¸Â±K—.µk×₫ú믥<àXÉÉÉAAA …bñâŬÏè₫‰P¶́́́[·nưïÿÛ½{7ë\ÀÈm̃¼ùàÁƒâ%fffË—/¯Y³æÚµkß~ûíN:;V¥RíÙ³'--mß¾}5kÖäÖI…Báîî₫Ö[o͘1CưqÉ Œ€‚{đJ9}úô«W¯ˆhçÎgÏ­̉3₫nn‡×­£5éƠ+ªY“^¾$++Êϧ5—ˆ—¥%©TÄ=û̀J%™›—X™û¯z#Üî¿ÜV<îcyûUo\b>âÍƠ/—˜OyÿåvTXHU˧¬³ô÷Ó§ơëÖ­$)¹•™·Pëç§¼ÍÅ»(•OQ™™•›Oyÿ-3Ÿ₫ưIÇ-¥¤¤¸¹¹étD””Dwï–{z¤ü·‚îRÿ#®₫3(±»¤tÔo»»®O˜>úå=ºH_Ñ«TSüßB*´ ©¤ ¢"*2#³*°$Ë—ổ¬Ä+çS~ ª¡¾|¶ḉ¤¤$Ÿ&0.!I!VdÅư¼q?{DÄư4*IiNæ¥~üfûÏN9l³WâcÙzö́É'Nœ¨ê¶‡ïƯ£#X”PŸu†çáCjØuZĐ²%ë ´ÇỆ̣X'¡ ‹hÑÿÑÿé¨q̣`}|`F̉Ȫmp˜uÆŒ p€²4jDD)wïên>Ôéäæ*Ú¶m¦Ó]èÙË—¤PĐƯ»º½È¡ë~iî† ÿ  G(—®oYê´ư½{u;35kº¹ºêvzx„  GíÚ¬ÙÁÊŸ̃«à™ẬÂ*ï1¨2Ââªø1;}æĂ=Ï¥·|J>køøÙ³zuêè*naÅ­₫́c¥ç§âÇ%5ÈG=«2óY·NdưÇH ÄĂ:(ûô¨ÿḰ.ơGR+~H±‚Gv¹|Ô÷+̃đêUZ´¨x×áá4e ë“«©st§̉Ô!4„{bŒ{T±Ô3\ ~ÆQư‰Fơ%óh룃´›v[‘÷́l™Ï8r_ñ?ló‡Î§ƒỠ«Bá¨}É5jĐØ±¬³€^¤¤.¢Hộ¥P89B²NHCááBüÖ[¬³©·̃2’Â1œ„^ù‚¾p%í_;Eáy›̃®̉ú‹“MtöJL%ñ<₫;øéSÖèÆo¿±Î ÖĐ>ÖEƠº†ÂJ²µâœÖÙ€QÉ#£`ÂP8@ùîÜaøù±Î@,-Yg€ÂŒ̉•+B,¾÷n¸†eVµ ¬SM p5:±Î ºÄ#cŒ£pÅÙ³¬³ÑH6e ‡CFÑ+¦…c%¾úꫤ¤$éï066Bl˜w«üQˆ=ŒâM"̃̃B¼e ël4̣ưÄÇ ¨ët@(@Í·ß ñ°ÎF·o³Î@ÛÚ·âÄDÖÙhä]àăù4Ÿu:r±téR…BaaañäÉơoÏ=«P( ÅÏ?ÿ¬Yûñññ …bÏ=¬´́?sæŒúW P(J¥R¼&Ï̀̀¬eË–ï¿ÿ~LLŒÄA‹P8€7ßbñM_‡Ë—Yg ñ$PR©üơ×_Ơ—‡……±N­\.\9räµk×ô³»qăÆ}öÙgŸ}öÙ'Ÿ|R¿~ư°°°>}úüûßÿf}L&€ xáX¿>ë àµgôŒu ̣U¯^½}ûöM›6­Ộ_ưµ^½z?f`=ztàÀ9sæègw3f̀đññá?̃¼ysĈü±OÛ¶mYŸ ‚+P¡×w‹ Ha¡ÇÈ»;ë @gFụäÉRw«ăăăïƯ»7jÔ(ÖÙÉQË–-wîÜ©R©–-[Æ:Ó‚+PKK*(`„†âvíXg£=íÚQrrqœ•Eöö¬̉Tb0ÜđwX² ưßÿU´Â˜1c¶lÙ²ÿ₫©S§̣ ùå;;»₫ưûo)9*66vÉ’% fff;v\²dI×®]ùo£££—-[_¿~ư€€€RuçƠ«Wÿơ¯]¸páåË—:u;w®ßë™NƯÜÜFŒñ̃{ï}øá‡Dtụ̀e"Z»ví₫óŸ;wîÔ¬YÓƯƯ}Ö¬Yï½÷}đÁ[·n%¢¾}û6kÖ,%%¥âÆu¡K—.>>>¿₫úkaa¡…ê=Á‰€² Fe=qeÄw×?₫˜u6ÚóñÇBŸ„‡Ó»ï²N¨*IÑ3‘&ê?Ư»Y¾ƒC%…c³fͺvíºwï^qá6|øp+++ñ¿ưöÛ˜1cêׯÿÎ;ï(_~ùÅÇÇç—_~yë­·ˆè×_;vl:ũyç33³;w₫₫ûïü¶G>|xƒ ̃~ûm33³ưû÷4hçÎăÆăVHMM4h½½ư€ˆhÉ’%K—.íׯߘ1c^½zµÿ₫   ;;»aÆưăÿpssûâ‹/V®\ùæ›oJi\:v́xæ̀™ÔÔT777½÷ª©R¶yxx°NJ»{÷.ë ÍO?©ˆÿwê”.ö »NiÔHÈƯÈđÇơڅúåkƠׯs§[ª[º;EåưæO“ÿ98”›đ’%KˆèöíÛ+W®477üø1·<11‘ˆ8pđàA"ân˾zơÊÍÍ­Y³fO<áV{̣äIÓ¦M›7o₫êƠ«—/_6mÚ´Aƒ>ä¾MKKsuu%¢Ư»w¿zơÊƯƯƯËË+77—ûöåË—Ư»wõ¼yaa¡J¥jÖ¬-]ºT©Tr+4õÜĂĂ£  €ûǿÙ3 ‹éÓ§s¹ÄN<É%Vqăåxø ¹5OŸ>­̃È+ˆè?₫¨x5l´»‰qÀ3Pñ³¢+ááCÖèÁY©v'<­Y†ÀÀ@¥R¹ÿ~îcXX˜Í AƒÄë$$$¤¤¤̀™3ÇÙÙ™[ấ́|x÷îƯ;•ó>̉wttܹs'¿¤{÷îÚ:c—/_¶°°hÔ¨‘ÖûʃÂŒJJÓ\<œèèQÖIT^6XÀÀÀùóçïß¿?==ƯÚÚzđàÁ¥Vpww'¢+W®ôéÓ‡_È= éééÉ•Œñññ}ûö忽té’xÛÚµk‹o_¿~ưÊ•+âz‘wúô鈈ˆuëÖÍ=›_X̃Ç·µµåÆbkWBB©S§Æ‹!Ơú„g -[²Î@â‡ÿŒ¯p‘½?¦ˆ„C £ëíqssëܹó¾}û† b#~k<uêÔ©I“&k×®Í̀̀ä–<}útÍ5M›6ợ̣êÔ©SóæÍ׬Yó×_qß>ỵä»ï¾ăâ;zzz®^½úÙ³gÜ’́́́ÁƒתUK=™‡Q«V­ø%¿ụ̈Ë‹/T%ïúiĐxơ%'')Å‹믇W \C†ĐÍ›Åñ;ôƬ’déR!~ưp—ñ ₫=sç̉‘#¬’æ úB8 üüóÏ•JåܹsƠ¿­Y³æÚµkß~ûíN:;V¥RíÙ³'--mß¾}5kÖ$¢U«V;ÖËËëí·ß¶´´Ü³g?©¸……źuë̃zë­:Œ;¶  àÀ©©©»wïænv—âëëkcc3eÊ”÷̃{¯aÆçÎ;~üxƯºuOŸ>}èĐ¡Áƒs×)7õüèÑ£qăÆU©q l̃¼™ÇưêƠ««W¯={6??Ó¦M¥^Ă¯Æ333[¾|9ë5"¬‡u!“¢/g˜G‘‘Âl"Û·k½yux£Ä]:i_ư2U5•ï–|U¾NÏÁưæ§ăá>̃¹s‡ˆjÖ¬™Í-OÇĂ9{ö¬¿¿¿‹‹‹‹‹‹¿¿ÿùóçÅ FGG÷ïßßÑÑ‘ˆ́íí÷íÛGD»wïæ¾MHH¨_¿¾££cß¾}9ÂoجY³#Fˆ›êÑ£‡­­ío¼1ỵä'Oüßÿư_Ưºu ¤R©̃yç;;»N:UÚxy^ǽ9ưû÷'µéxx …ÂĂĂăƯwß={ö¬zƒê,,,*íLÇ#B%ÿ‘f†ÆÓÓ3))‰uPBJJ ¦‡Ơÿ”ưÛok}eux`€Q₫zÓơê¢_Q£?éÏâœI·½‚ßÀ¼´´´:uêpW"¡bǘؘOnU€7m QíÚ¬3€×øªô‰›ú@»08$ÈÉaA•ßÈ`…#'„¸¬ FŒ—35|Ơ&\0l( |₫₫¬3¨ñơ¯¿fn¬XQöñÊÖ]ºËÇói>ët ZP8@ùÄ·{+|á¬Lˆ )GGÖÙ膸O ¢p¿¥sñ:P>C+Røy'˜ø†Đ'% ÇÔ‘u:P-( |âiYV®d ”––Æ: ")’u  5(@ƒXƯ®ë Œ G0 ±±ÎÅĂéуu±#»ê7l¡p€ 5ǹ:©Äüwá(>ºÛ·Yg#=mŒŒ0|( Bâ"%;›u6Y¶Lˆ{öd.‰ûäŸÿdM…VÓj!m†…#T¨^=!>vŒu6ùë/ÖèK‡Bœ•Å:› ‰_6Ø“Œºœ×Ổ¥K Å™3gÔ¿0`€B¡P*•ÜÇ^½zyyyIiÓÍÍ-00P9pḳ̀̀̀Z¶lù₫ûïÇÄÄHl ̃U Z²„¾ü²8§Q£X'T®—/YgÀÂÑ£¬3¨x.¦Ô”u:†ÍÜÜÜÜÜœuDDăÆkÔ¨½|ụ̀Ê•+aaa{÷î]¿~ư´iÓX§:‡Â*¤P±ALX2e`ëƯb‚ñ8ỵ$ë͘1ĂÇLJÿxóæÍ#F|üñÇ>>>mÛ¶eènU€d±Î@ăñ·gÀk-[¶Ü¹s§J¥Z&~ĐŒ G0{ö±ø±Lcǻ̀:ƒ*²&kÖ)<___ñ3çÏŸ÷÷÷wrrjß¾ư¿₫ơ¯-[¶(Ë—/ó+œ9sfđàÁÎÎÎ 6üøăŸ?®»Üºtéâăăó믿²>O [( 2½z±Î rׯ ñ’%¬³Ñ=₫¹S’ñ˜¥¿H¯LÁ¬Ó1*GéÓ§ORR̉‡~Ø«W¯ï¿ÿ₫‹/¾¯˜˜àîî₫Ï₫ó7̃زeËgŸ}¦Ó”:v́XXX˜ÊúÜ€náG¨L@:UߺE¬*ƒøñKĂ™zRsC‡–8ö₫ưY'TñÈæsñl¦Í ÷^“jN¢I¬Đ³*3H7lØ0..ÎÉɉˆf̀˜Ñ±cGñ:·nƯúí·ß†NDsæ̀i×®]dd%ï~¬Rê7nLD)))nâW•‚ÑAá•   ăđpyññ¬3Đ/;ÑKX¤µkY'TqáØƒ¿îf:Mg¸wr¨¸päÇ)‹íƯ»÷Áƒê+_¼xñúơëëׯçªF"jƠªƠ˜1c₫ûßỵ̈ëxxxpU#™››ẃØñhe#đ«”ƒ:F¥™Pñ0ɯ¾¢`Üs”Ù¾<æ`‚Á(5N™sé̉¥2‹¶[·nQûöíÅ K gö(ù<~Ÿ;wî´hÑ‚_¾uëÖ &hƒ:î&uóæÍYŸKĐ-POŸ²Î µj±Î@Ç̣óóƠ–âÑÊʪ̀m]\\vîÜÉ́̃½»¶²º|ù²………ú5K02(Àà½x!Ä“&ĩa騑.]b„42ø»FE*Ö)hMË–-‰èÚµk}úôá^»vMʶ¶¶¶ï½÷ÖSJHH8uêÔØ±c-,Ø÷5èFU€¯¥’'ñÈS˜Ä‘#“–Æ:› 1cd:v́Ø´iÓï¾û.ûơëăoß¾½wï^Vù$'')Å‹³>7 sø—H@;v°N¢\âÂÑߟu6ú@_}%œ)SX'T̉9:'¤ÂQ«jÖ¬¹víÚÀÀÀÎ;æååíØ±£sçÎgΜ±¶ÖÇ|™›7o>xđ ½zơêêƠ«gÏÍÏÏß´iS©ç,ùƠxfffË—/g}₫ ZP8€â+{öĐÛo³N¨„}ûXgÀB·nBüĂ²+C)”»PÖ雑#G9rdÉ’%7nlÓ¦ÍÚµkÿúë¯3gÎ8::êaï?ÿü3( ww÷·̃zkÆŒêḲ«ñ,,,P8:…Je<}È„§§gRRë, L-V]99T»vq₫¸́óÀœø-ƠSi*ët@kP8€4âÛÀr*R¢£YgÀNƒB,§>)Q8 ¬Ó­Aá̉ˆo—œÔäạ̀eÖˆˆ G0&( ê""XgP3ü>“gôŒu  øE U§T²Î  '²Î€wwÖ€)Aá’Ơ¨Á:ƒ̉Ä÷̀Mm.ơ£ÎÊb₫ÔŸu  M(@2ù•fâ!̣ËNd8fé ]̉#“́ă…Â$)[¶°Î†ˆè‡„¸fMÖÙ°Đ_tEïóÏYgCDDsi.£p02xs Hæï/İΆH¦[2“™É:""Ê¡>v'Ï`zzz²>F …#HÖ°¡‡‡Ó×_³NJÉ3gè Ă½'‰_%d,RRRÜÜÜXg@„[Ơ ¡ÄDÖ”`j/`…#ªøx!6Í‘1œr}3KjPưF@VP8@UÈiFsç„ø7XgĂ­­3Lñ±Ù1δ …#TÅ'Ÿñ³glsÏ>óÎ;lsaiåJ!f>#øeƒ+hăl@ÛP8@UÈiÚÀÇÙî_.Z´bÖ}R¢pÄ\<Æ…#T…ŸŸ3/R@ÍÙ³Œ–dÉ8Đ6 ©Ư»YgP̀ơ‰l<¤‡¬SBáR©XgPlôhÖ°æêÊ:0 (À 8!Ħ<ú(,d u§î¬SíCáU4p ë ˆJ>`‰ÂQ&c–î̉]!%ŒŒ0F( ÄEỄ½¬²Ø²EˆY9÷É¢È̉˜Oó…”P8#PEíÚ qr2«,^¼`}äÄÂBˆŸ>e–ÆszÎÇ©#Ă:‚ªÈ×Wˆ1#ü¤¥1Ûu$E²>zĐ-P â·₫1̉¶-ë L G0< 1FÆpzô`HmªÍ:Đ Puææl÷¿|¹¿ñÛ\äB ( êXOˆ19ê:tb&çGü–ê¡4”ơù0•Âqß¾}^^^>>> .̀̀̀¬xưüüü~øaÔ¨Q^^^ưúơ›={v2»iGd‡uáø̣%ë3 oG0Ø©¸pt ÖçtÂ$ ǵk×.Z´èÎ;̃̃̃¶¶¶aaaS§NÍËË+o}¥R9a„U«VefföêƠ«aÆ‘‘‘o½ơV“Û?2¤Pñ₫#“D€­$JbèœñIII¡¡¡...‡ ŒŒ?~|bbâªU«ÊÛdÏ= ƒ>zôèúơëẃØñŸÿü‡ˆ1|!€l1Üy³f¬_N,-YgÆÎø ǽ{÷Í™3§^½zÜ’ ØÛÛ:t¨¨œ¿đˆh„ ¯ßÆĐ½{÷V­ZƯ»wï)Ăw2ÅÆ ñ¼y¬³‘“À@ÖQ;jWưF@Œ¿pŒ‹‹333ëÛ·/¿ÄÜܼwï̃\¨®AƒD$®U*Ơ³gÏ̀̀̀,Ä/ö0e½z±Ú³ø¡JLâ(&>ü¡×]?¢GBxK5€ñ2̣ÂQ¥RƯ¾}ÛÉÉÉÉÉI¼ÜĂĂƒˆRSSËÜjèĐ¡VVVË—/?wî\^^^ZZÚâÅ‹>|hggÇú˜äA\¤Üº¥Ï=‹ ÇÆYŸ9a8fI<2…#€3̣ëg¹¹¹J¥̉ÁÁ¡Ôr{{{*yMQ̀ÓÓsÇ'Nœ8q"¿0((háÂ…÷ëééYjÉáÇYŸ “öđáCÖ)‡z¯ăgkÖdΟ_Ơ4î”øx7>NIIa}&䦸älß®œ9óÛkÖ/l$«â¸aJĂB¿h~ƒ1çïïÏ:¹0̣‘:mccSj¹­­-eee•¹Uvvö+^¼xѦM›víÚeddœ>}úÀƯºu0`€”ư&%at¡́¸¹¹U¿L›F}Ä…·o;htz«ß)èỌ̈dd˜k|r4Øđ]«ÎæP)œU¶ÔÿZW¿Bd"Œ¼ptppP(¹¹¹¥–çääĐëëêæÍ›¿`Á‚>ø€[’––6nܸàààßÿ½yóæ¬ @fôü<Ưkø›T>^Ñ+Ö)€>ù3öööêW³³³‰ˆg-öøñă'N´hÑ‚¯‰ÈƠƠuúôéû÷ïg}L&íÅ !ÆÈuâ÷Ç0af́­˜8ăÿîââ’‘‘ÁU<î¹(ơơ322ˆ¨™Ú́pÜ…Æ'O°> Ù(9æL?ij©¢pT'>'‰‰,ÀÈ£fü…£ŸŸŸR©zôhËׯYxñâEJJ 7lÍÚÚºwï̃÷ïß_¿~=?Cxrṛ¦M›jÔ¨áëëËú€dCô8‡̃̃̀âÍØ†dÄ!ÖÛ¹ÏÅ3•¦²> CF>8†ˆ\]]çÎ2|øđ^½zƯ¿?&&¦M›6S¦Lá׉ vww?xđ }ơƠWcƌٴiSDDDëÖ­322âăă‹-ZôÆo°> Ù(5màÀzØgFë£6L ÇFÔˆơq€ÿG"4ỉªU«ÜÜÜ""">}´}ûvơÉyÎÎÎÓ¦M³±±9ỵäÇûôé³wï̃÷̃{ơ¡È‰­­ăJ üäçëiG ”PưFÀ (J=ÉƠçéé‰yå&%%³ é„B!ÄUüe¢Y§đ;tt$¼:¾LƠè"úEAÂ.U„¿S´¿ÁdÈdÿ®—éÇW¯^Ư¾};&&&55U©T²Ndá0É4}₫9ëläê­·˜íú ÂĂ<FNvÏ8:ujÓ¦M/^ä/…ZZZöë×oÖ¬YÑ ;^^tñ¢̃ö&¾¹xÊ@¿ưVŸ;GƯ»ëvwÏé¹°k̀Å`́äuÅqáÂ…“'ONHHß@/((ˆŒŒ6lØîƯ»Y'%‰Ë·?ÿÔỡÄ…cË–¬]®†âƒu¾;ñȘ¡4´-€Qá&^R»vmÅë§u¾ụ̈ËØØXÖi€ˆ¸p\°@×{‹f}¼† A!^»Vç»û'ư“ĐÖGº%—Â1???44”‹ƯÜÜ6lØpé̉¥ .\ºtióæÍÜ[[”JåÎ;Yg "Ưº qÉ÷3äåé|Ïèë£ư‘Ë3?~₫ü9ƠªUkûöíü[¤­¬¬úơë×®];ÿœœœøøxÖ™@9ô8#OYï™6P8˜¹\qlÔ¨7±b›6mê©ưP·nƯvíÚ‘­x̃8=N€€‘1swg)¹DÔ«W/"º{÷n¾Ú¬µwîÜ!¢®]»²NJªQC?ûÙ´IˆQ8VL|~₫₫[O;íOưY7蜌 Ç 4ỉ$##cÖ¬Yươ¿üñăÇŸ~úéăÇ]]]?ùäÖi@IÎÎúÙxG??ÖG-oâñ1ÇëpGWè Ûî?¹<ăHD_|ñ…««ëƒNœ8íááá́́œ‘‘‘œœ\PP@D 6\¶lY©­6nÜÈ:qÓöå—4yrq|æ ùøèh?âG(Ëc(Í›GóçÇááôڑx.•´’ơq€Îɨpu P=‰‰zØI£F¬ÀTɨpœ={6ë@¦Ä÷©§La!0€ƠßîPƒê7̣‡[ƠPmº̃ƒø8æâ‘B|–._ÖÉ.¨HØ¡WLă+£G&¢zơêm̃¼™‹+Uê}ÖÀ^@ƯºU?{¦‹1Ïâ±sgÖÇkhΜâ8<œ:tĐ₫.Ä#cP8˜Æ…ăƠ«W‰¨aÆ| †' €Ö®-.,1U·–DD°>FCÓ¢…¯ZE jÿ¤̣1 G[ƠPmâù¸Ÿ=c ”–™©“f³H°mI–¬ôñÇ¥K—‘ €aÓñŒ<µj±>@xí!=dèăÂqܸqeÆ`¨²³uÚVĐƯª₫ơ×_¿ù曫F)ñmQm¹qƒơÑ& Ñ•­YOâèE^¬ôDFW·oßÎÇæææ... …‚uR ÍoñÁƒ:™6ªáÏ?µÜ`$E²>&`@F…ăưû÷‰ÈÜÜ<$$ÄÏϯfƯ0PçÎé¨á¶mY€i“Ñ­êæÍ›‘§§ç°aĂP5çñc!vqa¡©__ç»°ÓĐ5]»v%¢çÏŸ³N4̉°¡.Z?œ÷ŬÑĐ̀œ)ÄZĂCcX%èŒ Ç?₫¸yóæ©©©â‡À`ˆÇÇj«UqሹxªJGc–ÓqaxK5€)a|‹á“O>tvv¾{÷ị̂åËwï̃Ư´iS3³2êÚ7²ÍÊ@¡¡Åqx8½ơ–VZƠñ+ œxZ¤đp5K;͇T£p0)Œ ÇcÇ•¹üÎ;wtt[tÄß_ˆüQ[…ăË—¬ËX9¢µ¦₫KÿåcGrd}d ?2ºU †­F !×zó˜K>₫¦¿«ß"ÆW§OŸÎú €¤¥i½I¼¥Z3vv”Í: 0Œ ÇÙü;ÊÔÄ ïCFᨡ¡Cé¿ÿ­~3ekGíXènU€öøøh·½¹s……£fÄçmƠ*-4x•® cd €‰‘]áx÷îƯ;w¦§§ÑÓ§O,Xàçç7räÈM›6á5Örש“ß¾]ưö^¼âÆYaêß_ˆµ̣A, ×»RWÖÇz%¯Âñ¿ÿưïĐ¡C—-[–™™ID3gÎÜ¿ÿǯ_¿₫Ưwß}øá‡*•uP¾É“…Xóèè`ŒÉ©WOˆµ2·‘x.‘4’ơñ€^ɨp¼yóæ—_~©T*¹‰‰‰.\¯Æ:M(_ûöBŒ åçÖ--4".ÀÔȨpüñǹ >>>Ç¿™ }ûö_~ùeÍ5‰è×_e&Hsô¨ssc}8đÚ+zÅ:`FF…ă7ˆ¨C‡?ưô“³³stt4·<88øí·ßîׯ%''³NôDü€cíÚ¬³1dVV¬3c!£ÂñáÇDÔ¾}{"JOO¿~ư:ÙÙÙ½ùæ›DÔ°aC"ÊÍÍe&TÈÁA[-‰ïu‡„°>.C,Äkoêîa4Œơ‘€¾É¨p´µµ%¢´´4"ân[÷éÓÇÜÜœˆ²²²ˆÈÉɉuP!íÍ#.ů3„ª÷I5==Oç…f1€é‘QáØ¸qc":sæ̀æÍ›øán¡ŸŸ=xđàĉDäââÂ:M¨ĐĐ¡B\½·#ct¶ˆ§×¬æYŒAá`‚dT8>œˆ^¾|¹nƯº””"ªQ£Fï̃½333ưưư¹™{ơêÅ:M¨øêÖ¼yƠi)#ƒơ±£ưû«µùjZÍǨë£}“QáØ^<—Q`` R©äæè±²²zçwX§ cÉÉa hY.áAs“Æø]Ơ%R±°øùçŸ7õóêƠ«={Î5‹ÿÖÙÙyăÆơÄSÙ€̀Ư¹£•f|}Yˆá37§×“ähNF…#Ơ¨Qcö́Ù³gÏ/´³³;pà€§§§™™Œ®€N]¿.ÄxKuơĐï¿k³ÁæÔœơ12*¿ûî;.5jTcÑ[ikԨѪU+ÖÙ€d^^tñb5ÛX»VˆQ8VŸ¸pÜ·5i$ƒ„ÇN12À4ɨp {ôèơíÛW\8€±±â?ÿ¤† 5hCür¼–-Y‘áëÜYˆ5,Ñ1>®OơY0 £›¿£G悰ΪáÛo…XÓÙ_^¿: ´C\8j<#x.…´ơ12*g̀˜1räH"Ú²eËăÇY§êÖMˆ1£ühü¸pÓ$£[ƠÜêúơëß¾}{àÀ­ZµrttT(¥VÛ¸q#ëL@²j˜JA>̉SÖ)c2*ÉËËKHH`T[µç€ñôd}ÆẪ²²X'NF·ªÀxÔ¨Q­#"„¸äô\ ¹ „øùój5Ơú±>`CFW§OŸÎ:Đ’€€ê¼ÛN|sñhK@­__‡‡Ó¸qUÛü]Â\<¦JF…ăl\X0âÂṇ̃̀ñ©̉ÖâÂÑÊơ±‹…XƒÂQ<2…#€É’é­ê¤¤¤ÈÈÈƯ»wçääfáÁĂ"¾N8wnU·¾Ÿu₫Æn×®*o²‚Vđ±'áÉS%£+œ°°° 6¤¥¥q{ôèaggçëëûÁ̀œ9S}5ÈQ}Ñ́Đ/^°ÎJÓ`̀R&e²ÎØ“Wá¸bÅÿüç?êËsss7nÜøôéÓ%K–°Îª(1QăM»ve<ˆÈèVơµk×¶nƯÊÅæææür₫*ă®]»âââX§ º%¾O‘1Úåç§…F\È…ơq32*·lÙ¢R©̀̀̀/^Ï/···_¿~½••mÛ¶u ‡‡fÛaHµîˆÏç•+6‚‘1&LF…ă7ˆhÈ!AAAÖÖÖ⯠ԧO"ºyó&ë4@[[!₫ë/éÛ­\)Äâ7,Cơµo/ÄË—WaĂu´qÅÀ”ɨp̀ÈÈ "77·2¿uww'¢ôôtÖi€4âđøqéÛaHµîˆoUÿùg6L¢$>₫‚¾`}ÀŒŒ GOOO"*ó)F•JKDÍ›7g&H#.RªưÆjĐºÓ§«°²xÇT“uîÀŒŒ ÇvíÚQLL̀¬Y³N¿₫•–=cÆ ®plƯº5ë4 ê4*kƠb6¼–J©¬SYÑt<Ó¦M‹ˆˆHOOŒŒŒŒŒäN4‰_ÁÎί%0HÙÙl„‘1ºàêJ¯çɨ2]qtvv^½zµ““S™ßÚÙÙ…„„¸ºº²Nt(*Jˆ4`1jØPˆ5˜¼¡WLŒ G"êÖ­ÛÑ£G?úè£6mÚÔªU‹ˆlllZ·n=ỵä?₫ø£_¿~¬€ª¿Yñ=íÅ‹YçoŒ>ÿ\ˆ%>Ap—ị̂ñtÂm“&£[Ơ[[Ûààààà`"ÊÉɱÏè†% €)/_¦*ƯB\Ê8;³Î߉§áĂ+ßD<2“8˜8y]qä)•Ê\»víÁƒJ ”*R$¸~uÎÆÎBt¹@âGqáèE^¬X’ƯÇÛ·o¯]»6**ª  €[biiÙ¯_¿ààạ̀¦x™ză !̃±ƒ.d” q*ÇHd)È…¼®8î̃½{øđáÇă«F"*((ˆŒŒ  c hª¯}ÂÔ[2$£Â1..nÙ²eâÓµk׿c¥RùÅ_$$$°NtEüf(̀Å£;Ư»k¸amª­á–`,dT8îܹ³°°ˆ6mº~ưúK—.]¸pạ́åË7nänRlß¾]³Æ÷íÛèåååăă³páẦ̀̀J7¹råÊŒ3|}}½½½ƒ‚‚Ο?Ïú  ñ́/•?r‡ÂQw†â;wª°!FÆ€Œ Çøøx"²¶¶̃¶mÛ Aƒ¬­­‰ÈÊʪÿ₫;v́°±±!¢ .hĐ̣Úµk-ZtçÎooo[[Û°°°©S§æååU°ÉñăÇßyçăÇ׫WÏËËëâÅ‹ăÇ?^•÷íQÉđåË×]´Hˆûôa¹ñ÷ɼy•¬¼V ¢p0y2*­¬¬ˆ¨mÛ¶ Ô¦ư­[·nûöí‰ÈÜܼªÍ&%%…††º¸¸>|844422rüøñ‰‰‰«V­*o“¬¬¬ùóç[XX́رcÏ=¡¡¡»víªQ£ÆâÅ‹‹XŸ'ƒâí-Ä‘•Œ±xú”u¶¦A<-RNN%+§‘đ™₫ÔŸuîÀ˜Œ G///"º{÷n~~~©¯ ï̃½K½«zï̃½EEEsæ̀©W¯·dÁ‚ööö‡*¯ ËÎÎ₫è£:wî̀-iß¾ưàÁƒÓÓÓ¯\¹Âú<”>âÊfÉÍe­éáçÙ,x.úTŸu¾À˜Œ ǹsç6ỉ$##cö́Ùÿư7¿üñăÇÁÁÁ=233›d‚éOÜŸ’’ÂÇ¥:åÊ•D®\lfö"%å1ëÄYíÚ³³‹ÿ‹;…Ôÿ°¼î¿ª)÷R¤4Z‡ß`̀ùûû³NA.d÷æíâ†Ns#²Å¸W`gee©ọüùs"º}ûö“'OBBBúöíụ̂åË_~ùeăÆ³gÏ>xđ ”ëII¸¹#;xó3=zĐÙ³\XªÄÅsmmØ`Ó´)úK‡BB((¨8¾{×Íϯķ|¿<¢GüÂ`^ßÅN>[ê­«_!2Œ ÇéÓ§ë´}…B‘«öÈ}NN½¾îX 7¸›ˆV¬Xѯ_?.1cFZZZXXXxxø˜1cØ4Àtû6µhQæZâ ›6e³±+ơñR…£đ•hd æâb^8Î=[·‡gaaoo¯~e1;;›ˆøqÖb666VVV …Â××W¼¼ÿ₫aaa7«øÚ4 €úüóâ8<œÊùSÇ:OS"~~'<œÖ¬){5qáØ“z²ÎؓѨjqqqÉÈÈÈ.ù8÷L‹‹K™›Ô«WÏ̉̉R¡Pˆrw¨¹a:Pâ¹–-c ”vëV¹_ưJ¿²ÎäE^Ï8ÆÆÆnذáÖ­[Ùå÷»~ưz•ÚôóóKJJ:uêTÀë{3*•***ÊÑÑ‘›9R¯¯ï¶mÛnƯºÅ ¾æps÷´lÙ’ơI0d•®‚ûÔ²%£+±±±ăÇ?₫|ff¦²|Um600Đ̀̀lÆ 9¯ß>zôhKKKnÉ‹/RRRøak#G$¢E‹ñĂ®¯\¹̣ă?ÚÛÛ0€ơy0Bâ7€ß¤ ºÓ¾}V6“Ó_ÀŒ®8~ÿư÷*•JëͺººÎ;7$$døđá½zơºÿ~LLL›6m¦L™Â¯́îî~đàA"jƠªƠ§Ÿ~ºfÍÿ.]ºäææÆÅÅ)å˗שS‡ơy0@ööTÖ$¼ƒ…8c0ô" €‹ă¿ÿ¦ú¾#c€#£Â‘ë>f̀˜€€~tsơM4©nƯºˆˆˆhĐ APPĐœ9s¸yÊ3mÚ4ggçíÛ·Ÿ={ÖÑÑÑÏÏoæ̀™îîî¬O€a  ÿ₫·‚ï¿ÿ^ˆf­i o¾)׬¡•+K¯đ ư"¬ŒÂˆHV…£MVV–‹‹Ë²eË̀̀´|[dذaÆ +ïÛ!C† Q{UÅèÑ£GÍú¬GG!>vŒú÷/ơ½Ú|ÿ s>>B|ûv+$R"w¢N¬óYÑc+Ük mmmµ^5cË— qYo¬NOg¡i+ó-ââ¹x¼É›u 2*Ñ&NœhaaqçÎíÛ·ëâaG`F<Ù~™E 0•Ÿ_ÆÂJ`ÈŒnUẃØq₫üùË—/_¾|ù÷ß_¯^½R3)rŸ¢ƒ“œ\Á—%çƯƯ27§ªÏT&MF…ă­[·6õ̀ÅÙÙÙLåÆäÿbS}û+-[̉µk•¯V›j³ÎäBF·ª·lÙÂÏ›ÆFü₫˜’Ä/̣Ôñ[H¡„Y³„8&¦ÄW/èO¤‰¬3¹ÑÇ .pA·nƯüưưµ8°@—/ÇưE đ߈zÄ»™ôIÍ-LMM1cW8¶nƯu W¯ø80u6¦­~}Ö€Ñ<Ó¦M‹ˆˆHOOŒŒŒŒŒäN4‰_ÁÎί%0QÔ‡1[ôă¥v¥®¬óÙ‘ÑGggçƠ«W;99•ù­]HHˆ««+ë4 z^¿9œ„j…#[ÂùovOXHè(MF…#uëÖíèÑ£}ôQ›6mjƠªED666­[·Ä:5ÆWŸ={VƠMJ¾² &K0Œ Ç7ß|³ª›$%%±Íª/„n#ƯºQLŒđцlXgr$ë[Ơ`œ̀Í̉₫S£F¬ó"›’…¢9iØ5 w~(‹gÖ¬j4Ẓí·D}Ọ—ÓrÖ€ÉeTµB¡xă7:v́ؾ}ûÚµk³Nt) <´?ë$ //¢¡ù˜‹Ê$—ÂQ¥RƯ¾}ûöíÛ¿₫úk‹-:uêÔ±cG//¯fͱN ´- —̀Y'jÂù·ª LŒ ǰ°°Ë¯Ư»wˆnƯºuëÖ­Ư»w‘ƒƒCǹ"²}ûöܬà`Ø̀Q5ÊRË›¬3¹S¨T*Ö9ËÊÊJLLäëȬ¬¬R+˜››»»»ÿöÛo¬3­„§§'†~ËMJJ››ë,@ PC("\5„u:@D¤ «H.5á7˜,™́ßơr¹UMDööö½zơêƠ«÷ñ₫ưû—/_¾té̉åË—õ¼YXX¨T*õÄ?ˆ ^|¼P8 G™¹̉Ú±ÎdI¾£ªk×®mkkkkk[«V-KKKÖé€Ö„ ̉q…#°÷˜ ÂgÈ’Œ®8%'''$$\ºtéâÅ‹÷ïßW_ceŒÀ? qSºOgÎë¤LƯ*Z%|X}úơcÈăÂ1;;›+/^¼˜˜˜øâÅ‹R+XYYµk×Îë5GGG¶ @ơ=xP̣ó… (™»Kw…§{̃ö`Èă±k×®ê£sêׯïååƠ©S'//¯V­ZYXÈè²(h_x8ÍÍ: Sw?̃ºÅ:!%Æ5_5r€s—4h P(ˆ('''..®Ô&Ư»wg›3hKSºODtô(ëD€^Ñ+Ö)€ËÅ<~đ}ûöU¼¦i~0/_ 1FÆÈQ‘|Msøzµx±·§DÖé€[Å7&¢s@ GĐ«Œ !FÿfÅR¬đaƯîÿƠ`}«úàÁƒƠo Hx™w§£₫ưY§fºÂÅÏ „ÿ8}ø!ë̀@fîîî¬ÏèƠăÇe- GáÈP‰Âña£â…xÔàV5ÈÀ¦M¬30iñ¯¾0?ŸuZ ?(€ ;»"áC€ÂôçæM!>ưët ´æÔ¼ÿ\ÖY€|¡pư?6çë›K:°Îè ïz  __¡pŒ‰aÈ GĐqáèî^@Âç¿₫b‰Œ)U8b| ”‚Âôçĉ’Ÿ›6âƠ«Ygg¢B(„Ñ úơ•üGŒY€Ryyyyyy………D¤T*SRRRRRXŸĐ—©S…øÎÖÙ˜¨ûÜĂẸ̈ô)ëä@f=zôèØ±ăÎ;‰èÑ£G₫₫₫₫₫₫¬Ï 蜳³Ú"Üe$ƒ2ªß˜Æ€¿zơˆ=Ú¬Y³çÏŸs Ï;WÁ&Ư»wg›3TßĐ¡j‹ X'Å̃x× lŒ Ç:uê<~üøÂ… .\àNœ8±‚M’’’Øæ YºTˆ…Q1TXÈ:5 "̣%_. ơë‹>zD..¬3Ù`|«ºOŸ>¬Ïè‰øeƒÂû=nH ¹ ysa…“'Y§r¸pœ?₫;ï¼Ó¤I“ZµjY[[s kUˆơ ‰btpxÍ™#,Å´z'‹çsúœ fÏ­€GO@„ñ­êÚµk/Y²„‹Ó̉̉|}}‰èâÅ‹¬O hßư2ï§r §nƯX§iZÄ…cKjYÆ (@DFó8ZYYơïß¿¿p L€««<È:“Mѯ€y@ŒñG1''§7̣‹222œœœ̀ÍÍY§ÚdcSΗ.±N *"£Â‘óâÅ‹-[¶œơܹ¬³5ơ¨ø£Ÿưñëœ@~dt«ˆâââzëÖ-nÇ‚‚‚äääüÑßß?>>u‚ !ñ£râljˆZ´`P•èq]½Ê:9 999sçÎMOO/óÛ'O|öÙg/^¼`&hB\8véṚ;q‘̣úE â‘1<¡¡¡ươ9::~úé§¿₫úë™3göïßÿÙgŸ988QZZÚ?üÀ:MĐDDDù߉‹”Ï?g© ™Oóù¸Tá(^ó›oX' ²!£g‰ÈÚÚzûöí¯i9;;·nƯºoß¾yyy˜©À  Ä™™¬³1!ÏI¸¾kEVå­–•Å:Q ]q¼uëuíÚƠCíMîîî=zô ¼oÀđU2‹?n‹êÑzÀ:002*9J¥²̀åEEED„©y ]é‘1¥à£làƠ NF…£§§'ÅÅÅ]¹r¥ÔW×®];wî¹»»³Nª́÷ß…¸’ÂXèJ]Ơ*Ä*ë@dT8zyyÑ«W¯&NœøƯwßÅÇÇ?xđ >>₫»ï¾›0aÂË—/ùuÀ°œ>-ÄƯ»—µ†“ëMÎ=ºÇÇ6TÆœ́ÎÎBŒ'€#£ÂqÊ”)M4!¢œœœM›6½ûî» x÷Ưw7mÚôüùs"jܸñÔ©SY§ U&.;Ôa&"¢Å‹…81‘u¾&A<Ï·ô­ú _~)Z…#‘¬ Gkkë5kÖ4lذ̀o]]]׬YcmmÍ:M¨²ë×+[C|[E^ˆ ÇÎÔY}…5D+£O€ˆdU8Q»ví"""fÍƠ¾}ûÚµkQíÚµÛ·o?sæ̀C‡µoß^ă–÷íÛèåååăă³páẦª<€Ÿ––Ö¹sç¹xK€îˆ_sđ ëlLÂ!:$}åÔTÖé€<ÈhG••Ơ'Ÿ|̣É'ŸQNNṼO½víÚ-[¶ØØØx{{ß¿?,,,99yûöíR®_ªTªùóççää°>1Æ iS +=Ë:M(›¼®8–¢•ª1)))44ÔÅÅåđáĂ¡¡¡‘‘‘ăÇOLL\µj•”Í·nƯËúL0ñkDÇe ¨)sd çÍ7Y'2#ëÂQ+öîƯ[TT4gΜzơêqK,X`ooèĐ!nnÈ $''¯]»¶eË–¬À€‰«h.WWÖ™¨R/,ñ•è›”Ö‰€ ágffÖ·o_~‰¹¹yï̃½322*ذ°°p̃¼y ,`}L\8öéS₫zâ"¥°uÖFî$äc‰…#ÆÇ}á¨R©nß¾íäääTr–8î­†©>ïưư÷ß߸qă›o¾±³³c}́Ài뉋iO’€ÆV̉J>® ṕÔIˆ7nd4È€́ÇhWnn®R©tpp(µÜ̃̃ˆ>}Z̃†—.]úᇂ‚‚zôèqíÚµªî—{ ØáÇYŸ “öđáCÖ)˜®‚7>NƯï,Ơ)f-[̣#g_¾œ;£º”Ü(™,‹ắ”́lÊæ¿RûĂRÜ}7o–è>Đ'ücÎßߟu raä…c^^ÙØ”~ô›v“••ŨVóæÍkܸñ?₫ñÍö›””ÄúĐ¡477·ê7ƠTªÊë”ÚÑѵÑ_ºt›nó±z/”×/øCÄN>[ê­«_!22-“’’îƯ»—™™9tèP++«/^p׫ÊÁÁA¡Päææ–ZÎM¯S^›!!!>ܵkæĐ¢!C$¯–Æ:Y(fkK˜ x²+ĂÂÂ6lØöú¯=zØÙÙùúú~đÁ3gÎT(U;< {{{ơ+‹ÙÙÙDij‹Ưµk×ôéÓ;tèÀúd¼øx!®hH50̉†ÚT¼B@íÙĂ:K y Y±bÅÂ… ÓÔ.6äæænܸqé̉¥´éââ’‘‘ÁU<îIơơ“““‰hÓ¦M¯5ˆ~ÿưwOOÏ¡â£@eÄo\êƠ«²µ4`¯I¸E·øØ*¹*¾·v-ëÔ€5×®]Ûºu+›››óËù«Œ»ví‹‹«j³~~~J¥̣Ô©Sü•Jåèèèå奾~Ó¦MJêÙ³'¹ººôîƯ›ơy0$⻜íÚU¶öŒB|ûvekƒ†Î’đn¹TÉËTgÏâ?ÿd:°&£ÂqË–-*•Ề̀lñâÅñ¢û[öööëׯ·²²"¢mÛ¶UµÙÀÀ@33³ 6đ¯ MOO=z´¥eñ¨Â/^¤¤¤pĂÖzö́¹¦¤O?ư”ˆºté²fÍyóæ±>O†¤jÿÖĂ´zN¹íM•ücX<•údT8̃¸qƒˆ† TjTÊ AƒúôéCD7õ¬j³®®®sçν{÷îđáĂ¿øâ‹‰'®]»¶M›6S¦Lá׉̣÷÷ÿè£XŸÓ&~°EΈ Ç*©ú/`062*322¨üÜƯƯ‰(]üÖ[É&M´jƠ*77·ˆˆˆ§OŸmß¾]}rGЦM«¸ÁÑ£¬S6Zy”Ç:0T2UíééyñâÅ2ŸbT©T±±±DÔ¼ysÍ6lذaĂÊûvÈ!CÊŸ)¤M›6˜—@/_ qíÚ¬³MYY•èJ0e2ºâØ®];"‰‰™5kÖéÓ§¹…©©©ÑÑÑ3f̀à ÇÖ­[³N¤ßm ‘¶F3¶‚f*xÙ ˜x|̀ăǬ“¦dT8N›6ÍÙÙ™ˆ"##?üđCná¤I“¦L™ŕØ1"²³³›>}:ë4@*qá(uöoLö¨cèK,1f x2*W¯^í$Â'bggâêêÊ:MJ“"C\¤;ÆúŒxdŒÄÂQ<' G'£Â‘ˆºuëvôèÑ>ú¨M›6µjƠ""›Ö­[O<ù?₫èׯë  4¹­)*uåJÖG`„6̉F>nBMªºù₫ư¬˜’Ñà­­mppppp0åääØÚÚ²Îô¨Q#!¾wu6Fè =©ÎæEE¬˜’]áÈIJJºwï^ffæĐ¡C­¬¬^¼xaGæ –†o\JNf833CÉD2,ĂÂÂ6lØÀ¿®ºGvvv¾¾¾|đÁ̀™3ù×€̀‰'‹Æˆªô-Ơbô¿ÿ±Îd@^Ï8®X±báÂ…|ƠÈËÍÍƯ¸qẳ¥KY'R‰_ÏYµÂQü₫ĐªÇ$}úÑMñcS`”zôb)Z%.5–Àú0€DäæVöóÚîîîD”Î:M¨:uª±ñÁƒ¬Ó7*”Á:0l2*===‰῭§U*÷®êæÍ›³NªÆÁ¡°NYZ²Îd@F…c»víˆ(&&fÖ¬Y§OŸæ¦¦¦FGGϘ1ƒ+[·nÍ:M¨ÜáĂBüơ×Uß̃Bv3…_̣­ê&,Äâ‘O`RdT8N›6ÍÙÙ™ˆ"##?üđCná¤I“¦L™ŕØ1"²³³›>}:ë4 râG5™Ä?êÀ5ºÆÇU‹§xÑxôÀdɨptvv^½zµ““S™ßÚÙÙ…„„¸ºº²N*'.,llª¾½¸H‰‰a}4FB<2FƒÂqà@QS(L•Œ G"êÖ­ÛÑ£G?úè£6mÚÔªU‹ˆlllZ·n=ỵä?₫ø£_¿~¬IRRª·½¸pœ;—ơщ¯Ixh %µ¬NS;w²>`DvÙÚÚQNN­­-ëŒ@ïÄ÷^¼`‘È¢,m5¥R±>`DF…ăwß}Ç£Fjܸ1¡j0t;W»‰‹Y“QáöèÑ#"êÛ·/W8€!JMbŒr‘¡zTO³ ûơ£ăÇYgLÉèÇÑ£GsÁƒXçÛ±Cˆ5/[TáMÊP%ŒŒá *Äçα> `AF…ăŒ3FID[¶lyüø1ët@Câ’¢kWM[?©̣ü9ëc2xâ!ƠuHĂ—ù´i#ÄÑѬ XÑ­êY³fQưúơoß¾=pàÀV­Z9::*R«mܸ‘u¦Pí̀Ơ²r¥0Lx8Çú° ›¸p\FË4k¤ÔŒ<óç³>*Đ;Ü,ßœ¼¼¼„„Ö€&´3ävÀ!FáXmâÂѬªßà©S¬ XÑ­j02VZ¨OˆóMkÁ³ă 2ºâˆ× -5”™ÉúP ˜ƒ={Æ: `GF…ắÙ³Y§Ơ%¾ƒù̃{¬³5]IăñJDD£FÑO?Ç*©=…F·ª@›Äw•ų·hÂÏơщ{t5‹§xsÑÖx‚ÀÉè#ÿæ˜Ơ«WÏÓÓ³mÛ¶5jÔ`2”vđ ×­[½¶è?ă+W¨];Ög¨Ä#c´[8V÷ß`hdT8nÚ´IúÊîîîkÖ¬ñđđ`5”píöÚ  O?-¿₫víb}p†ê{ú;Sµ̃Y³¦ÿü3m̃̀úØ@¿ ơVurṛû￟““Ă:Đñ¿ >dK¢$]4‹yÙLŒ®8N:555ơĐ¡CDT§N={6hĐ ===&&æáÇDôæ›o¶oß₫É“'gΜỵäɳg϶mÛöÉ'Ÿ°NÊĐºµV›;}ơ€œ Ç÷ßÿƯwß%¢ÀÀÀE‹Y½N©T®Y³æÿ₫ïÿ®\¹̣ùçŸ{zzæææ~üñÇ111§OŸFá B¬ù[ªAglȦú¼ù&?ÏúH€Ưª^·n]jjj½zơ¾ụ̈K+ÑÄÁæææŸ}öYăÆsss7lØ@DµjƠ7oưù矬³x˜­v ÇúơY“Q©æÈ˜âFDm¤¤°>$Đ/çÎ#¢† ™•ÎJ¡P¸ººÑåË—¹%µk×&¢LL '‹ qŸ>Úh±Y3!V*YŸAZOëùØÜ«ß`—.BŒ×U˜/^¼ ¢«W¯^¿~½ÔWwï̃MLL$"Ơë—à>|˜ˆêVw¶Ц§OµƯâ¼yBÁúø R*¥̣q0W¿ÁÁƒ…ăcLŒ Gooo"*((?~üºuë.\¸đàÁƒË—/‡††¾÷̃{yyyDÔ±cG"ZºtéêƠ«‰¨qăÆ¬³Á‹ÚnóMW›xÇ:TG»>̀úđ@¿d48f̃¼yñññ™™™ÏŸ?ß¼yófµùÁ,,,ÆOD/^ä–Œ9’uÖ Kây₫Q8jäƯ`]qlÚ´éæÍ›ëƠ«Wæ·–––K–,á®Jr:wîNĐƯªKJJŒŒÍÉÉéÛ·ïúơëù¹x@†bcuÓ.”j½©·¶urí}`JäU8®X±báÂ…iii¥–çæænܸqé̉¥¬½ọ́âï¾cù•~Ơơ.ñd} G2*¯]»¶uëV.677ç—óÏ8îÚµ+..uP‰&MtÖô;¬ÎÀ( ¯Ûm’Qá¸eË•Jeff¶xñâxÑøL{{ûơë×so¯̃¶më4  /_ ñĐ¡¬³ƯkÛ–uÀ‚Œ Ç7nÑ!C‚‚‚¬­­Å_ 4¨OŸ>Dt7EdIü [€ÖÆ`¼fgÇúø GÆ7(jïñcÖ‡ú"£Â1##ƒˆÜÜÜÊüÖƯƯˆ̉ÓÓ«Ô&èÇ?ÿ)ÄÚŸư×05²ƒvđ±N Gqï€q“QáèééIDe>ŨR©bcc‰¨yóæ¬Ó€2èvÊ,ñücÇX«Á¸KẤEỏ›Úm¼W/!Æ„i¦CF…c»víˆ(&&fÖ¬Y§OŸæ¦¦¦FGGϘ1ƒ+[·nÍ:M(ƒnoV~ö™cöÉÄsñt¢N:ÜúÀd(ä39bzzú[o½UÁÍh;;»ß~ûñ lyzz&%%±ÎJHII)ï)Đ ñ $₫R©Z§đ;pw§[·X®aPĐ+*’ú«^z¿hĐé ü“!“ư»^FWW¯^í$XVÄÎÎ.$$D₫U#€‰ë­µI¦Ë‘œ̀ú¡˜Úë`ÀøÉë]ƠƯºu;zôè?üpêÔ©”””ÜÜ\›¦M›öèÑcÚ´ivY K×® ±­-ël@…n~Ơ׫G±>6Đ/yDdkkLD999¶ø[@öâ•+u³ẹ̀eÖjḤ(§̉T]́bÉúøăâ8.¼½Y3èŒnU«CƠ`Äc#Ú´ÑÍ>ij¿üư7ë#6â‘1ZŸ‹§¸Y¼EÀôÈèc^^^|||bbâ“'O¸kÎÎÎíÛ·ïÔ©“ ë́ \'Nè~ôơ×Åqx8}ø!냖;qá8„´>µ&QăÆB|đ -YÂú˜@÷dQ8æççïÚµkË–-OŸ>UÿÖÚÚzĈ³gÏvttd)0̉£‡/^ŒÂ±RÛi»>w'zM,3ö·ª/]º4`À€¯¿₫º̀ª‘ˆ̣̣̣víÚ5dÈK—.±N*¢§Üed°>PPDE¬S#ĸp|úôé”)S₫=±diiéêêÚºukWWWKKKñS§NÍ̀̀d›0T`Ø0½́&?ŸơB1̀-`j;v́ÈÎÎæấرăÊ•+'NœØ¿ÿ‰'®^½úßÿ₫wĐ AÜ YYYÛ·ëơæ TJ<¤:@'c0^³Å£5§ơÑ]ăâÏÍe}¨ {Œ G₫Ơ‚£G̃°aC×®]%§”íܹóúơëÇ[j}‰;„X·…£n[7*çé<ëhHuqă¢¶·mc}Ø {Œ ÇpÁ̀™3+Xmö́Ù\pÿ₫}¶ @)çÎ ±nç?¿ &†ơqËÚ):ÅÇ-©¥îväï/ÄçÏk̃ Æ…ăóçωÈÉÉ©Aƒ¬ǽ́\·n]"ÊÉÉa›0”’’¢¯=­X!Ę6°Bâ¹x†‘~˜"ñ«êQ¤Tè$ÔÿNÓÓY6èûéxÀ8tî¬Ç]¼ÈúpL‘,F)¾zơêœø9©²äååIk ôGüX[÷5µ©¶®wѱ#a]Ó!‹Â1==}âĉ¬³€*_ø{ÿ}Ưï¯E º}›ơA’Ñ4Z×»  Çk×tö²rܪ͉5́ÚU÷ûÏ₫̣ü9룗©àcÎÅS¼ Ñđè)€ÑCáÓw¡€"Eñj=-E³ư OŒă[Ơd}@s*•~÷7`€û-ÇúÈÑæd·¦Êç¬Đ¢èhÖ:Ƹptwwg}À0éoIóœpt·ª@ Fë| †̀LÖ Å\\Xgúb*…ă¾}û½¼¼|||.\˜YÙ_9yyy[·n:thÇ{ơêơá‡9s†ơAÈ‹øƠñx´ u%=ŒW"*Ùûú~zôË$ ǵk×.Z´èÎ;̃̃̃¶¶¶aaaS§N­`bȉ'~óÍ7?î̃½{‹-Ο??ỉ¤7²>„Đ_áèçÇú¸eí>Ưçc=ŒŒ)̃Æ,˜ ă/“’’BCC]\\>9~üøÄÄÄU«V•·É̃½{/]ºÔ¹s稨¨Í›7ÿç?ÿÙ¿¿ƒƒĂÆoܸÁú€äbƯ:!®WO_{mÖLˆ`}dg>ÍçăNÔI?;4H”À|ÍÛù3₫Âqï̃½EEEsæ̀©÷úo¶ ØÛÛ:t¨¨¨῭M>LDŸ₫9ÿmww÷>úH©Tâ†5ïåK{7Oˆõd}dG<2f( ƠÏNmlD `d€Q3₫Â1..Î̀̀¬oß¾üssó̃½{gdd$$$”¹IJJM›’/@à€§¦¦²> Óæá!ĸ-ªF<û7ø `ÜdñÊAƯQ©T·oßvrrrrr/÷đđ ¢ÔÔÔ.]º¨oơïÿÛ¢ô™¹ví5nܘơ1Èx h½ÏƯ3̣Â177W©T:88”ZnooODOŸ>-s«Ö­[—ZZ³fÍ#FHÙ¯§§g©%Üío`åáǬS06©©DÅÿêÙ3+%åiU[иSÜDq fs,åơÙ©¥ª•rO““£Y¿t́èzéRM.F§h~ƒ1çïïÏ:¹0̣‘:m#~‡ˆˆlmm‰(++«̉”JåÏ?ÿ¼råJ¥R¹zơjggg)ûMJJb}èP››[ơøqßÖ­íƯǗ5hDĂN17'¥²Z-˜€::Ÿ 6,ySƯ¢}8§l©ÿµ®~…ÈDù3 …"77·Ộœœz}Ư±çÏŸ6lØ̣åËüñÇ!C†°> ¹?^¬ß}Oœ(Äå q3MQÅÇ_ÑWúÜơ·ß 1=0bF^8ZXXØÛÛ«_ỲÎÎ&¢zåÏ ’ŸŸ¿|ụ̀ &¤¥¥Íœ9óĐ¡C=zô`}42²8À´å'álèmGN'Ñ̀?è#fä…#¹¸¸dddp•"{Ç¥œ÷dưăÿؾ}»ŸŸß‘#Gf̀˜ÁÏË–³® p,‡¸p¬CuX¥'ºŒ˜ñ~~~J¥̣Ô©Sü•JåèèèååUæ&;v́8räȻᄏqăÆzú›×¤©QCˆẃ`Œ\§ë¬S#gü…c`` ™™Ù† ¸ç‰(444==}ôèÑ–––Ü’/^¤¤¤pĂÖT*ƠÎ;k×®=/@€ñXCµ'˜[[Ö€îù¨j"ruu;wnHHÈđáĂ{ơêuÿ₫ư˜˜˜6mÚL™2…_'***88ØƯƯưàÁƒO ̣’Né|¬ç‘1Å;'N¯/ë3:`…# 6lذaå};dÈ~ªN:aF€…„1›Ùå„Â1*úôa}JØû'ư“Y¼yó(.ơ0₫g@ë^?0̀N‡Bœ˜È:YÈ"ã±̃Ô[ÿ ˆçgÿºÂ øfä!¢’sñ0wó&ë @7P8€æ4aEF²Î@r ̀@çP8@Ơ¼|)ÄR bmÛ²Ît …#TÍB̀r‚|…‚ơ™©ºT—Ơ®Å“U2r.đñZÂ*•+…%P5r)Ä·ÉOœ` câ‘1Læâáôê%JI&?' U( j?fG\8|‘".›RSÖé¡OŒ G0LBüư÷¬³a,d7Ưv^ë @P8€†ºwg/?ŸuP c–Œ G¨ñÄÎ#F°ÎÔ0¿OŒ G¨ñƒḱK„víXg y$Üf82¦8Ñ₫ñºjăƒÂª`÷n!nÓ†u6â"å₫}ÖÙ0³•¶̣±¬ Ç­[5nd …#TÁ… ƠoC{7âăÇYgĂL,Ạ̊ñÂ6qŸÄÆj̃È G0XÓ§ ± Ï₫"‹GVäơÏ Đ ‰:uXgP Oo÷=Aá`?2¦”—/YgÅ5cè Gꫯ„¸gOÖÙp0m H[jË:"¢7ßâôtÖÙ€V¡p©=âwße gèPÖ0vƒnđñxÏ:"¢‰…Øäß"`lP8€TâÇmlXgĂß2?u6 ˆGÆ0Ÿ‹‡ăï/JÏt=0N(@ª”Ö¨_q4É"E\8¶¦Ö¬ÓQKÏûÀ˜¡pCÖ°¡ÿû߬³aà$dBEđŒ#€‘AáUV«ë Êôø1ë Œ G$5Uˆ?ûŒu6 Æ™œY§ èÛ—u (@ñĂj̣Äñ7Xg 2SœŒ(—ë×YgÚƒÂ$]»²ÎFL\¤<Î:½:D‡„Ó ×ÂăcŒ GäàAÖ”§eK!₫׿Xg£Wói> ¬Ó´j%Ä_Í:Đ`à>₫XˆMlïs®°:ëtÊö́ë @{P8@ƠXY±Î &v[ôƯc˜P5̣SJf&ë  XƯº¬3@á•Û´Iˆe]8ª.Ô…u ¥áçÀ(¡p€Ê‰'q|óMÖÙ¨«S‡u ¤’Đ+6$“w‡ Ä}Á:ĐP9ñêÖ²{2ÑçŸ ñ•+¬³Ñ“ƒ$ôÊ·ô-ëtJ[¶LˆḾÑSc†Â*wơ*ë *f’Ó†“p¤̃äÍ:̉¬­E©JŸ?`ø<<„Ødqá(s÷ï³Î´…#TA¬3¨ÔéÓ¬30Z( â)nfÎd ¨±&ëê7¢ ̃²»Ơ…Â*!¾÷+ß9Vê×g3Ci(ëÊ&₫iÁƯjă€Â*!.}}YgSq‘RTÄ:‹¢(áĐI¦å¼IY0r( {ö°Î@ q‘̣Ŭ³Ñ¹y4e{ű‹hṾ¥KYgÚ€Â*¡R±Î@Aƒ„øÉÖÙè\åđq2€ùÏ?fh G0 µj ± ܽN×Y§¦…#H%¾¨'k²ÎÙÈîUˆP-( "/ ±|‡T›°Ö$ĂW@ đ3`dP8@E„¸}{ÖÙT̀Ö–uz’NéÂA“¬ÚÑQˆg T G¨ÈqŸ>¬³©ØüùBœ’Â:¿lp%­dNE¾₫Zˆb T G¨HL ë ¤3™iÅ…c’u9ïä$JÛ˜ûÀT pcáå%ÄF]¤ˆ Grăë  ÚP8€$±Î JfåR.ëÀD¡p€råç ±ŸëlÀ0µ–ơ°o¨P.ñữÑ£Yg#EíÚ¬3Đ«!4„u •6LˆMà>F…#”K\8Æ„|†‘eµ\  ÂᒯɌY0 ( \±™Aü¶){ö°ÎF'~¤…Ă5„±W/!̃±ƒu6P=ñW°‘‘Á:ƒª̣ñâ¸8ÖÙèD<ÅóqSjÊ:ª9wuP=(Àˆ¸¹ ±‘̃#.ˆọ́XgƠƒÂ*׳'ë 4pó&ë Œ G(Û­[BlcN Ư§ÆÏ€Ñ@áe›7Oˆûơct³Î@‡̉S>îB]X§#U·nB¼mël P8@Ùrr„¸kWÖÙH÷̃{Büø1ël´́8çăI4‰u:RM˜ Ä))¬³€j@áeûăÖhƨ§ ¿¥Ú fÿ戯]Ÿ˜`\ÄyŒ®HêÂ…ê·̀ p€J8:²Î@cầÂÂ;û€%P ÖhL©d³°`h G(Ă‘#BüÍ7¬³©*…‚u:ׇú°N¡j¦MâÜ\ÖÙ€¦P8@bĂ›„Ïđ2–äƯÑ̃R-fÔc–L G(ƒø¯v[[ÖÙT•¸H‰eÖˆGÆ\á8x°è@P8,P†»wYgP=zñüù¬³Ñå´œ[SkÖéhnÇÖ€¦P8€Ñiß^ˆŸ?gÖ<£g¬SĐ¢"Ö€¦P8@E:wfA5ÅdzÎÀx p€̉>b#gb؜əu èÛ—uPm( ´ „ØP G77ÖèÁŒ)N[”ơÿ₫Ç:Đ G(-;[ˆ»vefj×â/Xg£‡é0;‘ët4Ѫ•ß¼É:Đ G(ÍfK 1®ă¡ƒ$L­ù}Å:M`*G#€Â±\ûöí ộ̣̣ññY¸paff&ëŒôĽúû ±Q)âIkQ-ÖéTWTë @#(˶víÚE‹Ư¹sÇÛÛÛÖÖ6,,lêÔ©yyy¬óĐ+++Öh…Q÷èëP8–%)))44ÔÅÅåđáĂ¡¡¡‘‘‘ăÇOLL\µjëÔôªNÖhEFë  ˜₫Î0pøC\†½{÷Í™3§^½zÜ’ ØÛÛ:t¨ÈîáTäôi!^¶Œu6 ¦ ua‚æÆgT Ç2ÄÅÅ™™™ơÍ9fnñ»wŒ„„ÖÙè–ø¾®¡ÎÅĂé×uZ“J©|l sñ'/Ê="‚u6Pu •JÅ:yQ©TmÚ´qtt}Ê:A0i†[5‘5aˆ!€aCáX7tÚÆÆ¦Ôr[[["ÊÊÊb ˜(«—t—uƠö½5™₫u ! Ö ÈƒƒƒB¡ÈÍ-}3%''‡^_w¬˜â~cUĂ¿ˆˆT R¨¨ÈŒ̀Jü—[®P*µ[Û "•øª¼F×/«ơ¯®̣QûÊđó1·àN³ô‚kQ­¡"n¹h—¥›RÿªxC•B¥P‰¯_æéÑ$ŸÂ"¢÷“„lTÅ?Jf**R”hH½ÊÎGí,–ÎæuSâ–Ùˆ”|>Pô=mNæ*R”óó£}¥PJEffTTTâ¿ÜrnMUM©T*ÿUŨïTB>Ă‹"ΩzZ( ¹æ¸=‰²)}‚Ä_ŸR‘Bœ·‚xưr~~„¯¸MỒL}§̣)ƯˆṾQoDB>eÔë¦TN#åSA#•åĂm,‡|TE¤Đ 3R¹(̉ˆ’éAáX………½½½ú•Ǻ́l"âÇYWÀ} uRRëă€RRRÜŒúåņ(å^:Ř~Éyé₫WË=Ưÿaù†è‡QÁo0̣ôH”Ä: p«º ...Ùâ÷ơ¥¤¤p_±Î€ eđóóS*•§Nâ—¨Tª¨¨(GGG///Öٰ± fff6làk$¢ĐĐĐôôôÑ£G[ZZ²Î€ czüGk\]]çÎ2|øđ^½zƯ¿?&&¦M›6S¦La3(Ë6ỉ¤ºuë8p ""¢AƒAAAsæ̀áfä0M(Ë5lذaƱÎ@.đŒ#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(Á$øûû³NJC§ÈúE†Đ) (@ G…#H‚Â$Q¨T*Ö9OOOÖ)€n%%%±N nU€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pÔ}ûözyyùøø,\¸033“uF¦%//oëÖ­C‡íرc¯^½>üđĂ3gΨ¯†nb%--­sçÎsçÎUÿ ¢W®\™1c†¯¯¯··wPPĐùóçƠ×A¿èS~~₫?ü0jÔ(//¯~ưúÍ=;99Y}5tܽ{×ÓÓọ́åËe~+¥ Œ»›̀—,YÂ:c°víÚ•+Wæääx{{çåå;w.66vذa–––¬S3 ………ăÇÿå—_”Je×®]í́́bcc÷ïßoffÖµkW~5t+*•ê“O>IIIñôô8p ø+t₫?~|̣äÉwï̃m̃¼y³fÍbccĂÂÂÚ´iăææÆ¯ƒ~Ñ'¥R9~üø°°0KKKoooKKËèèè={ötíÚµaÆüjèưX¿~ư•+Wëׯ_ê+)]`üƯ¤‚j»yófË–-{ơêơèÑ#nÉW_}åááñå—_²NÍTüüóÏï¼óNnn.·äÖ­[]»vmƠªƠơë×¹%è&†~úé'Ï>ûL¼¢Ï=ë̉¥K‡.\¸À-¹|ùrÛ¶m{ôè¡T*¹%è=ă~ƒÍ=»  €[rö́ÙV­Z 8_¢kYYYqqqÿú׿¸_V—.]*µ‚”.0…n­j-Ø»woQQÑœ9sêƠ«Ç-Y°`½½ư¡C‡Xgg>LDŸ₫¹µµ5·ÄƯƯư£>R*•ü kt+ÉÉÉk×®mÙ²¥úWèư ËÎÎ₫è£:wî̀-iß¾ưàÁƒÓÓÓ¯\¹Â-A¿èYBBM˜0Á‚[̉½{÷V­ZƯ»wïéÓ§Üt® 6́½÷̃Û½{wy+HéSè&ZgffÖ·o_~‰¹¹yï̃½322¸_ k)))666mÚ´/tww'¢ÔÔTî#º‰‰ÂÂÂyóæ9::.X°@ư[t₫EGG+#Fˆ®\¹2))©C‡ÜGô‹5hĐ€ˆø‘ˆT*Ơ³gÏ̀̀̀øR¢kË—/ß´iÓ¦M›zôèQæ RºÀº …cu©TªÛ·o;99999‰—{xx¨jú÷¿ÿ­₫ÏÄk×®QăÆ ƯÄÎ÷ßăÆo¾ùÆÎήÔWè&®^½êèèX¿~ư .üđĂß~ûíÿ₫÷¿¼¼<~ô‹₫ :ÔÊÊjụ̀åçÎËËËKKK[¼xñǹ?8è=èÙ³§ŸŸŸŸŸŸø¹R”.0‘n²`€ÁËÍÍU*•¥–ÛÛÛSÉA‚î´nƯºÔ’˜˜˜ĐĐĐ5krWVĐML\ºté‡~ êÑ£WÇ‹¡Sô/??ÿùóç-Z´X²dÉ®]»øå7^·n]Û¶m ư‚§§ç;&Nœ8qâD~aPPĐÂ… ¹œ”.0‘nÂÇêâ₫¥nccSj¹­­-eee±NĐä(•ÊíÛ·O<977wÅÎÎ΄nb!//õ¼y7₫Ç?₫Q̃ „NѯçÏŸÑíÛ·#""BBBΟ?5sæ̀?ÿüsö́Ù\ _ô/;;{Å/^¼hӦ͸qă `mm}àÀăÇs+ S˜“̉&̉M¸âX] …"77·Ộœœzưï Đ›óçÏ/]ºôÎ; 4øúë¯ùGUĐMụ́đáĂ]»vñ#–JA§èŸ••¬X±¢_¿~\}zAAÁ₫ưû "RºÀDº …£¸¸¸dddp?¼””î+ÖÙ™„¢¢¢üăÛ·o÷óó;räÈŒ3Ô¯r¡›ô‰{éŦM›<_5jư₫ûïC‡åVC§è_½zơ,-- …x!÷祰°ûˆ~ѧŒŒ "jÖ¬Y©åÍ›7'¢'OpÑ)̀IéSè&Zàçç§T*O:Å/Q©TQQQ^^^¬³3 ;v́8räȻᄏqăÆ̣₫U‡n̉§¦M›”Ô³gO"ruu èƯ»7·:Eÿ|}}³³³oƯº%^ÈMÂϵ‰~ѧfÍ™››'''«T*ṇ̃¤¤$"jÑ¢÷œ”.0‰nb=¹1øóÏ?[¶léïïÿüùsnÉ–-[<<ÿüó2ß#¥ L¡›ª’ÿÄÍüôÓO!!! 6́Ơ«×ưû÷cbbZ·nưÓO?©Ë­{üøq¯^½¬­­ßxă ơoGÄÅè&†®]»6jÔ¨áÇûí·âåèưû÷¿ÿ½fÍ{{û.]ºäææÆÅÅ)o¿ưvđàÁü:è}JOO3f̀_ưƠ¬Y³Ö­[gddÄÇÇ-Z´è½÷̃ăWC§èÇ¢E‹öíÛ·wï^ơG´¥tÑw“ù’%KXç` ¼¼¼5köèÑ£Ó§O[XX <8$$D}ÆcĐ…¤¤¤°°°ÂÂÂÇeiÙ²%?JƯÄĐ“'Oö́Ùăéé9pà@ñrt₫ué̉ÅƠƠơîƯ»W¯^}ơêU·nƯÖ¬Yóæ›o×A¿èS­ZµÆKDÿư÷¥K— ºté²råJnĐ¢Ç¿~ưz```ưúơK}%¥ Œ¾›pÅ$Áà…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aạ́•œœ́ùÚ¹sçJ}ûàÁ₫Û?₫øC}^ëÖ­ß|óÍÀÀÀï¾ûîéÓ§UÚKơódë»ï¾ăûä“OXç…#?¥Rù́Ù³ÄÄÄM›6 4è̉¥K¬30H(Àh9;;7lذaÆNNNüẤ́́Ù³gççç³ÎÀđ p£µjƠªăÇ?~üܹs'O=z4·üï¿ÿ̃µkë́  G0 4øúë¯ À}ܲeK^^«d̉ÓÓ—/_>nÜ8//¯₫ưûÏœ9óÚµkü· .äJ|ÿư÷Å[ù›Đ.`BÆÏOŸ>g’CLL̀[o½µ}ûö‹/æææ¦¦¦9rdôèÑ+V¬àVµô¦ªz~*€+`Zø;ÔÎÎÎz̃uNNNnnnÅëdffw·[­R©ÎŸ?Ï-ïׯ_•Đ"\q]%è’2IDATÏ©iß¾½÷nkkkccĂ ”₫é§Ÿ7n¬¾?W¹¿¿?÷˜ă©S§zôè‘‘‘ADܕȪ6 -(À„lÛ¶ ¬­­;uêT¥mGŒÑ¿ñ ‹*ÿ mÚ´éơë׉H©T6ỉ„_••¥R©ˆÈÊÊ[̉£Gînulĺñăǹ…₫₫₫4 -¸U &!==}ñâÅ‘‘‘ÜÇ#FØØØT©+++ç’øq6̉ơèу ö́ÙĂ•wDÙµk×7ß|Ó××—Ÿ¸‘¿[ŸŸÿÓO?‘¹¹9?5O•Đ\q£ÅOư˜››+|ÇÉÉiö́ÙoRʪU«$̃Ú®¸…iÓ¦íƯ»7;;ûرcăÇïÚµkrrrTT·Î|`ooÏoÂß­ÎÊÊ"¢®]»:::̣ßV©)­@áF«̀©ííí7õ,®À*Ư„ˆ^¾|Ỵ-ØÙÙ…„„̀Ÿ?Ÿ»˯đÎ;ï̀œ9S¼ ·ûȧæT©)­@áÆÏÜÜÜÖÖ¶iÓ¦={ö?~|yU£~ôë×ï·ß~Û´iÓơë×ï̃½ë́́ܲeË &x{{—ZS<¸™™?ÎZƒ¦´BÁ?P IP8€$(@ G…#H‚Â$Aá’ pIP8€$ÿ_TéŸơ„•IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/addmf_102.png000066400000000000000000001217441466512601400220760ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯy\Tơ₫?đ÷°Ȧˆ"¸ $ ¸±ä®©©×-Í})³²,37,«¯·nZy¿™»¹pơW7—®[Vvưjh™¢–¨¸" !†ˆ "ûü₫82óaØÎ̀œs>ç ¯ç·Çư~83ó9ïÏ™̃ó9ŸE§×ë  &v¼m@⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆâÀ;Â;Wbb"ï8@â(‹Úùa’OHH.©„p=%‡K*9\RiázJ®ÖváV5ˆ‚ÄDA⢠qQ8€(HA~₫ùg̃!Ø\OÉá’J—TZ¸ $ G‰#ˆ‚ÄDA⢠qQ8€(H@̃X($$„w`#y‡  H@Ăđ÷¬‡o âáV5ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDAâ  ètºcÇñÀBH@$ G‰#ØçÖ9ỵäàÁƒ7ńçç7xđà“'O ÇGíè蘛›+ü¸}ûvN×¾}{Ă ß}÷]Nwæ̀̃WlGµØ½{w÷îƯÏŸ??a„ñăÇ_¸p¡{÷î»wï&¢Aƒ9rDx¦P¸páBff¦päĐ¡C7 ăƯ°eHT¡°°0**ªiÓ¦gΜY¾|ù²eËâăă›4i2gΜÂÂÂÑÁƒ…'ÇÆÆ¶k×N¯×ÇÆÆQvvö™3g¬³ºË ¼Z·n¼#°D|||JJÊ+¼½½…#̃̃̃³gÏ:wî\ÇÛ·o/$YYY.\øê«¯f̀˜qøđá#F9r¤´´tđàÁ¼6‰#Øm.”˜””DD:t` £“’’:v́8hĐ Å‹gee=zT¯×÷íÛ·G‡&¢C‡988ôë×w#ÀÆáV5€*èơz"2¹×looODEEED4pàÀ̉̉̉Ç9r¤yóæÍ›7ïÓ§OBBƒ:Ô£GOOՇıÉÉÉ!!!çÎăظ   ":₫<{0!!ˆBBBˆ¨{÷îŒ}æ™gˆ¨wï̃¥¥¥ÿưï…¼[¶‰c 6õ̀;¨"""7o¾|ụ̀¬¬,áÈưû÷—-[æïïND}ûöƯ»wo||¼8>ưôÓîîîÿüç?1À”1•ËÉɹzơêÿûßmÛ¶ñlʺuëö́Ùñ³³[¸p¡““Ọ́åËÇ1v́X½^¿}ûöôôô;w:99 Ï4hĐ?ü@DBâhooß³gϽ{÷6kÖ¬M›6¼[¶‰cå†zûöm̃Q€ úöÛoM888,\¸ˆFûÉ'Ÿlܸ‘ˆÂĂĂwîÜÙ©S'Ă3 DD 6n^QŸ>}öîƯ‹îFP†N &=ZPP@D[¶lùư÷ßẃØa2Í­~^±‚œœ¨ €œœ(?Ÿœ©°êÔyr„=^TD¤×?Ùl@(””½}¹' ÿ[±áˆđ¿Â« „«:oÅÊEÆĂ¾¼bǻq‘ñTơ¿Â‰‹ÉÁáö­[}}ÅÆSƠUª11±“ƒƒéơJ~}ªzyP=ơ”5ï”””€€+ÿ$&̉•+¦-6¹<¥¥dgWååqw§îƯ­ŒB‡èP>åP9 ÿ[H…u¨[.¡{2¾_ÂẬ)ßư¦{ߦ}y·ƒ(‘(…(ŸÈ™¨¨Q‘Sù²đ¨P.&r ̉ “1J‰́ˆ%ªĂ»!D¿̃¼YĐ´©Q‘cù¨Ù6Í ILLä,h^HHÈ¢ÄDç²Ï[iÙH>áG ‘}…߬S~₫™wà Ç±r=zô ¿ưö›¹¯ưùÏ?iøp̃-°)y .Ó­[¼ƒ V­$¨D%ß[ûPk«hJzRAc¤xSè‘ nxökÚT̀Ó‚yÇ 6c„¹/¨•Y#!qĐÛ·I§KIN¶¸‚›7oZs₫£G]&M’&™×éÈÛ»ääÉ̉^!ñ¥ªJGºC75/jΫ-Öö"?Ñ–ˆ(%9…WC̃óö₫ÎƯ×Ù zH4ÉÊ{ÍÖ¼|åJ)’‘aoư}s•¸ÓôN/êÅçÜW%®ă›ËëÄ Gé=×¢ÅE‹j½W͘BvP˜˜á‰•™ªª~˜’ñăƯ,çî;||̀‹§âXCéâ1½>ÂÁêßh â©ø’ÿû?Ú°áÉóSSÉߟË'üÿ₫ÏX₫ñLJÈVzyÆă{•\ÉơkúZ°èLÎÇ;V:ÆQxh8 ÆQÜX˧̀›B‹‰‚ÊȪø¿Â˜A“1'ºÈ'|Ö]¦ücù1G:¾Ç;Z°Û˜±Á•qd‡ ½ÿÜsT~j|-ÄQzIuêĐXN!°é3y^ ¨GmºwËiÙ •¬é5d—[9KS$’¨#ơ•H&D¢z8½)́÷!ôJ€)$`¶£“í54×èѕש¤ktÍúJˆèU ƳâM)‡ÓZö³Đ€OP$5ǿ³ÏÅï7 /gg¾çgçäH5NQwƯ­!Y²f©ûLYªnº<>MÑöœ/€Z‰#€¦đTÂ&yR%±Ÿ N‘L²v‰Ëld6óæÄZé ïä¶`ÁNẃØ1^§f5jÔ¨_¿~?üđƒ„g‰‹‹ÓétÛ·o·àµ#ʆN÷́Ù3<<\ù«5Â:A<₫äȱ̃íƒDDäFnÖ¼œíqŒ£¸P UºË™²•'o@”©tø ¤ñăÇ7mÚ”ˆJKKoƯºµwï̃‘#GFGG¿ù曼C+Ç̃̃̃Ư"T‰#€¦°=W¯Rp°Âç/)á}d0FYọ́ÖÔÚP§ø—è%¥Àæ½>ÖUI´_éđAIÓ§Oï̃½»áÇÔÔÔ:,X°@m‰ă¡C‡x‡•Ă­jMa'¤|ù%ïh¬âÎu™¾Ûdœ.á ÅÓ¿94FÂA¢ª™ÉüTQïjÿÎ;ߺuëÑ£G¼c©Yiii‰M~yƠô8hJ»vÆ2׉2:«— éĐå?»O¤téRñHw’¥«ª5Sç9b²mA9:Zụ̈ ¸END[·Zợ“'OΟ??>>̃ÎÎ.,,l₫üù:u"¢Ñ£Gï̃½;++ËÍ͈¶oß>~üøvíÚ%$$/|÷Ưw—.]oÖèÀ̀̀̀ĐĐPWW×êÏNDÇñÅ_{í5":wîÅÆÆ~úé§qqq72dÈÈ‘#ÙÊ/\¸đüăôéÓùùùsçÎíÛ·o5µôéÓçÁƒgΜ1<³U«Vÿó?ÿ“••åçç÷üóÏ/Z´È½́Ûg5gÉ!qĐ,®³‘­Ÿ¥Ó¹3ÏÄ‘]ư[ÂÄ1×ld©ô`Ê'L¹­u{™oÛ¦hä&¬Iwï̃=zôèÆO˜0A§Ó}÷ƯwƯ»wÿî»ï₫ùAƒíÚµëÈ‘#ƒ "¢#GÑ… 2334h@D‡jܸqXX˜˜éơú;wîDGGÇÇÇGGG×xvá iii đôốß¿?}ÿư÷cÇmĐ Á„ ́́́¶lỤ̀ÓO?NqàÀaÆùúú7ÎÎÎî‡~0`À–-[Æ_imƠøå—_Ö®];eÊ”V­ZíÛ·oƯºuEEE6ls˜¤̀;[“œœ̀;5!ẓŸ‡‡eXs= 'ă kÛñí·ÆÚΟ—írUáyưóe'—à× ›Âă—*1ÿIXÛT¥ÛĂœ|kzº˜—Tơû–ˆçƠ˜?>=z´̉G Z´hqï̃=áȽ{÷üưư ñ¼IDï¾û®đP»víÚµkGDßÿ½^¯đàƯäÉ“«?uE3gÎsv½^ߢE "Z°`AII‰^¯ÏÏÏ÷÷÷÷ơơ½yó¦đüôôt???"Ú¶m[AAAPPPxxx^^đh~~~×®]‹‹‹+Ö&>|¸PîƯ»wXX˜á8}÷ƯwÂ¥¥¥íÚµkÚ´©sơgÉ‚?ܵöo=Æ8hVNÂ'LM5–­ïqdkP~E©¶Ô/­¯t*Ơ^̉ÚïÑfOØÎºGOII™={¶···pÄÛÛ{ö́ÙÉÉÉçÎk̉¤Iûöí_yÅä> °0Æ@k^{×™µ̃/X)I¦TÒ™h(?"e×Ăco(K2;ÜOÑđѼyóåË—gee Gîß¿¿lÙ2á°££cß¾}÷îƯ/$O?ư´»»û?ÿùO1+µvíZ¡Ï^1ÚÀÀÀeË–Ưºơ¤ßû̃½{+W®Êaaa!!!K—.}P¶7TNNΠAƒ¢¢¢êZ?̉¥Œ2gz´†Qt₫ûL,XăÙMŒ1âàÁƒŸ|̣ÉæÍ›³²²<==·lÙ2f̀áÑ?~ü£>Ú²eKAAA‡6lØPă’æRæ,` Óktî™…„„$&&̣¦¤¤¤đBM  g̀ U«̀}µÅ×ÓpZggzüX‚v H11OÊJ₫*Ks—Đ¡GqÖo9˜’’(”íɾ˜­«ḮMI®á‰†••'êjM]6e2чâ>¥ø}«ééé 4¨´oRư,ø ƠÚÏÆ8h§Q‡M›JSơ‹AZÆ‘Œ{ÙI¸Qµ DùÙÈ̉bßﺳ·Ç=y_°€ŸŸŸF³F0 G-ă”8$M=́]÷ßW.~¥‡!*Cª_ḉä˜?” Ÿư(Uî´`$ZVP Ø©®^5–¥ê)ôñ1–/^T¬)² C´'̃#ñåX‹ç¼ráÛĐ²B¶ ‰#ˆÂvnFHô‡½GÊë—[I?%g0Y²”ä¸ïŸ \øl'0 9 G jÔHùs²û¾Ê1“[ëûʲ³³ I©}–ÿ,¦Ùâ"¡6‰#€IƠăg¹{¹ ×t!©ªbGåV䱡û»X;@8h;ÆP©el’·₫̉ReÚQ+¹JUŸÄqY¹$ƒÅ¯  H4ˆM•ꩳÉ%__$±ûùÖÈ—| eåGwyªåz×›÷$#¨G boU¯XÁ;«ø)¾3̣ºb(K¾ˆ£`mS¨12%΅U¹¥PS 4>VÀÆ!qĐ cÙU²›­"yJº:sX˜Âá—[ÄQ̣ưù”¯PcdÚ°±-S¾jq-Bâ fH4NñI%̉Î̀awÁUfUJö>rj£Ä)5§SVäó•̀”5>ÉÀÆ!qĐ8Å—±‘vŸ@¶6eb›ÛÆH6;œˆˆ0eEGö-A#€!qĐ8E&­œgv‘/qT¦óT¾™+OÑSJ4 ṚuÓ)’f³oI¸'äfÁ‚º̣5jÔ¯_¿~øA³ÄÅÅétºíÛ·[đÚ€€€#Få={†‡Ûöfsàh@LŒ±́å%eÍ¾Æ¹È %é¡L5GPÄuº®D*Ê•­æ+ÖWQ³ë«Đ”ñăÇ7mÚ”ˆJKKoƯºµwï̃‘#GFGG¿ù曼C+Ç̃̃̃̃ÓÜ¡$ÚÔ¬¥¥)v¶7Œå¿ưM®³ØÀæ1;i§PΡ̣÷|‰LyïÆ[ç†ơUhÊôéÓ»wïnø155µC‡ ,P[âxHîå[Aƒp«@›”<›2} îŒLDơ¨´êHg(E_É̃Ú6&“w|ùûûwîÜùÖ­[=âKÍJKKKJJxGÜ Ç@›¦M£üăI9?Ÿœe=—ưå&ùZ<¯ÓëïÓûB¹„äÿËÊvжµ¸–*´Rè&µL>¥O9ư#úÈÜ—dff†††º–­®ụäÉùóçÇÇÇÛÙÙ………ÍŸ?¿SÙÇñÅ_{í5":wîÅÆÆ~úé§qqq72dÈÈ‘#ÙÊ/\¸đüăôéÓùùùsçÎíÛ·o5µôéÓçÁƒgΜ1<³U«Vÿó?ÿ“••åçç÷üóÏ/Z´ÈƯƯ½Æ³€-Aâ M&“J˜Û^rPf¡…I¾ú·‡*1w[Öl>’OâXW¢z₫Aÿ°¾‹‰Oơzư;w¢££ăăă£££…ƒ»wï=ztăÆ'L˜ Óé¾ûî»îƯ»÷ƯwÏ?ÿ¼đ„´´´xzzöïߟˆ¾ÿ₫û±cÇ6hĐ`„ vvv[¶lùé§Ÿ §8pàÀ°aĂ|}}Çggg÷Ă? 0`Ë–-ăǯ´¶jụ̈Ë/k×®2eJ«V­öíÛ·nƯº¢¢¢ 6ˆ9 Ø=H-88˜w¶&99™wêsë–èÉ+WơR ®§áTrüÎ ”±rçôç MÙ¦ß&Uµ†Kj¨³JÿWMÀóçϯôoñ̀™3…'´hÑẫ½'×ữ½{₫₫₫z½¾E‹D´`Á‚’’½^ŸŸŸïïïïëë{óæMáùééé~~~D´mÛ¶‚‚‚   đđđ¼¼<áÑüüü®]»W¬M82|øp¡Ü»wï°°0Ăq"úî»ï„KKKÛµk×´iS!æêÏ¢~ü᮵ë1Æ@›76–œT̉¨‘ôuJ»¾OơV̉Jăyå\1đª;®äÈY9{mœ´¤ñ±b?₫Ư23gÎ́̃½ûªU«^xá…âââøøø”””Ù³g{{{ Oööö={vrr²á>²¯¯ï‡~hggGDñññ©©©sæ̀ỉ¤‰áÑ™3g å3gÎ$%%Í;×ÅåÉRŸNNN3f̀HNN/û½ÁÖV½ÀÀÀQ£F eN››+̣,`3p«@ûÈæ«R‰ˆ Oæ"SNyÈ9Ù…Y)»%µ”ñLZÇ&qD²M¥§̣·Ä¥ZëIOJ¬oj1“YƠDỗ{ï-^¼¸ÿ₫DÔ¡CöÑöíÛQRRRlj($$Äç]½z•ˆ"Ëư2,¾xåÊ"zá…^xá“nܸQ±¶ê³?^%æ,`38hß… ²VÏ.1>t¨ôơ³̣£Aƒdl‹mnSO†:Ư˜̣̣†Ï~ï-ï©Ôë­·̃Z¼xqlllŸ>}ˆH§Ó± ‹)•­¥P¯^=ĂCB¢ị|CJW§N"Z¼xq»víLÎZ±¶ê9W1 ÒYÀf q€°rÜV 4–/]’7q”oÛ9â3‰ä¾×/ï“roI­Í2„ÔĐÉÉ)((ˆˆÎŸ?ß«W/Ă£ DRñ…-[¶$¢¸¸¸̃½{={V(µ¹»»0Àđè¥K—Ο?/>_¬‘2g•ÀG¨›8FÈ0í)f£>¹ïºR¡¬ơ¡1̣6 Rr')̣Vo‹Àf[»v-=ưôÓÍ›7_¾|yVV–đĐưû÷—-[æïï_éîË–-»uë–pä̃½{+W>˲té̉Grrr U·®TSØ: ¨z4«eKºvMó°£Ûưư•;—ERäÚ"”ïѽ†ÔP®3±Ëí)8»H¶¸Hh Ö­[·gÏ¡\PPÛ¶mÛI“&Ơ©Sgụ̀åăÆ‹ˆˆ;v¬^¯ß¾}{zzúÎ;œœ*Våèè¸dÉ’±cdž‡‡7ÎÑÑqûöí÷îƯuppX±bÅóÏ?ß¡C‡±cÇưøăiiiÛ¶m“p/AeÎ*Ä@³""”I•\ư;1Ñú:Dñ!9ªegjÇQÜ@(WØ7Eă‰£|ûl«Ö·ß~k(ÛÙÙ¼ưöÛŸ}ö™0XpäÈ‘±±±Ÿ|̣ÉÆ‰(<<|çΆÀ+1bÄÁƒ?ùä“Í›7geeyzznÙ²è˜'ß<~üøG}´eË–‚‚‚:lذ¡Æ%Í¥̀Y@ tz½ª§iQHHH¢bưj‡”””€€̃Q¨Ï_ĐûOö)¡ÈÓSäë̀½́°{™~a(p''*Û°)5M#É6û6\̉GôÈ­l^ÉBZ8æÉƠ’v̀ĐC™®XÓ¯)ï›bd8ÈO)~ßHOOoĐ A¥}“P >Hµö³‡1Å7´É=¥Ænø ½"Ç)\ÉƠP–w"«ơUÔDñ̀úJŸĐùùù!kY!qĐ,v†ọ́å¼£±J«VJœ…]‹GÖƠ¿?ÑOÖWRMcdÇN„R䋉Æo¹Ô H4«>ÓAăæfy=¢5k&WÍaa „_® Pı˜e¬½Hîđ‰Ø%ù̉å?]­Ù6@Ó8ØEnU˱ sgc¹l>¨ôØÄ±É–ÛŒ®LY¶Ï— ͨ8Ø„¤$™*ÎÏ7–åÛT­Y¾Ø6·ñ•­fG¦,Û›bC³Ăj$P¹·©X³ÖÇ0 Sà,FÊÜß•íʱïöS×JAâƠ‰‰1–›6•ë,́îZŸ ®ÀèÉr*̉*ÙÆ8₫¢Hø $Z*ûÖ¾7nËíÛ+Ñ&[JỏMYÎÁöÿ½Ă»ÁÖ‘y;CG-cG ÊCù4MUẻœËW¹WÑ[Kke9›8j|*²³Ă@BH´læLcùî]9Îpá‚ơu¨¬w“'Ñ$CÙ±Üé°Ù¼lăˆˆ:Y_Ø$Z†ÍcDË£Üä:ùƯwß ?–––¶k×®iÓ¦B̀ƠŸÅÂ’¤/± èqиÈH:sF¦ºy- y猕QÜñ³ëDÆQÜSô””µ³Ưt ô8Ö%fLíèÍớú7̀hfíØ±ăFe#•Ïœ9sé̉¥U«Vyyy GZ·n=zôèÿüç?†ç+†loovàÀñ1ÆÅÅ­Zµễ½{›6mOIIY±b…···đooïÙ³gGEE;w®cÇDäëëûá‡ÚÙÙQ|||jjêâÅ‹›4i"<ß××wæ̀™|đRR̉₫óáQ''§3f¼đ ñññk«^``à¨Q£„²N§ º6Åœ$Ä@ă"#éÿư¿'å´4jÖLº“’x·N›Â(̀P§ø±4VÊÚW1e¦"G‘ÿ,µŒÉŒfÁÙ³g+M¯^½JDíËoß¶m[öÇàà`öGĂú5ׯ_oɬ¤ơÍ7ß¼ụ̈ËUÅđ̃{ï-^¼¸ÿ₫Dd2ÜP ))IHÂBBB yadùqІ‰W®\!¢^xá…^0iÚ7*ÖV=“–^%æ, $g²yŒ¤‰£ÂêÔ¡̣ăé%“EY†̣¢d£¤_ÜYÉđJư•m“¶Vö¯ÂdiCgçÊ?>>>[¶l1üصk×jNôÖ[o-^¼866¶OŸ>D¤Óé*±¨èÉîâơêƠ3<$$&Ï7¤tÂ]ơÅ‹·k×Î䌡¡¡k«^U-sGc¿å/[FÇóÈrt\†5_ˆÓ¶1‚_Iêy2L9¯;)j/Ñ`YN"ư[’!Óåà U«VDtñâÅ^½z^¼(j•77·_|Q䉄ÔĐÉÉ)((ˆˆÎŸ?Ï1!!ˆBBB*¾PèÔŒ‹‹ëƯ»·áàÙ³g…‚P›»»û€ ^ºtéüùóâóÅ)s ,Ç ylǃ»»L'Qæ{……8$Ăvû)œ8êkï¦ŕ ̉,‹k©;;\ú)û ¸₫'©°°0ÿ•+WæääG®]»¶cÇɯÙÚµk‰èé§Ÿˆˆh̃¼ụ̀å˳²¼å÷ïß_¶l™¿¿¥»ÿEDD.[¶́Ö­[‘{÷î­\¹̉HHÈ̉¥K\6 -6–zöT´)sç̉_HW-/‘÷+^̉^Ô+–be9£¡)ˆ₫cMEæŸÑÈ́íHªô‘aÖFÅ $̣SZ~ß%$$øúú +# ¦M›¶qăǼ́lƠu¥§§7hĐ ̉¾IƠ²àƒT>{•ÂGí+¿‡„TbbŒåÖ­•n“Ö7‘k$%Ó ,w‡f%$=ă!ÅĂ×({{û~ưú±s\²³³øá‡!C†¨0k$"???me`$Ú'Ïn€́reË+‡×ÚăRaÇKtI²zÏ1å(̃´ÎM̃h…ƯŒ3:4zôè­[·._¾¼gϹ¹¹sæ̀áÔFjü²æyôÈú:*⛺•ÍŒ”X[jk}%bÔ£z†̣*ZMÑ̉ÔËeF‰®æ­P@VóçÏoذᆠ^ưuGGÇđđđ¯¿₫úé§ŸæÔFèqĐ¾(¦ëéÚ5©j­l ÍSl-!4ÄPv!˧¾b³yeBÔW©A„NÇ„„„G=xđà·ß~CÖ¼ qĐ>“ÙÈZ&ÇJ”·é¶¡!Ă5’ró.o¯̀ÉvˆơU€RjKâ¸sçÎ1cÆ„‡‡wï̃}̃¼y†EM«RXX¸aÆ‘#G†‡‡?û́³³fÍJ®½ Ź&¶OåX÷‡ă¶1)ÇdåĂ/¿<÷Yé«ÇZ<R+ÇåË—øá‡×¯_ïØ±£››Û®]»̃xăÇWơü’’’—_~yÉ’%YYY={öl̉¤ILL̀óÏ?êÔ)̃M¨‰ ‰£øàOOÏ}ûö•––Vú’øøx"zùå— KduíÚµuëÖ₫ùçưû÷y7 ZÙÙ’TĂÎŒ>\¹đÙÄ16V:•ß6FĐ@̣M‹Yí¸´‰è„4Ơ°ùçsœ°ưÄñÔ©Svvv½{÷6±··æ™g233ă«XbØ××—ˆØQ¯×?xđÀÎÎN«­HưÇ¡̀~ƒ‚f¢Ä•+̉Ô™FiÊ5@1¼îï&HS ûËW† Q Oơzưµk×¼¼¼¼¼¼ØăÁÁÁD”–VùŸ“ç{ÎÙÙyáÂ…üñÇăÇÓÓÓ?ú裛7o3ÆĂC±0̀áé)m}́o%G–Ö7™BS$®ñSæ•8IS¶çpÔb6̃–——WRRR¯^=“ăT¾O‘²yóæW^yå•W^1œ8qâ¼yóD7$Ät}‰Ÿ₫™÷Åа›7±ÇD |CCÿøC(§¤¤Tÿd1×óèÑÆT¶ú`jjJÏ—Ô“OŸÖ§¤ü)]}¢.e*½¤Í\›Ñ“2´ç¯=m ÛXy–ºëúP¾å{+?%_¶T*€¹ˆ’\Ă”€*Ä¿zPXợ́P-l—Uóg*ѽ;•%b®UϹtÉŒ'Ë$?_'í©#)R¾¶T¬y ÿ̉Ünrû9ëÇ̣ưe,ú>çKJî́ḱï”üVU!₫Ơƒ’ªÿ¼Uü³^±‡¨–°ñı^½z:./Ït-ŒÜÜ\*ëw¬è½÷̃‹‹‹ûàƒ^}ơUáHzzúøñă£¢¢~úé§ÀÀ@̃ͨ€½|₫<µ³vêÄƯ»¼[$ƒb*Ṿtdü]!ÍuLYɬ‘ˆ"‰ö({FP%ăèàààééY±g1''‡ˆ ó¬Ywï̃ưí·ßZ¶liȉÈÏÏoÚ´iEEE?üđï6T†]ÿPăk€{{KYÛ 2΋̃âƠ(iÖçøMŸR)Ñ0GA~m ØxâHD>>>™™™B¦h eđññ©øǜ̀L"jÑ¢…Éq¡£ñ̃½{¼P™à`cyÅ +vV|Ưð0)kc36.« N̉I já8ê½r¥¬˜Ă\-X°@§Ó;v¬âCưû÷×ét%%%Â={ö Sg@@À˜1cx· j ÛOûöí[RRräÈĂ½^øđáúơëWúo²E‹öööIIIz½=.ŒohÙ²%ïԤ ^k(¹mŒ@ÚIÜlâÈe£jÆ” ¬­,)cÛ˜ªØÛÛÛÛÛóÀ”í'cÆŒ±³³[½zµ0®‘ˆÖ¯_Ÿ‘‘1jÔ(GGGáÈ£GRRR„I|...Ï<óLjjêªU« +„'%%­]»¶N:}úôáƯ €HºŒ̣kñt́(eSØÁ…v6óOùv4cÊVßug+@âX•C‡>}w¦l|r ùùùÍ;wÑ¢EÆ ëÙ³gjjêñăÇÛ´i3eq‰µĂ‡GEEíÙ³‡ˆ>û́³Ñ£G¯]»vï̃½¡¡¡™™™qqq¥¥¥~øáSO=ey(ÊÈ·v•–«̀FÂÊ'́ăâ¬ị́”fp¡¥üÈ/½\ÿDøöœZͳo :´ÅV¾WḳäÉK–, Ø»wïưû÷'Nœ¸iÓ¦‹;x{{ïƯ»÷Í7ßtuu=tèĐÍ›7{ơêµcÇ_|‘wS”ÀήQ₫V5;ÀØúy>w‰çüp¹nóí¦;gmlæY‡kSÔ¬OŸ>́xª'N 8ĐËË«}ûöÿøÇ?¢££u:Ư¹sÆ7ăØ±cƒ ̣öön̉¤É[o½ơđáC̃-Ûdû=‚¡C‡:´ªGpơêƠƯ»w6ŒˆfÏƯ®]»˜˜®×l–êÇ#G¬]»ö̀™3†IÍÏ>û́̀™31£ :́©̉R²³| z‚,›Ÿ&.kñø‘Ÿ¡¼‚Vl£m–×Åv¾r¹Uí@Ê. nËÆß´iS“ƒ;v́¸qăFÅ'Ÿ9sæ̉¥K«V­²F"jƯºơèÑ£ÿóŸÿ,dDdoovàÀ̃­Û¤®Äq̃¼y»ví29XTTsàÀ?₫xüøñ¼cP«9sȰ8\|<=ư´Å5•_öÔFpY‹‡ÍV]ɺe’¸góɾ“¸ÊZ{/iúôéƯ»w79xö́ÙJÇ«W¯QûöíÙƒmÛ¶e fWr%Âm:Çơë×›dîîî¹¹¹B×ciié'Ÿ|Ø©S'̃‘¨;ٺđ»&M诿¬¯†’(ÉPæ¸ú·ÀÚùƯ܇{F0‰ăC"w ª”ï-‰Vâ(¤°°°âA“ÔĐYù•ú¡¶RKâXXX¸~ưz¡đÎ;ïôèÑĂÅÅ%??ÿ÷ß_¼xqrrrIIÉ–-[8TÎßßX–èfsÛ¹Ë.2RÄQ%ÛÆÎY9™û®Úơ‹'ê%A•̣u¿)ûåPN«V­ˆèâÅ‹½z/úÅ‹yǵ”Z–ă¹{÷®°v@Ưºu7mÚÔ¿"rvv~öÙg7mÚäææFDqê{ fưKQ~-ç-°bŸ’e´̀PnG\ç‡Û6q´âó[E•P•°°0ÿ•+WöνvíÚ;xǵ”ZǦM› +¶iÓ¦Q£F&6lذ]»vD$¤P‰–±iØOø&wƯ-æ.ÉưTµáµ̣a¦lEâÈ.ƠœSS´ÅÉÉiụ̀åׯ_ŒŒœ7o^TTT—.]"##‰HèaP’ZG"êÙ³'%''WÏQTTtưúu"Â}jQô5®R¥ó̀²/#Fđ ŸM¶¼¾ÛÆ(@â;Z_…ƠNZ₫Rö-ùïvhň#öïßïëë»fÍ'N,_¾\˜C]¿~}̃¡A­£–1DôÁœ;wîÆ3gÎüøă}}}…ăwï̃ưôÓOï̃½ëçç÷öÛoóÀÆñƯ6FPö¯Ÿˆ(1Ṇ̃z²)›O…Th}%å¨á₫î5Ë_Ê}’_üñÇ\éC& èüöÛoB¡¨¨(!!¡U«V±±ÆûüÓ¦M«[·®8¦¤¤˜Tµyóf̃ ›¥¢Äñă?öóó»qăÆo¿ứíí™™™””TTTDDM4ùôÓOM^µfÍ̃¨F³f”–fé­ạ́K|đ¡ơÍc̃¦·çÑ<¡œK¹ndÑx6{VCâh₫ÀZcoo߯_¿°°0C*™ưĂ? 2ÄÁAEÄ¡–PÑgî—_~1”KJJ._¾ḷ„S§Nñ@Ư""¬OƠ6-!A‚J<ȃWü&›Çô²l62›=sê–J&ï4ÇÎÎnÆŒŸ~úéèÑ£Guûöíÿûß¹¹¹Ø¸PÑG°;60?ß²:´̃ĂW)kñ° [>æ’}][ ë@+~§®ƯæÏŸ¿jƠª«W¯¾₫úë ,hĐ Áo¿ưÖ¥‹;XXJE=Ó¦Mă€Æ±căâ¨ÂÖbXpªô Eó&oC9̃â~_ñ ¿¼H¢+’UÆw;im:g̀˜Á;5%³fÍâ€Æ™,ccQ⨔œlU çÉ8?ümRż:Ë{¥Û³Û*Dß–•3ˆI‰-уwkÀ¸U `C76–W®´²² ª**,̀ÚØî=îÛÆ®XÜ_§’ƯĂÙ«¸ÁÚÊ4>V –âÜă8jÔ("jԨѺuë„rLö³€ÊY½20¯µx‘‘ôư÷OÊ99äa₫ä¶{/˜T0?ÜXư‘`gUạ̈`&Î‰ă… ˆ¨I“&†2HĂ¢ṔÂá‘\ÿ°wd–¹§̃½Í®A «KÓîáO°ñXtuÙ!qĐ"ܪ#5¬₫-`ÓVËVROâØJÂÙÈêɶ,çĂ¾%¡¼[àÜă¸`Á"ruu5”€#v-¾=^^Ʋe‰cđl#‚",ƯhB=‰c%/²ÅµjΉăøñă+-€…z®_·øƠ11Ʋ¿?ï¶”Ñú̉’‘ùúPΤ̀ÔÀ¼×³Ck|±¤¼+©h9@d¤5‰cj*ïø+cÍvƠDäC>|ă7Yüoô7ó^‰)k|!?9̣̃̃ͨET—8]¿~=55µ¤¤¤̉' <˜wŒ*–›k,§¥Q³ff½Zë}{•â¾O3›e´̀́Ä‘½SÄ·)D.DyÇÀH´̣[E­‘’’À; °*JơzưÆ—.]ZXXƯHªE{÷>)'%™›8²³ª5­„Œß<#x¯èK¾†²{¹™Éâ¨e’M úZ‚jêónXFE³ª¿ÿ₫ûÿưßÿ­>k€˜l£e­[[₫Z®₫-°d®·ª̃F6 ÿẸ̈jTô–€9TÔă¸iÓ&CÙ̃̃̃ÇÇG§Ă^¦fªÏtåX6™ˆÈÜJYDF̉å˾–ÍÏT•8¦X0Y-³Ă‰¨|ÆOÔÄÂj°m €F©(qLMM%"{{ûE‹ơíÛ·nƯº¼#Đ8+G¾‹8bزåIù̃=jØĐŒ×® †r3RAl3ØFÑP3^º“)«(—s¨èVu`` …„„ :Y#€’’̀zz>3åƠ¬,M&ÖÜuw%W̃áË€ï¶1‚:LÙ̀7å!S~w;À2*J;uêDD>´º&°ÛA9|8ïhÊ÷z:d̃kăƠ50Â(L‚Zºñn†‰“æ=û Ø%o½ơV```ZZ;Ø£mcnnƲ™§ª“Gy¾²”)«àM)çyOWW.á<Æñí·ßfôööNNN^¸pá¶mÛüưưí́*Ék׬YĂ7fµ ¥K—,xÛăØ¸1ïVT›ͦÙÓhP¾I7›RSÑ-gÊ*xj ¿‡@Ä=qüå—_*=~ưúơëV́~P«EFZŸ8ªÍŸZøÂæÔœẃD61#qd»éT̉ăhOTbÉëxÖSÑ­j{›ùî]ñ¯»pwä2PÉZùÄÉɉˆ¾ÿ₫{̃aØ&µm#pdî„»]µÚX2Ụ́q¹×«Q¦Ø'ª±̀§¢Äṇ̃åËDÔ¡C‡¯¿₫ÚÛÛ;66V85nܸgŸ}–ˆ’´¾ï€2ÂĂÍ}ÅÆrưú¼ă¯Œ×'ƒM¯“¸ 0e‹ÖÜV3¼I¨(q¼yó&µo߈222.]ºDD;w&¢&MQ^ —¦Póû SRxÇ\“[·̀~IñÚÈdóQ¯¹̀”§̣n«®ơU€&©(qtss#¢ôôt":|ø°pÛºW¯^öööD”MD^^^¼ĂĐ‚GŒå'ļÂ&{ó­V(©0 3”—ÓrQ¯aÓK̃ `‰L 6FE‰c³fÍˆèØ±cëÖ­Û°aƒp°oß¾DtăÆß~ûˆ||Tơ»@­fÏ6–ok{Ơ@sz@ e.â(p#7QÏSíƯùW,©?ïØÀ*J‡ FDùùù+V¬HII!¢:uê<ó̀3YYYVv́Ù³'ï0´€½U­ñ±æ̃uWùêß±ÛU_âhUØëzż—ª῭§¢Äq̀˜1ÂGöˆ««kII‰°F³³ó„ x‡  ööƲ™‰ch(ïàË3wm 6qTƠ­jÖ}ºÏ;ë°‰£ˆÏW^/ÍQÑàß~ûíºuë?^PPĐ£G™3gơöö^³fM£FØÀLf.c£µx*Æ“œL5팼†ÖÊơ¨ïđmûí"èÅ₫o¦¬²Ï˜GE‰#Ơ©SgÖ¬Y³fÍbzxxüøă!!!vv*êĐ cï̃5–Ơöí̀ä®{‰cªĂ;ä*¹‘[.åẒJ?̃¡WCÄvĂœV¼ăk¨(q\¹r¥P9r¤0QFP§NÖ­[óÀ–±w³Ÿw4å……Ë¿ưFcÆÔđüktwÈU ˆXµä•½x‡^Ó5?…Í-[đ¬¡¢Äq×®]wîÜ!¢̃½{³‰#ÈMÛÆTtM½9¡(æu7²Ă Uü¦Đ£Ÿ¢íùYÀPÑÍßQ£F …7nđ@ûºtÿ\¶Ç±®×vÖøqCs åK5N™f«̉I>b©vv8˜KE‰ăôéÓGŒADÑÑÑwÙ!W`szµ’Ư7g.r[jË;^SæmẴßUa£*÷¥¹©èVµ0‡ºqăÆ×®]ûÛß₫Öºuëúơëët:“§­Y³Æ’Új6q¼vZ¶¬æ¹6Ù˯ÂE[“q¸v<Å¿D/U÷l6±ôàzE‘D¿đ§¢Äñ—_Œ¿„?~oæ"P»₫a\\ơ‰£Ê¹¹Q®¸Áç鼡\@¼¯NÍ=?̣±z–$êñâ¨èV5H©CcYă_ĂÄßuO£4Cy:Mçxuj̃<¦HT=ܰoÊ9±/É;j°’z§M›Æ;ơÿ₫-Z$æ‰áá¼C­L‡tø°¨gjbÛÁ#1³‘ƠŒMW}]峪xh‘G“u¿@2z½È'ªs-å‹©M›*ŸÉvă¹ ïÀmÚSL¹Ú+Í̃’Wåç ̀ ̉[Ơ‰‰‰111Û¶mËÍÍ-..ÎÎÎæ€–eeUó`ñî®Çê'€×õ¼ôôt“ăyyykÖ¬Y°`ï4ÅƯ]̀³´²mLÅhµH́"A·˜²*³ùrªÇ£öN`0‡Ç‹/~óÍ7BÙ̃̃̃pܰ”ăÖ­[O:Å;Lí×øë¯Æ2ó/O¥´²VyUØÄñ ©̣ýÖ_Ăæ:ï@B*J£££ơz½ƯG}Çüqđôô\µj•³³3mܸ‘w˜Ú!®ÿ09™wœæxüX\ÓƠzẂæ1‰Lù̃AW¥1ï@q*J/_¾LDƒ8q¢‹K¹Iz èƠ«]¹r…w˜ÚQÀ¬€½{wUϺ}›wœ2PíZ<h(¯ U>M)x]•R̃€âT”8fffQ@@@¥QFFï0´c:³vNïh¬âí]ósnqçDƠö8²\ɵÊÇ41”óM¦\\óÓƠ?;j¤¢Ä1$$„ˆ*Ũ×ëOsæ̀£G Ó̉̉bcc§OŸ.$¡¡¡¼ĂĐ&‰£:×⛆¶‹é¦S36q¬âóu»§€F©hç˜7ß|sï̃½111111ÂÁÉ“'àáám ,$b5¯ÅĂÆ_y¹ÖÊvjúVl5·£)S®"qŒfÊ*₫|€X*úäíí½téR//¯JơđđX´h‘ŸŸï0´)/¯̉Ă×®ËUUƠP¥ÈHÚ¿¿Çµ¸ơsiMëN«|-6¼xïB]LŸWîÙªæO”Ê;Pºz·mÛ6lذ_~ùÅ5QQQQLL̀!CvíÚÅ;@­a§W–$feñPF«û₫njb(W̃ă¨¡n`Ñy­êwAQT”8:uêÓO?eoL»»»Ê%%%üq¼»G82YÆFË4©îÑtÀPÖĐúˆ•'̀®‡6ETƯyG ’PQâ¸eË–ââb"̣÷÷_µjƠÙ³gOŸ>}îܹ5kÖ7©‹6mÚdYå;wî3fLxxx÷îƯçÍ›—%¢›åüùóÓ§OïÓ§OÇ'NœxâÄ ̃WÀ|́jÇ2_ÓTªúe&3)ÓPFYđơ«ä¨†ö€½ỳK¼#I¨(qŒ‹‹#"—70ÀÅÅ…ˆœûơë·yófWWW":}ú´5/_¾üĂ?¼~ưzÇƯÜÜvíÚơÆo<~ü¸—&&f̉¤I K–,©ê%ÙÙÙï¿ÿ¾ƒƒĂæÍ›·oß¾~ưú­[·Ö©Sç£>*­qX>€jUûeIư‰c§NÆ̣Å‹¦Æ‹Ù,YsÔ·!S®°x†&ù€H*JĂĂÉ(99¹°°Đä¡âââääd²h¯ê;v”––Î=»Q£F‘>øÀÓÓsß¾}Ue»víÊÉÉ™:ujdÙß̉öíÛ4(##ăüù󼯀¥*|à/\0–ƠŸ8>ư´±\ñ®{œ–f”P j!êyªSʉ¯î@8ïè@*JçÎÛ¼yó̀̀̀Y³fƯ¾}ÛpüîƯ»QQQwîܱ³³{ươ×Í­öÔ©Svvv½{÷6±··æ™g233«j«Óé†Îüâ‹/;he‰dØôKư‰#{+¢bâ˜MÙ¼4ƒØƒTÿ¦”sÉô€–ry‡ó:o¿ư6û£§§'¤zO&‰'$T¸lú¸tÊ·ÅܨŸ‹5~R̃skOçüΆ‡<¾÷h@ „̣Ưü»R™U³̣È8sßäÊgTùPđ¯^Z¸V8p ïÔBu;ÇHK˜:-̀Èf [`ggWroëáÇDtíÚµ{÷î-Z´¨wï̃ùùùß}÷Ư5kf͵gÏ1ư‰‰‰5>̀‚}ƒ,׳'•}ă đơ%gg*»©̀»ÂUÜ›zsi‹Y'u'ăêG·|o±¹³¬5z³‘̣ 1[0QÙîáƠ\ ̃Í}&U×Óÿ¬Ẃ!ª%8'ӦɻÜZ½zơt:]^^ÉñÜÜ\*ëw4!Lî&¢Ï?ÿüÙgŸÊÓ§OOOOßµk×ÿưßÿ=ïE0;'æ›ohêTĂOùù¼c“Ê·x“·¡¼VEQ”ñ1ÍƯß-¨ù)uyÇRáœ8Î5K̃æ98xzzV́ỲÉÉ!"Ă_P3ơ8´gÏ"jƯºơœ9s–-[6pàÀ§Ÿ~://ïÔ©S:náÂ… 4à}¤Á.…Xa›O•`¸82¬ë_H…–TÇU…$RµË/hq ,“8²ËO´áHEE‰£a®ûèÑ£‡ b˜Ưl½É“'7lØđÇÜ»w¯¯¯ïĉgÏ-¬ÈS•7ß|ÓÛÛ{Ó¦M¿ÿ₫{ưúơûöí;cÆŒ   ̃ @2lâøÜs¼£‡ưâKï¼ó¤œOÚ›I‘5$Z¼½Á¬Ơ¨¹Ùá †GWW×́́lŸO?ưÔÎNâ{èC‡:thU­/–K¹†r&e>Yô;y†Æïï"q°I*ă(líææ&yÖPÛQñXœÆÿ°W86$̀'b×n4Î g×âÑÈÀÓªäZ_¨R´W^yÅÁÁáúơë›6m’c°#@íÅN*)[ÖTëÛ=W̃Píd[l¨ÆYál6¯¡¡1xJQÑ­ê°°°÷ßáÂ… .ụ̈Ë/5jd²’¢@˜¿f0™T@D6óíLOÆ–hhGv×Ac£F»#ˆÎUù`}̃Ñ€„T”8^½zuƯºuB9''§¥ÀGG̃HÇ0¡Ç屋ñè̃aY'®-ï@6*J/_¾LDƒ8q¢‹‹ ûĐ€zơêEDW®\á&€f•ư³cƠ¯Ï;ªÚ-̣„Bds^ă÷wÏ„[_¨”Ç̀̀L" ¨ôÑ   "ÊÈÈà&€f½ø¢đÿăµ˜T¦%µä‚%fÑ“eÈ"â™7EƒO‰ˆêZ_¨Ç"ªt£^¯?ỵ$̣@³ÊÆ^¥`̃¡HO£‹8Æ8–ëqôá–e4ù€yT”8¶k׈?>sæ̀£G Ó̉̉bcc§OŸ.$¡¡¡Öœ VÓâ ê*<Ù§̃că4¶”ëqÔ¨ -Đø$¨„–ăyóÍ7÷îƯ›‘‘#œ-j{Aû3J*|¾xG’SQ£··÷̉¥K½¼¼*}ÔĂĂcÑ¢E~~~¼ĂĐ,f•+v{đŸÜu·+5y™^æT­ID”ÇŒtÄ}Û£¢G"ể¥Ë6lØpäÈ‘”””¼¼,¯Tsăƒ̀}I½zơøÆ  añEÆ?́Úíq´%‘™đ ưYÓâ4?TsâØùÉ '3$&&̣@Ă"#ăÿ°×ÅÍ*A q ́ÏvI³3®@ Uߪ‰EF₫NƯx!=græ‚å")̣™ØgŒ?kzŒ#v°°uHj“ˆˆ;ZƯ–¤:ci,ï,×Z‡$†ÖôªÙ¸O `ëÔ2«Z§Ó=ơÔSaaaíÛ·www瀲¥\>w El£EÜ×Ô“8êơúk×®]»víûï¿oÙ²eDDDXXXxxx‹-x‡`CÆŒádÚ¾w¡¬¬ơÄ1()ˆw™c,F< ¬­ `{8'»ví:WæÏ?ÿ$¢̉̉̉«W¯^½zuÛ¶mDT¯^½°°0!‰lß¾}] æH¸û5M§sïm\Ä1Bë3JlEVGc92‰¨£åU€:qNÛ¶mÛ¶mÛ_|‘ˆ²³³ ydvv6=xđàĐ¡C‡""{{û   Ư»wó¾h¶ ²đM'…mÛÆüyÙ¥uk̃Q\€±ùG¤–[ƠDäééÙ³gÏ={ ?¦¦¦;wî́Ù³çλråJqqqIIÉ•+Wx‡  a'N˽Ä;"Ëmú_C9.l#q¼ØæbjĂ; Ë-gÊÿ%É; zgU»»»»¹¹¹¹¹Ơ­[×ÑÑ‘w8¶àömc9€Rx‡c•]‰¡oEEjr£ù ̃!X…ỨËó0ïh@*êq,--MJJ?{ö́™3gRSS+>se¬ḈíÜŸđG2GđÀÆÙá3 f âåÊí^Ä;çÄ1''GHÏœ9“đèÑ#“'8;;·k×.¼LưúX^ÀrlâhO%–W¤2—/óÀLwi\dÜ:Ná¼c²Đũ€Ü8':ủëơ&7ñºuku‹hÍÜ̉-'.²ÂWNMa²ù¸È¸x×nâ6sNfÈ…À…nE___NGD¹¹¹§N2yI×®]ùÆ  ]́G"¢‹©†§b<¡ơƠ³™Äñ±Ëă8{^ă@åỔ™gX|çÎƠ?311‘w°¶">^£‰ă b&‘Äi{ơo*ß W~  Fµ;ODD%Dö¼CI©wV5È.N«9ÊZZküá¡Æ÷Q,?‘:laáH ‰#@mÁ¦Vèïpdl–0;dÇ"mnº¢Ñẁ‚Ä ¶ĐjjU½'m·®üêßeÇ4Ù˜›¼ q¨-Nä ëÿ¿D£(6 ‰£m¬È6 ‰#@mñđaeGµ¾ áÆ—yG`Ê64Đh£No} RHj·•+yG`¶$J2”íÎØÔ¶1‚­´•wXV‰Lb~¸Ç;çÄññăÇ?...&¢’’’”””””̃×ÀÆƠ­[Ê₫À;³±r=]5¾QueyƠcz̀;,«D¸0?\á HsâØ­[·°°°-[¶Ñ;w8pà@̃×ÀƵkWhüAƒ“JØ!€}´7” -© $Á̀§Èz̀Úû|@u8/^PP@DhÑ¢ÅĂ²XüñG5/éÚµ+ߘ´®mÛ:QöƒÇ8²=‘̀ê¸8̉đ¯g̃X§Üêß́æáÚû|@u8' 4¸{÷îéÓ§OŸ>m8øÊ+¯Tó’ÄÄÄ«»wËmÛ2]sœüưf(G0wªµ8FR jñ'ưÉ; -+×zl ç[Ơ½zơâ}j…œc¹E M®/m 'ă¬]??ăq v2Q$ix¢Ûɨc¸Ä;2çÇ÷ßßÁÁáØ±cz½₫ñăÇDTWƒ£ơT®Ü¶1 ÈÏ̉Óy%±£GyG`.ööÉ@¤È]´Køé=¨GơxÇgt,ÔœGww÷ùóç åôôô>}úÑ™3Øß@b¦s`4x‡º"̣`LJ²´"^Ø.̉Èr=©çè\/̉̉ ¬ºPK¨hGggç~ưúơë×w 6Èô6î[oËA_‹‡ÍæÛ̉ô†á'Íò;çG–——×5k ?–––fffzyyÙÛÛó @ọ̣́Êÿl“J4=(ÈtƱ7yÊÚƯ<æÉ́đ¢«¼C¨(qùFI´­́PQ}̃a€DTt«ˆN:ơ·¿ưmưúơW¯^–x,**JJJúꫯ§Á•ÔF'Lyeg#kê_ÖJ2î‘(tÑEh÷~uN•\¦Ë¼ƒ³Đ#áÿ±}ÁZú|@ T”8æææÎ;7##£̉GïƯ»÷î»ï>zôˆw˜ÚÖ¿…CZƦ.W]èOư©|çiÙ6 (ö¦t”đÿØl‰#€ QQâ¸~ưú[·nQưúơç̀™óư÷ß;v́‡~x÷ƯwëƠ«GDééé6là&€¶EVxîï ̀Pqđ_‡Æ̣W_ñÏ2¼°N¹mc*¶h9u€º©hŒcBB¹¸¸lÚ´)8øÉ”ßßßßđLAvvöÑ£GưüüÂĂĂ7n,æ¤*4bDµ«>qt#ă¢;;ŒŒ¤¯¿~R₫ë/ªbÓ{ØY¦\Ép“ÍcF̣¬¦¢Ä1::Z¯×ÛÙÙưưï5jTXX˜pÜÓÓsƠªUï½÷^~~₫ÆÍMÇŒ½zơê^½z sbÖ¯_Ÿ‘‘ñúë¯;–ơÀË;@›S¶îÑ̉¥¼£©RơÛÆœyG)̉3û ưÂ;\Qª\ë)Ÿ)ÿ̀;J°ê¾¡»¹¹EEEEEEQnn®°̣"X©ÊáÁuŒ;#“»;ï0«Äơ‹¨"Kyé%Z·w RSó‚yL¹ÊÅDÿ*+g̣¬¦®GƒÄÄĘ˜˜={öäææWÜl̀"jŒoU³=^Tù€¶Éɼ#®jXư[І)«÷ób©®Çq×®]«W¯6lWƯ­[7>}ú¼úê«3f̀0l?5º{×Xµ•óíÛ¼C®’˜¡~lăâÈ̉ŻԲÊG\Èåq¹ơƠ¨¦e…*ĐÆpM¨ºz?ÿüóyóæ²Fƒ¼¼¼5kÖ,X°€w€Z²~½±¬ÁUwʹJ5Î'vóyw2"«yDoØ*¦ÜH̀ 8hŸÇ‹/~óÍ7BÙ̃̃̃pÜĐ˸uëÖJ—€J±ô:TưK‰£Ù“‘ryG VSQâ­×ëí́́>úè£8æ·¾§§çªU«œ‰hăÆ¼ĂĐ 6ỵđ¨úyZï¬̀‰¼#¨ Û:¨Êg±€N‘J¿0_â(OE‰ăåË—‰hđàÁ'Ntq)·ÛÀ€zơêEDW®\á&€fˆ½]ûèïHÍJ¢¶ÊÉó,jÚ6FàI†r%ñÚ:`CT”8fffQ@@廲QFFï04#5UÜófÏ6–¯]ău "H̀4cÇzU>ëyzy…jﻋӗw %!!!DTé(F½^/́U¨y’Z£úÍcîÑ=c°Ơ₫suåk̀¿ÀêOƒªXă©>°T”8¶k׈?>sæ̀£GŸln––;}út!q u— ̀ÀNœQå¤6sª¾ÇQÔªC|™Û9^ơëFøïXÀ:*ZÇñÍ7ßÜ»woFFFLLLLLŒpp̣äɆ'xxxL›6w˜ÚS~̀pµTÙă¸Œ–Ê­©u5ÏŒŒ¤#Gx‡+µ‡ôw•HaÊ5̀–f³ù8¢Ú¥¢Gooï¥K—zyU¾'„‡‡Ç¢E‹üüüx‡  =/¾(ú©ª́qt'ă^ˆ ©a5Ïdïº_¾̀;n›v)GUÿTvs5~13¨(q$¢.]º8p`êÔ©mÚ´©[·.¹ºº†††¾₫úë¿₫úë³Ï>Ë;@ÍHK3–͸›•Å;đJˆäf,¯Z%̣Eœ´©áq7răbù̃6F€Ơ4NE·ªnnnQQQQQQD”››ëæ¦ê_ªÅ̃sÖúB©$r~8µmk,›qƒ‹̃”ÎÔùWú•w”UbsyOñ/+à7XGE‰ăÊ•+…ÂÈ‘#›5kFDÈ,Æ̃s®9qts£\[ÛÖCwƯï0åº#)R+‰£xÇ ÖQQâ¸k×®;wîQï̃½…Ä,ƦM̀UˆŒ¤Ă‡y‡,ăP sîï²óÇÏѹ*›TrƯú*@ƒT4ÆqÔ¨QBáÆ¼cĐ<ó¦Gk`"3WÿVă†8â¶){Üø ơ¯ÈSƒÆ¼‰¨(qœ>}úˆ#ˆ(::úîƯ»¼ĂĐ¶Û·Íy6{3û’z· Σ<̃!X‡]*¨¦!˜-™ÙÈê_¼Úøb5SÑ­ê™3gQăÆ¯]»ö·¿ư­uëÖơë××éLw9]³f ïHl›8ÆÅ‘VÚ¿AÆ[³ivÏ÷̣¢û÷y]•+¾NÍ=mÅ<)’hoY¹„¨Æ± V*JùåCùñăÇñª\ˆ@sE<©U+cyÙ2zé%̃Q‰ß6F,†óưÁ;ô*‰²_̀”·½̀;h°”nU€̀^‹ÇƯỪÈ‹íl‹‘¥L™Â;âZ€!êóơSÖøp€ZNE=ØN@f'*›̀ö8Ú‰ø®Ë¶÷́ÙrK‚ƒT؈¨N`v ÜLĐ2%³fÍ‸vÍX6{Âtºz„̀¶7.N­‰£¸7¥15¾MfÍrRˆ…ÛÆÔơÅ̀ƒ[Ơ6ˆB¦ơmcî’yk,<ơ”±¬̃‘̉ẫ1·æ¹XË”Í}ñ̃Ñ€TÔăhØ9¦z5 iÛ¶m:ux‡  Ŕ?"×nĐ€23y.1uƯuggÆ4ơHü?ú?¡\LŪù­–8@q*úç¿víZñO Z¶lYpp0ï¨ÔÈ’„)2’öïçxuœÈÉÜ—œ>Í;hÛư9@Ô+ØÇt` âƯ†'ṇxÑê­ê¤¤¤—^z)׿vׄ%·h>äu ,X‹§¤„wĐ,s¶4¡&†r ¥đn€uTÔM–SQâøÆo ôäûtƒ ₫ù©S§=ºiÓ¦ÂÁÎ;O™2eøđá 6$¢lܸ‘wÔj”•e₫kæ̀1–Ϩqjü‰Åfóâ~ơ²MVçæ1:ñOÊ;V‚Ç—^zéÂ… D4f̀˜ƒ~ñÅQQQ .Ü¿ÿ믿NDçÏŸ:tè¢E‹öïßߥK":zô(ï¨l…Éæ1êDIÆE'¾¾¼ă®”uU›Ç˜Ñ ̀¾{ê¸fPQâ¸bÅ´´´F}̣É'ÎÎÆ‰zöööï¾ûn³fỊ̣̣́V¯^MDuëÖ}ï½÷ˆè¯¿₫â5€ª¹¹‰~j@€±¬ÄѲmc̀^Hw¬zơY:Ë»•0£˜}ªZ>_`6%üñ5ỉÄÎÎ4*NçççGDçθ»»Q–%7äjË–©f›å´ÜPnOíE¾í<-.ù"ëw¦lF×!›Í#qĐ,%="¢ .\ºtÉä¡äää„„"̉ëơ‘Ÿ₫™ˆ„ÁP•W_µèeªéqt#ñ]¦Fª¼ëÎĐøJb́äflÛĐˆ)«å‹ ˜ME‰clj¨¨¨h̉¤I+V¬8}úô7Î;·~ưú_|ññăÇDFD ,Xºt)5kÖ̀ªSØ"ö›—…««f6²e3BØƯbV¬àƯ†̀yS|Iu6­Ú6F°ƒwÀR*Z á½÷̃‹‹‹ËÊÊzøđáºuëÖ­[g«ƒĂ¤I“ˆèLÙ”Ï#Fđ@uØ>6­o“MÙ¼ª9³¼¶«+ï6TdÎ̀nÔmíâq9l.oƬjVï6€¥TÔăèïï¿nƯºFUú¨££ăüùó…^IAddäàÁƒyG  :lâØª•9¯ôóă»ôÔr«Ù=ܬn:vJP.©båZ•\QàBE=D₫Ë/¿lƯºuß¾})))ÙÙÙNNNM›6íÔ©Óo¼áWöW­]»v}ûö2e v¨Ẹ̀™-‘‘”Î;üÊy‡e/<{–wèóWÿ.{®ñÙñÿ =Ă»%twÀ‘ºG"rrrzå•W^yå"ÊÍÍuuuƠéLo†|úé§¼ĂP/ËûØ""è¿ÿ}R.,$5}1³`Ûuaß±³Ă‰*¬®†ÄÑrÁDWyÇÖQÑ­jVbbbLL̀={=zT\\œmÉ8'€Ú)ÏâƠ•Ù‘ªY‘G ’»´–;fáë¼ÉÛPVçæ1fĐx̣¤ÂÇ]»v­^½:½́~Y·nƯ<<<úôéóꫯΘ1£bï#HÆd›.]ø†s.ÊshY¯mÑ‚₫ü“oøå]²¾ ƠmÓÍÜDm++gƠçƯ0Ÿºz?ÿüóyóæ¥We•——·fÍ đ@K40ó́䘕+y‡oá¶1‚ÂB̃Ñ›x A—é2ïf”cö”}{¦üïèÀ"*J/^¼øÍ7ße{{ă/C/ăÖ­[O:Å;LͰj-ºuy‡_®ƒ-„B̀zíÛoËñn‰ aÇ(ưù̀”Ơ²T(˜GE‰ctt´^¯·³³ûè£â˜áư«V­v¯̃¸q#ï04ĂªÄ±l{O¬̉§̃Íc,œ®́µ4{È¢'SV×]wKE‰ăåË—‰hđàÁ'Ntqqa0`@¯^½ˆèÊ•+¼ĂP5vNK„Æç"X“8²mWWâh~6ono«¬Ø|¯5©êMÑT”8fffQ@@@¥QFFï0T¨ơmc̣)ßâײûØ«k‚¸ùoJ¤¥ûÉA²¡‰×y·,¢¢Ä1$$„ˆ*Ũ×ëO™Í\û›ưj¶Çq?íçÛ”¾§̃T´ă›o¾¹wï̃ŒŒŒ˜˜˜˜˜áàäÉÆixÓ¦Mă&€ªYÛ»–Ă$’»;ïÙØ¶1Af¿ă˜J©¼cg²bđ§¢Gooï¥K—zyyUú¨‡‡Ç¢E‹üØuæ ‚+o%¾ó±¬±ªäg ë.¤/ùÊêÙ<ÆÓ²—ă7XGE‰#ué̉åÀS§NmÓ¦MƯºu‰ÈƠƠ544ôơ×_ÿơ×_Ÿ}öỸØ:Ơ,cĂfH–%!ꙋ,Ư…TÏæ1v³ïäm̃mó©èVµÀÍÍ-*****ˆrssƯÜÜxG Iöγ»ÍpM٠ɲ[Ơ‘‘”˜È±ŒÉjJ¦d̃yÂÂN`öeqDCx7̀¤®GÈ,fí=kâ|«z­0”[P j`;O±—$¾gÊTd¿¨å®;˜AE=?‹‹KHH¸wïĐ×èííƯ¾}ûˆˆWWW̃Ñh»AóÔ©VWÇu½ưºdí‡lâOûÇÖ”iÄ;ëlÏ©¥Ù<;=(̉ƠШ8ߪ̃¼ysNÙ‚Ăưû÷Ÿ4iRÇu:á qqq7nÖÏÎÎ̃´iÓ¬Y³øÆ  Z̉̀f‰Œä;ºÑDSjj}%₫ɯlÎjiâÈ.HOñ~ÄgE[i–îÖ鹄àÜăhØZpÔ¨Q«W¯îÔ©›5QddäªU«Æḳ|¨èÜ9)jaǪ`6²MmÓÜÂ:ØÄQ=k€[ÜĐ.Ήă7„ÂŒƠMÑ3ô2¦¦j|»-ơ3™̀C³̣áĂrsy5è ê¨Cu e5$VưåĐø€ZsâøđáC"̣̣̣̣ơơ­æĩ̃̃ 6$¢ÜÜ\¾Ø>lĂæFshÅơtèÀ%ụ̈.H\Ÿ6±j†:Ûăˆ®­áœ8–””‘‹‹KÏv ,‘`QcÛ`ŋم÷×®å?›Y³QơăÇ\—×_ô—ó²ă­ºÛ̀₫¾æ̉°ÿåx@r’­Åìl $¶ÇÑ—|-®‡J÷ŸtËv°ÏVƯmÈ”íy· ̀¤À ₫ø£†q@m²ë@:™¡€R #KIá̉©†ñ±×!.4á̉2ͬzµÙY¿¶¥5¤XVˆˆˆØ ü‡k€yT‘8fdd¼̣Ê+¼£Đ6[Ú6æ<—¤“y>Æqm•uoJ$E¢SĂgs<9*-À­j±l™±¬ơÄQ*́v>ó|Øư°¬ë¶f¬§$¶ÈQé=¾m³!q°́œ– ¬«K³‘%Æ'q¼̀”Ÿ²ª&v=Ëâ0„£…€¸ßª̃³»ÜHCÊ%##%ZLÜZOY™m1nƯâÑ6[íkUMlă^Úû6½­pS¤ÜíÅYª]h@iœÇ   ̃WÀFH¹M »`ê_qœTbSÛÆøHv)x­È#G$Z…[ƠPAT”±¬øæ19”c([?°Ïï·cy.ßÍc$Ø;üá€UjKâ¸sçÎ1cÆ„‡‡wï̃}̃¼yYYYƠ?ÿñăÇß|óÍsÏ=Ö³gÏ×^{íØ±c¼ ®›Ç°Y‘ơ=’­Ld©·đƯøàOOÏ}ûö•–V¾ ĂÏ?ÿLDÿûß ›hM:µ¤¤7¬A2˜¨3$­:=]á¶8‘“„µ™lĂMK êp)·Í³¢ ™̣Ti«F#€¦Ø~âxêÔ);;»̃½{ØÛÛ?ó̀3™™™ñUt¥¤¤¤¸ºº¶iÓ†=(LOKKăƯ €JØ̉¶1W%ơn,³k¤+M7%˜‚y…Ïfw¥­ú¯6€%l\̀yCBBL·¿Á27õä‚Ú9̉ˆÈU(gd¤dT;wB̀ơôkÓÆ©l đ”e÷) 0%:ơ“O*MII•#äJ/©Ë.˺çn7¹ư8ÅÚ½W¹5£†OÊ¿Üüå©"ÉVG¯Ñ…ă»"É›@5TˆởÂơ´̉Ày‡ 68 S§]]]M»¹¹Qvvv5”””|ûí·_|ñEIIÉ̉¥K½½½Åœ711‘wÓmMów *bWÿs­j~N·n†Ícx]üÖÔZÚS?x`'_[*©ù;c±ñàÆTßÚS ¤ï̉»BùnÓ»ư¨ŸLm1»¥đ4öÈVU!₫ƠK ×Óÿ¬Ẃ!ª%lüVu½zơt:]^^ÉñÜÜ\*ëw¬Æ‰'†ºpáBooﯾújđàÁ¼P9éûÙ‘’ׯsi”ơkñpÆ̃ßµ:k$¢6dxÍw p h|K €ZËÆGOOÏ=‹999Dd˜g]QaaáÂ… _~ùåôôô3f́Û·¯[·n¼[  6qTpE{tÏPÎ¥\+j2ªpËA)Çe¬›×àÖW!Đø—€ZËÆG"̣ññÉ̀̀2EaHOå{Ç–––¾óÎ;›6mêÛ·ï₫ưû§OŸnX— ¶ 3–\ƆíH‹¢(+j2â¶ỳŸ2ÖÍ«Çq”T±‰ăy.MKØ~âØ·oß’’’#GèơúÇׯ_?œ]¨ƒ±yóæưû÷¿đ kÖ¬©¦W@…Ø|O26(¿´ÛÆr¥é¸T—‡ôP±s±;´JÖQÈ.t±Z±¦€µl?q3fŒƯêƠ«sË₫z¬_¿>##cÔ¨Qeûª=zô(%%E˜t¦×ë·lÙâîî₫₫ûïóÀl²,â¨WnŶ#Í•¤¹Ç)2 B́D­o“J̉¯³È.̀O¾úI÷¦DRä¯ô«Âá³¹¼§Åµˆ<¨[­H‰hèĐ¡C‡­êÑÁƒ–Ú‰ˆˆÀ*Œ -K—ËR&nn¶7́Oéº#(BùÄñ¹OP pƒÀr¶?ÆÀæyxËRî¨ỡËÊ(·²»¡iKÉje' %P‚2M)Ræ4 H4O®^4nËØ…Q˜Ơ*ׅʾ)}$«•M÷Đ¥#ë«¥!qĐ¼Û·å©7?ßX¾tIáFÙÔ¶1u%«µ%Ó{™Né¼iR̃€ù8@fÎ4–x“ŒóĂ¥M½¼¬¯ĂḶ_0å7i+muS™r‰ÂM !q°’íGDD­ZË$́Z<’nf̀á®û ÙÏ üæ1w³Ơab5€F q°2ÎfQdR‰ÛÆ<©Mă÷½+UH… œ…!ñUd³y$ÄÀv̀²%̣ÏFÆ=d`!qĐ6yg­pêĂt”z4K‰y>l7Ô—6¤ÀJ̀+’}åCy­fÊ2Nß÷dÊèqP=$Zu挱üÎ;¼£±N)p¥7é%cƯA$wøNLy¤Ü' qP=$ZeKÛÆ<&%úiØĐX^µJ₫óɹ{øSô”ÜásÈâ®+J0G­bÇ€9Ï$oí|8Ë´À ;SEÎl¾/ơ5”³ä™Œ‡PG­Râf«@Á₫̀†ÔĐúJĸ|YzÙn:9/»ë`œ<ƒÙ2†Z…Ä@«”˜̃!`'•<|(ï©d½¿«öM‘kv8QùE‹dJ•Ów G­b·t‘—‚“J°mŒH̀ld¹G¹£ñ/ µ G¨ ›8ÊĐÏÉæ=…T(kSBä́$":-sư•‘;q´—»́—%6PË!qĐ©ˆḈđjƒ5Aâ 1l¢£ô­j)×ËV IG»‡̀ïRe³ù©UU¬₫­ǘ GY»ÖXvwWöÜZïᬌ$‰£ûvæPö"±=’ôàW4|Đ$ăèÈïܲơp¶Tx` ƒ3j¹R¦ÜÎâZ,!Óæ1|x̣j‚Ä@cRRø›íq<{V»P~­’€ÓE'ă=ujc(ÿD?ñ¾ÖÁæ1ª‡ÄDsu5–¯]³²²{tÏPÖú~ƒuÎ×±¾ëƯ¡;Öö”̣ ÈU₫”`$ Ú„ ƲƠcÙûª’Ïđ¨QÏRÖæø'ÇF̉̃ªæËG‹uU‘‹€ $ZƠ¡×Ó[½y »ˆ£̣=¶8χ̉C+kÈfÊ®sÊ:8¨G­â¶mŒ@̉GWrµ¢&K°Wị̈e…O®^ܶ‹Nœ,¯dƒÄ@KΜ1–=âƠ³‘ùÎä`{%Úy›ˆˆxd;ơ¨TU-gÊÆ82Đă NH´„Ư/*ỆzÔ ˜9=4ÔX–ró˜±Ú"á~7¦À¡)FèqP'$ZÂsÛÁúúkë^—)ó:Ù‚ZHU•*¶!""]wP $ZẪTå“Âuî̀ûH¯¤Äº×³–<Ç₫ÔßPN kªºÊ!|Đ$Z"åMUËÈĐÏFa|Û”kạ̊œg”ØÖæ1Ê.ŸæBâ %éé¼#`'•\¹"M•_ư»ÜưƯºÎÏnبùěǨG0›8ZÑÿyƒnÊʯ₫-đ̣’¨"5¥jñ S µ¾ ˰_"ô¼‚€*!q¬̉Î;ÇŒ̃½{÷yóæeeeñ@$|–ÎÊÎä̀¥)’Ưu¿a}’‘ªÇ1ŸWØÄQM98Vnụ̀å~øáơë×;v́èææ¶k×®7̃xăñăǼăx¢S'̃Uë²ùÍ$Ä%|›Ü<¦ -~-;;|&¯°Ù<GơAâX‰ÄÄÄơë×ûøøüüóÏëׯ‰‰™4iRBBÂ’%Kx‡đçmc‡[üR6qt .á?döçÛ²…KêÂ{v8ù3åÜ.T‰c%v́ØQZZ:{ö́FLđûàƒ<==÷íÛWZZÊ;:¨½RRŒe­÷–I5Ï ËçÏKQ#¿l¾µ²¾U$,îSÁ $•8uê”]ï̃½ ǴííŸyæ™̀̀̀x)÷&0;¤gâèâb}·è¿<áím,ÿßÿIQ#¿Äq 1”ïÓ}Ë*aG ̃cëåđ*às‡HÍôzưµk×¼¼¼¼ÊO¹ &¢´´´§Ÿ~ºú®&&bljđƯüL5Fç™Z•¢Xy=ọ́¤hŒqÆ,Ï/eQ\´& UL₫]Bôd,M)ªÓñ{[ốÅ/S‰p̃B̉%R"ïø@£©¼¼¼’’’zơê™÷ôô$¢û÷-ü*bÄ ˆáT ‰£)aê´«««Éq777"ÊÎÎæ €¬ÚƠçxúÏ?øÜ¾Ä÷E€ÊáVµ©zơêétº¼ 7ărss©¬ß±zMoßń@D:=éudWJ¥vå₫W8®×=)è*ÜçªøPU•°Ï¯ûâA<*‰§bU¼âyR(%½Ơ×§XO¤#*%²+ÿ¿Âq]Y¡bÚCƠWÂ>¿R%̀c–TRBú\̉Ù“^WV‡́ôå.tÅw¢R¯£É»eWZî™:=éu‡z¥R»?[üÙôfS"̉éÿW̃N¯+µ3₫ŸđpYM:}oûđ¶áÿØgVZU%ñT¨D’x*VRs>>™™™B¦h’’"<Ä;:>8V¢oß¾%%%G1Ñëơ‡®_¿~xx8ïèø@âX‰1cÆØÙÙ­^½Z×HDëׯÏÈÈ5j”££#ïèøÀ’JøùùÍ;wÑ¢EÆ ëÙ³gjjêñăÇÛ´i3eỄ¡pƒÄ±r“'Onذá?₫¸wï^__߉'Î=[X‘ vBâX¥¡C‡:”wj1 G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠q 8p ïl ®§äpI%‡K*-\O G‰#ˆ‚ÄDA⢠qQtz½w ¶&$$„w ¯ÄÄD̃!p€ÄDÁ­j‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@̃Ø;wîØ±ăÚµkuëÖíƠ«×ܹsëׯÏ;(Í=zôùóçMz{{;vŒ=‚‹\½äääAƒíر£C‡sơp…MTsIñ¡5ËăÇ·oß₫ƯwßƯ¼yÓƯƯ=88x̣äÉƯ»w7y>¥"‰¹øˆåÁƒ+V¬8}úôÍ›76lضmÛ3f< Q$̉X¾|ytt´««kÇSSSwíÚ•””´iÓ&̃¡iĂ7\\\Z´hÁ¬W¯û#.r6õ\ƠCb®®pEƠ\R|hÅ+..~å•WÎ=ëééÙµk×üüü'N=ztæ̀™o¿ư¶Y— —TüơÄGT¼œœœç{î̃½{AAA}úô¹uëÖ̃½{÷ïß¿}ûö¶mÛu¹lÿ’êÁjW®\iƠªUÏ=ïܹ#ù́³Ï‚ƒƒ?ùä̃¡iCvvvppđ¬Y³ªy.r5²³³O:ơü#88888ǿÙ³&Osơp…Y5^R|hỊ́í·ßO˜0!//O8rơêƠN:µnƯú̉¥Kâ/.©@̀ơÄGÔ,BĂ—-[f8²k×®àààqăÆ™u¹jĂ%ÅG ́ر£´´tö́Ù5|đÁûöí+--åܸqƒˆL¾›ÀE®ÆĐ¡C_|ñÅmÛ¶Uơ1WW˜Uă%ŇÖ,?ÿü3ưưï7tºM:µ¤¤ÄpÛŸRi¯'>¢fùă?\\\̃zë-Ă‘‘#G6nÜøâÅ‹%%%â/Wm¸¤H%pêÔ);;»̃½{ØÛÛ?ó̀3™™™ñññ¼£Ó€ÔÔT"̣÷÷¯æ9¸ÈƠX¸páÚµk×®]Û­[·JŸ æêá ³j¼¤øĐ%%%ÅƠƠµM›6́Á   "JKK~ħT<1×Q³Ô«WïÙgŸuvvf:99 ?â#*ÀGkéơúk×®yyyyyy±Çƒƒƒ‰(--íé§Ÿæ£Ú ¿ànƯº5ỉ¤Ë—/×­[744têÔ©†é¸ÈƠëÑ£‡Pøí·ß*>*æêá ›¨₫’>´fú׿₫åà`úçæâÅ‹DÔ¬Y3§ÔL5^OÂGÔL[¶l19rêÔ©7n„…… Ưºøˆ ÇÑZyyy%%%&ÉÈÓÓ“ˆîß¿Ï;@ ¾"¯\¹̣îƯ»]»vơöö₫í·ß&L˜°cÇá ¸ÈÖsơp…Í…­YBCC…¿Ç_¿~½““ÓđáĂ ŸR3Ơx= QK9sæĂ?|ñÅ_~ùåæÍ›/Z´H8¨z­ơøñc"ruu59îææFDÙÙÙ¼Ô€[·n¹¸¸̀™3g̉¤I‘ßÿ}êÔ©ÿüç?{ôèáç燋l 1WWØ\øĐZ¬¤¤äÛo¿ưâ‹/JJJ–.]êííMø”Z¡̉ëIøˆZ*11ñ»ï¾ÓëơDÔ¦M›:uêÇñ5@£µêƠ«§Óẹ̣̣́LçææRÙ÷ ¨̃7ß|sö́YĂo7"êÖ­ÛK/½ôøñă_~ù…p‘­#æêá › ZËœ8qbèĐ¡ .ôöö₫ꫯ,ǧÔ2U]OÂGÔRăÇ¿|ụ̀Ñ£Gßÿư˜˜˜ &Q$Örppđôô¬øM"''‡ˆ óªÀ\:u"¢«W¯.²uÄ\=\aIàC[ÂÂÂ… ¾ụ̈Ëééé3f̀Ø·o;ñŸRsU=«‚¨:®aÆ“'O7nÜíÛ·cbbQG øøødff Ÿ ƒ””á!̃Ñ©^¯/))©¸N½½=¹»» ?â"[C̀ƠĂZs•––¾óÎ;›6mêÛ·ï₫ưû§OŸ^q1d|JÅ«ñzâ#j–¤¤¤ÿùŸÿÙ·oŸÉqãú;w„ñ q”@ß¾}KJJ9b8¢×ë>\¿~ưđđp̃Ñ©]jjjhhèË/¿lrǜ™3D"üˆ‹l 1WWX<|h͵yóæưû÷¿đ kÖ¬©ªßŸRñj¼øˆÅĂĂăûï¿ßµk—Éqa-̀€€áG|DH%0f̀;;»Ơ«W ăˆhưúơ£FrttäÚµhÑ"22̣äÉ“;wî4>>!!!G=xđ áà•+W¾ưö[77·;¿\µá’ê„©C`¥¯¿₫zÑ¢EM4éÙ³gjjêñăÇCCC¿₫úëỌ́¡¢+W®¼öÚkmÚ´ ü믿Î=[·nƯ5kÖté̉Åđ4\ä}øá‡;wîܱc‡a©61WW¸¢ª.)>´âƯ½{·gÏ...O=ơTÅGGŒ1qâDñ— —TäơÄGÔ, /¼đBQQQxxxÓ¦Mï̃½{úôi"úâ‹/{î9³.—Í_RûùóçóÁ„‡‡·hÑâÎ;Gupp4hĐ¢E‹<<>₫Ñ£G†¦Ư<ó̀3...bªG¨:v́èèè(”” 777***##ƒˆºté2cÆŒç{ÎÎÎN¯×ÿûßÿ̃µkuíÚƠĂĂƒˆ‹‹?nx­!q0`€Èªä€ÄjN×°aC¡|ï̃=åذaƒ°Đ€6nÜ8}úô¥K—₫ưï]½z5988n©ÇÆÆ …´´´¿₫ú‹ˆêÔ©Ó»wo‘Uȉ#ÔơêƠ ¹¹¹ÊŸưÈ‘#Báر†ƒ£F²··'¢ôôôÄÄDbîVGCwc=ÜÜÜÄW 9̃(äÁƒBAH¿ÄÛ¶mÛÇ̀iƯºơ?₫hV%)))Báµ×^«ô ₫ùgHHˆp·:'''===99900Đä>µøª”¹ªP« Çj Ăjooo…O›››——Wưs²²²¨ÂƯj½^âÄ áø³Ï>kVU’C#Ô qqqEEEB¹}ûö ŸƯÍÍÍƠƠU˜(ươ×_7kÖ¬âs k•8P˜àräÈ‘nƯºeff3oƬª¤…Äj…7 —ˆˆ³^;|øđ~ưú±G̀₫åéïïé̉%"*))ĩ¼¹áxvv¶^¯'"gggáH·nƯ„»Ơ'OÜƠƠƠ¬œ½Ë3̀³¯[·nBaûöíBzGD111:uêܹsŸ>} 7îV~ươ×Ddooß·o_ ªz@3̃{ï=aùkK–,1¹ûlxf^^»ø——׬Y³¬¬Ü²đ̃|óÍ;väääụ̈Ë/“&MêÔ©SRR̉áÇ…ç¼ú꫆—îVgggQ§NêׯoxÔ¬ª$„Ä4ăîƯ»•ÏÏÏóLOOÏuëÖ±˜e•[‡‡Ç¢E‹̃ÿ}áôÉ“' O˜0aÂŒ3Ø—îV ?æS ̀ª @BHÀ–ÙÛÛ»¹¹ùûû÷èÑc̉¤IUeÊxöÙgwï̃½víÚK—.%''{{{·jƠêå—_îØ±£É3…»ƠB§£aµUHHgP LQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(ÿ²œœ vÇ5=IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/dsigmf_101.png000066400000000000000000001454171466512601400222760ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\çđOA,{VQQÔ:êV´î½ễ¸G]uT­ÚŸ£îMµÎºµËºjƠº7âBÅj8ßÁ»#HBไÏûå«ữå¹»ç.@¾¹{†F«Ơ‚ˆˆˆˆ()v¢+@DDDDÖ‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#…‰#ÅAtl———è*QÊ ]˜8¦ˆ´ùäf^^^|SÔ†o:ñ}Q!¾)*”foñQ5…‰#…‰#…‰#…‰#…‰#¥ »wï]̉Ç7Eø¾¨ßR&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDdÑ "¢Ôæåå%º Dê,º Ö‰#QZÄI" ¿Jª‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆT§L™2F£Ñ´hÑBt]¬X¿~ưt—1O<¢ëb#˜8©Q±bÅÖ­[7dÈƯâ«W¯úöí›7o^—êƠ«ŸÜsTTÔ€¨\yï̃=2d0é¸&¶··¿xñâ”)S”5¹|ù²“““^á÷ïߟ9s¦ZµjQQQÇØ·o_DD„y‡’‰m‰ˆè“Ó§W |ù„^ù÷ßøá‡o¿ưV·8räÈ™3gnÚ´©]»vk×®-R¤È={t/yxx́̃½»I“&ºÂÛ¶m›4ỉ¸qắ́́$Y><<üâÅ‹E‹ààà0räȈˆˆÓ§O§K—À¥K—;öæÍ;;»M›6uíÚU÷ €ŸŸßï¿ÿ₫èÑ£9rXđª<~üX«Ơzzz*WfË– ÀÓ§Oă—¿uë–ƯçŸ₫âÅ ƯbÅ­]»¶lÙ²z%₫÷¿ÿ)×<₫üÿûŸ½½}ëÖ­M:®I…¼½½uñ5knƯºơ×_=zôhưúơñOçÑ£G>|Đh4U«V=ưéG4õ¼ëׯ¯R¥©‡’‰‰#}R¡‚à hµ ½âááñÍ7ßH‹&LX²dÉæÍ›ÛµkwêÔ)GGG] ,, @dd¤T8GRÖ Ẹ́*TĐe|}}´oß^—5¨]»ö±cÇ"##]]]5Íßÿ}ï̃½|ụ̀X¾|ụ̀åËăW>**J×îĐ fÍ%~UtusuuU®tss“*¯çÖ­[111“&MjƯºuºté₫øă¡C‡6õüÊ•+º­røđá̃½{ߺukÉ’%… ¾xñ¢ñÇ5µ’’É“'ߺu @:ut—QÏ«W¯¬Y³¦E‹«W¯Î“'O`` ŸŸ_«V­‚‚‚̀>.™‡‰#YooïôéÓK‹ÎÎÎ^^^·oßàîî~üøñ}ûö]¿~ưæÍ›W¯^U&ÀËËKÊ)ïáá!ź|1₫NNNsçÎưæ›o (àíí]¹råúơë7jÔHYOˆˆˆDakN—•ơyóæråëׯdÉ’%~ùÇ;::J/ơèÑăƯ»w غukÏ= â₫ưûüóÏ? .¼ÿ₫Zµj™z\S+)¹yófddä‰'üüü*V¬¤»_(É”)€B… mܸQwm5j4sæ̀Î;oƯºµaÆæ—̀Ă6DDd•>|øđ₫ưû&MT«Vm×®]… ₫æ›o‚‚‚ôî«eΜY)o¼ܽ{7 ÀÇÇgçÎ-[¶ôññyüø±^177·Dz$yOOO;;;½¯Ï=+W®øåsæ̀©—3Ơ­[ÀƠ«W îÆ %J”8sæ̀²eË®]»¦ËM=®©•Tʘ1cíÚµ§M›öüùóß~û-₫T©RE™‘W©R@PPPrKfàG""úä₫}Ñ5Hеk×>~ü(Ưí{ûömPPPÍ5;¶sçιsç}ú´iÓ₫÷¿ÿơíÛ7[¶l“&M5jTáÂ…4h9sæ={öœ?₫‡~(^¼¸̃nƒ‚‚®_¿^¬X±øóµ´lÙ²I“&‰×́JzxxèF;*_¾|½zơ4;}ûN:5dÈŸø{îß¿ÿ–-[êÔ©Ó±cÇܹsïÚµë̀™3#G,UªT’Ç% ¹ªÔ«W¯NŸ>ưƯwß)R„wmon©ß¬îÏ”î.````5ÜÜÜ-:|øđwï̃é^ ¬\¹²‹‹K¡B…üüü>}º|ụ̀¬Y³Ö«WOå¹ă¨ƠjCCC{ôè‘/_¾ 2äÍ›·C‡AAA9e½;Z­öåË—½zơ*\¸°‡‡G“&MÎ;'½4qâDsçΕÖlƯºµB… ...µjƠÚµk—Á£ü₫ûï ¥S¦LỊ¸ñ_ɘ˜˜Ơ«WW¨PÁƯƯ]7WơÆÙsXXXŸ>}¼½½]]]+W®üË/¿y\-ï8Z”F›¼ï@¶ªFÿư÷Ÿ´¸yófƯ×cxyy‹>#$$¤@¢kAqđMÈê₫L(P té̉ºÙ“Óˆ2eÊdΜùĐ¡C¢+b Ú·óرĐĐĐ„ ˜ñau¿D–ÂGƠ†M:ơưû÷Ö­[wüøqÑƠ!"""‰£aU«VƠü¶GÖíĂ„†â₫ưØ7¢L¼x—/åqÍgo''d̀''µ`â˜"̉f»•³‘æt11Ø´ Û¶aÛ6ÑUIAv¯_g¸t)Ă¥K̉áĂă”ptDúô:_}~¦¦‹/]…Ôv₫üyÑU°K–,Y²d‰1%ÿŒˆÿ±ÿQÁ™cˆ¬Á=([ ́íÑ¡ƒmgFy÷¯_c̉$T«F₫—'¦O‡í̃`&"‹w‰ÔêĂ  ón´dϬYѰ!̣æE<È›yóÂƯ]ü={†§OuÿX³Æ¹dI=ræDΜº¥'_~iTû»w±y3ÂĂqö,ÎE¼Y€‰å˱|ýb‹=I$‘Ù˜8©ÉéÓI¤5  U+̀œ)º¢©(~Œiø¥Ç±́?cOÿú+¤û÷Ç¢E¢ÏˆÈʰ#‘:ụ̈ 4³F¼y­wî¤tÖøèF¯^¨X..qú¯X1t耙3±?nÜHºzz¢cG¬\‰ĐPhµ±ÿ₫ù₫₫ǿ³$¶]¼8¶–ưû§èơ$"²%¼ăH¤ 3°~ñbôë—¢G~ûë×cÛ6́Úeù_¿ë×±aƒ₫ú’%Ѹ1Ê–uL‘î* B̀›»xñ"–-C"Ư*—,‰}µuklÙ’""²¼ăH$ÔÇĐh dû÷C«M¹¬qåJäÍ 3ÂÏ/E²ÆD\¾Œÿư­[çîMöí‹‹Sæ`¥JañâØ›‘¡¡‰Ư_ܺ J—Fttª^""ëÁ¹ª-/ÍÎ_©f*yÔ(̀˜g›._F<)q´[·Đ«6gÛtéđÙg¨V 3"cF8;ǧN¡X1<{&÷–~ö O$«eÊà‡â£í₫̣ zöÄû÷ øçîFĂ?SDJœ«Úx|TM$ˆ££~Ö’bßâ¾ưÓ¦U2õØ^Ú•+[́è¯_cíZÜ¿;Œ¶æüy4h÷í‹©S‘%K \”ѱ#¬_=ñî~/¿€~À·ß¦Àቈ¬U¥º7 ÑÄÉÛ¶M‰¬ñŸđÙgĐhËK•Â÷ßËKîƯìY–̀¸ºbÀLŸ«Wå=z„æÍĂK•JbÛ¥KcO¡lY¤Ôwûđö-´ZŒgàƠ1c Ñàùó”96‘•aâH”º¶o‡̃DUÇcăFËä§Ÿ Ñ bEĂ ‹ fÍMà.\Àøñ.Cö́˜=ûé… ±Ơ¸u ÇĂÅ%Ạ́çΡhQh4h̉¯_§L&O†V+×£ôÙg±7 ‰ˆ̉6&D©èơk´jgV‹J•,x„¿ÿ†Fƒ̃½ ¼ä鉳g¡ƠâÍ &úRÄU¨fÎŒq("C†$XrǸ¹A£AíÚ)S•æÍ¡Ơâ₫}dËgư©SIܼ%²¨2eÊh4FÓ¢E Ñu±bưúơÓ]Æ<)Óv< bâH”ÜÜä¸iSË>~₫ ªV5đ̉øñĐjñßøâ ÑWÀ3bΜØ;‘ÂĂĂp±ƒ¡ÑÀË /_¦@%̣äÁăÇĐj‘!Cœơß~ ׯ‹¾H”&+VlƯºuC>}‘zơêUß¾}óæÍëââR½zơ“'O&²í¡C‡|}}³eËöÙgŸU­ZơWƒ·̉?¹téRÛ¶m³gÏîââR®\¹9sæDEEI¯t\“ '~\=111 .,Uª”‹‹KÑ¢Eg̀˜ññăÇ$Û½{÷uëÖU¬X1Ơß=Û¥%K+R¤ˆè*¾;w‚V ÈÿF²́¾óç³{Ư?mh¨è³N˜IoÊåËZç(ưûă«èÁƒ·`èë—,ü3¥~¥K—®Y³¦´øêƠ«Ï?ÿ<}úô:tđ÷÷Ï™3§››Û¹sç nû×_(X°àĐ¡CÇŒS¤H?ưô“Á·oßvwwwuuíÚµëøñă+Uª yóæfפ‰WOttt£Ft÷_GUµjU=zô0̣¸íÚµË;w"Wی߈4ûKÄÄṆ̃̉́“‰O=<䜣lY îxƯ:YM®\‚O׿½){÷j³fM0}¬V-ŪëﯰråÄ]¼ä²̃?SQQQQQQ©s¬÷ïßGGG‹:S½Äq„ V­Z¥[¼}ûvæ̀™}}} nëăă“={ö—/_êĂĂĂóæÍ›PæÔ¬Y3;;»S§NIkzôè`÷îƯ¦פ‰WÏÊ•+Hk¾₫úk7nÜ0æ¸L-ˆ‰£å¥Ù&5œ8¶k'á°œ̣å $Oÿư'̣\—̀7eâÄÓÇeËR¬̉3ề:YƯŸ©üùó2dÁ‚...vvv%J”5jÔû÷拾gÏ.Y²dÆŒƯƯƯ+T¨°nƯ:½mOŸ>íăăăăăcLyÿáÇgÈ!]ºt*TرcÇÇG]´hÑL™2Ơ¬YóêƠ«ºÂ‘‘‘“'O.Z´¨““S̃¼y{ö́ùèÑ#‹œ²^âèåå•#G˜˜iŸŸŸƯÇơ6|÷î½½½ŸŸŸreÇDFFÆ?kÎ;`„ &×Ô‰WOåÊ•óçÏŸPŸäq™8ZÛ8¥°+ât¶\»F§OÇYsđ ´Zxz>åT1a´Źßoà¥>} Ñ௿Rà¨Ø»7Îÿ-úb¤ [¶l4hPơêƠG•5kÖéӧשSG«Ơ˜8qâ°aĂ²fÍ:jÔ¨~ưú½yó¦S§N₫ù§´mhhh½zỡ¼y£kë–dùuëÖ­^½źر“&MºsçNëÖ­kÔ¨qđàÁ>}útîÜ900°C‡º’~~~ß}÷]]̀ù%‡ß”÷ïµ¥K¾ûxáBÊÔ^ï0½z¥Öe³Œ„₫L%̉4u₫%$₫ü~øái͈#lذA«Ơ,X°H‘"?~Ô½ộåK‡₫ưû+·4i’t¿*Ẹ́éÓ§ ̉-Θ1@©R¥>|ø [£k`÷úơëđđp{{ûnƯºIµêÙ³§‡‡‡Ál¦R̃q¼qă€¡C‡* ́ß¿À²Do°¯^½züøñ_|ñEÖ¬Y÷íÛg̀qĂÂÂ*T¨`ooăÆ “kv%ăWï¥]ºt)_¾¼”½äÍ›÷رcF—w-ˆ3Ç¥˜  /./9c‘½/  8k8ohúô8jÔÀ‘#q^*]H‰K¤ƠÂÛ[ ç§Ÿ°|9bbD_ [æááñÍ7ßH‹&LX²dÉæÍ›ÛµkwêÔ)GGG‡ØO´°°0‘‘‘Rá9rŒ7ÎÎ.ö![’å+T¨P´hQ]́ëë  }ûöé̉¥Ó­©]»ö±cÇ"##]]]5Íßÿ}ï̃½|ụ̀X¾|ụ̀åËăW>**ꯄï7kÖ,ñs×ƠÍƠƠU¹̉ÍÍMª|B&O|ëÖ-uêÔÑƠ0q‡îƯ»÷­[·–,YR¸pá‹/\³+ÿ¸z¯¾zơ À5kZ´h±zơê‡dª|øP¹R—)æÎÛÔăR2±W5Q X²D BÆŒÉÜŸ2k,S†Y£±V‹ï¾‹³r₫|h4xö̀¢GR¾%›6¡{wѧnƒ>}:gÎiqÊ”)¯_¿nѢŃ+VLziëÖ­ Ưá3µ|"‚ƒƒ+V¬8kÖ,Ư¢]Í5¡x–-Ñ=ªNˆ1ÇêƠ«×Ư»wẃØ¡[|̣äÉÖ­[ëÔ©S @½’_~ù%€•+W*ÏhơêƠ*Å›àT«Ơ92O†rïưú¥æÙ™Êê₫LåÏŸ?GéÓ§oÖ¬Ùwß}W§N•*U¾wï³³s̃¼y¿ưöÛ… v́Ø1GY³f-T¨ĐÎ;uÛ*ç#1µü… ,_¾\Z£éæ¿ÿ₫{ÿ₫}‰%́ííÛ·o?uêÔ.]ºdÍ5K–,ùÙ?sL©R¥\]]¿ưöÛéÓ§+V,S¦L'NœĐ½:mÚ´̀™3/Y²D·¨»ßY¶lÙ1cÆŒ;¶B… † ÿ(W¯^P¬X±nñüñÇIWñ•Ḷ¸z>}Z¢D‰ôéÓwï̃}üøñåÊ•0räHc«e¯j‹bâhyiö‡IÍR5G9RÎj×NæÎ”©HÅ©w© ơÇHZ¹R?w¬SÇ̉ÇPî}ذT>AăYƯŸ)]2X£F 77·¢E‹>üƯ»wºW+W®́ââR¨P!??¿§OŸ._¾É¤—8jµÚ—/_öêƠ«páÂM4QN©7qâDsçÎƠ-ÆÄĬ^½ºB… îîª7nÜhđ(¿ÿ₫{B÷•¦L™’äqă3²’ÆWOXXXŸ>}¼½½]]]+W®üË/¿y\-G‹̉hùĐË̉¼¼¼‚ƒƒEׂâ I½gÊçÊÉûưRî©J;–Jg:RơMQpr»wqÖXø¯ ̣m+XP¿ƒ·:XƯŸ© ”.]ú×_]‘ÔS¦L™̀™3:tHtElAûöí;P3~#¬î—ÈRØÆ‘È¢­Ñѳgrö¤L?ªW·µ¬Q ·o±jUœ5 N²Ü”yè;øăÑgLDd1L‰,jóf964°‘”Y£¯óđ„d)]»êßeụ̈Kôéc¹|ø ÇIu˜%JÈ“'O6mÚtŒß“á̀™3›6m̉MfHÁÄ‘Èr¾üR'O6{7z]r}^6J«EîỤ̈b@ªW·Đ®Ó¥‹3"¢̃XJdº Äïló®]»Ö®];©×6™aÅíÚµ;qâ„èØ¶q´¼4ÛîAÍR©9%Z7₫ư7ªVM₫n¬€¨6z&NĤỊbΜø÷_ íÚË 7nÄÆ¾¾ªúÀ?SDJlăh<̃q$²åDk×½eÖøè‘è“J&N„²ÅüÇ–»?¨üP9t[·>W"¢äbâHd ÿ'OäÅǸÛ2e™<Ù³‹>¯´!wnư;»Ë•ûmÓFô‰%G"K8P÷́1o_}%Çụ̀aÜ8Ñ'•ƤTî¸xq ́”ˆH &D–pá‚×­kÆ6nẠ̈âƯ»¢Ï(M̉jñÙg̣¢ẻ¼~ưP¢„¼¨l‹@Ddm˜8%›²ÓCƒæí£}{9¶á1ê÷́Ê——-“;^¾,ÇÿÖ­EŸ%‘™˜8%[‡r¼~½;Pf'«W‹>4ïÔ©8ă¸[&wT~ضMô)™‰‰#Q²=~,Ç™3›ºuçÎr\­ºt}:l܈¦MåEËäÊ6 åʉ>E""s0q$Juë䨬9•;8rDôéĐ'¿ÿ₫ưåE äÊ^SgÏ",Lô)™Œ‰#Q̣(o>Ç`ÆŒr ú\(®E‹â´Yµ@îxø°{xˆ>?""“1q$æĐ!¼}+/öê%ºBÏÎ(ZT^L—.y»«Q2È‹+W>?""Ó0q$J†™3åØôqkƠ’ăçÏEŸ % (HNö¢¢P¤Ḥv÷î÷è!úäH½Ê”)£Ñh4M‹-D×Åơë×OwóäÉ#º.6‚‰#Q2Œ)Ç“'›´é€r\©ÜƯEŸ %L™́Ư¼‰zơ’·;åp<-[>9R¯bÅ­[·nÈ!ºÅW¯^ơíÛ7õ¼...Ơ«W?ỵd"Û^ºt©mÛ¶Ù³gwqq)W®Üœ9s¢¢¢̀+l̉qM*,©^½ú$åœñ†ÄÄÄ,\¸°T©R...E‹1cÆÇ“ÿüóôéÓwèĐÁßß?gΜnnnçÎ3¸ííÛ·ƯƯƯ]]]»ví:~üøJ•*h̃¼¹…M:®I…%çγ³³›8qb"e¢££5j¤»ÿ:jÔ¨ªU«èÑ£‡‘Çm×®]îܹÙ¿¿iö—(­~d¥¤4ûäf)’£ *ö/Zd̉¦Ù²É›₫ø£è«#ˆƠ%Ú¸ù̃ñăÉØÑ5̣RÿD¬÷ÏTTTTTTTêëưû÷ÑÑÑ¢ÎT/qœ0a€U«Véoß¾9sf___ƒÛ6kÖ̀ÎÎîÔ©S̉=zؽ{·©…M:®I…?~ü¸gÏ &dÍ@â‰ăÊ•+Hk¾₫úk7nÜ0æ¸L-ˆ‰£å¥Ù&5K‘ÅÜ›F§O ¿ß¤ Ö˜8₫û¯å̃;åöïO屺?Sùóç2dÈ‚ \\\́́́J”(1jÔ¨÷ïßKfÏ]²dÉŒ3º»»W¨PaƯºuzÛ>}ÚÇÇÇÇÇụ̈́₫₫₫ÇÏ!Cºté*T¨°cÇ?=ºhÑ¢™2eªY³æƠ«Wu…###'O\´hQ''§¼yóö́ÙóÑ£G9e½ÄÑËË+G111̉???;;»‡ÆßVWIåsçΘ0a‚©…M:®I…ÿûï?åóÏÄÇÊ•+çÏŸ?¡<>Éă2q´ ¶q$2KLŒ;9™´©rF;ÎIm]ræÄôẹ́b²èyñB¿úJô™Y-[¶ 4¨zơê£FÊ5ëôéÓëÔ©£ƠjLœ8qذaY³f5jT¿~ữ¼yÓ©S§?ÿüSÚ644´^½zõ¼ÑµuK²üºuëV¯^=v́ØI“&Ư¹s§uëÖ5jÔ8xđ`Ÿ>}:wîØáÓ|Q~~~ß}÷]€*Uª(3̣*Uª ễ½{ — bâHdºÀ@96z\Ye֘ܤIªVEŸ>X¶,vQ£17w,ZRç€_5©åƒÅÅQGOܵk×>~ü(Ưí{ûömPPPÍ5;¶sçιsç|øP¹R—)æÎ;åK±#‘‰”CH˜̣WIùœz÷nÑg‘° u@‡Æh\%]áª&₫¿ŒÈèŸhÑ ­₫Â_É?¨•Zº3Ê‹}ú˜µ—«Wå˜É$́éÓ§s_¿¦L™̣úơë-ZSË'"88¸bų>µrµ³³«Y³&ϲ%ºGƠ 1æX½zơº{÷î;t‹O<Ùºuk:u ( WR«Ơ92Oàƒ̃ú¬ÈzGµĐ₫‹k †¥÷=¾¿‚+Zhâa´1Xf2&k ©“»N0lçA¯/J•’Û¶5}Ë—ËqUkO14hĐ R¥J¢k‘Ú®]»Ö®]»YæÏMDX±bE»víNœ8!º"¶ƒm-/Ͷ{P3‹5§3½£é[XLOôü?Ç_?³‡"U®ÚqĐàK.pyˆ‡™)U/MQ¾Ưÿ₫‹œ9“±}J₫¸đÏ‘Û8w‰̀R²¤1¥”· 6lH½Úư†ß4ĐÄÏoá–ÚTÎÀ-´7p#7rë½pW¸fA–wxgÖ¾Ơåøq96g̉±cå¸S'ÑgCD¤‰#‘Ñ–,‘ăáĂÙẩ%9n×.•ªÙ}[@ö‘íØ®…¶ ¥R% )ŒÂ¡5˜¹¾À '8yÂ3Ñk˜|•*Åé •=»‰ÛO™"Ǧ̀fID”:˜8MÙÀ±K—$‹gË&Ç3f¤R5Đ,Ă2剘¨…6~*)Đl̀ÖB»ê¿UzëŸà‰̉#½9;U“'åøñc¼xaâöÊ™ĐgÏ}6DDq0q$2Ú;&úTë,WpErM!̉B;̀Ưeʪ₫¶ºڽث·₫#>j ™†i¢+h¾eÔ=K7^·N¿ùFô©ÅÁÄ‘ÈtF4^Û·O}}S¼F}Ñ·$â4» Fđ-ÜJưkcª:¨£…6₫„×ßâ[ 4!]Asôî {{y‘Ïœ‰Èf0q$2ΦMrlDÇæÍåø·ßR¶jz§5Đh¡-‚"©{’¥!j¡ ư¹¿ ¢` ”];sDEɱɽ\”?l­[‹>""G"ă(8’dñÈH9vuMÁzé=„A1ˆIåkc)Ă1\ í0 S®¼«hZĂụ́§&MäXÙp1i_-ÇÛ¶‰>""™ƒè Y‰3gŒ/ûƯw†c‹Ó˃l]7 …Y³0+r=„<Ê6lˬOñ4;Nmü!˸~½‰¬Ë•“ä₫ù'NWm ṇ̣̃|ˆÈ qpËK³ƒ‚ª™—R'§8·-‹”ÅY™5ºÀå ̃¤Ô‘RF’oÊ9œ+‹²z+wbg4]wc-]~ưbằ™Méaưï¿ÈưìË́ÙñèQªƠÙb£å“åđMQ¡4ûYÏGƠDFPvuIªă«Wŕ́œR5Rf9Ăê²Fc|/´ĐVGuåʆhèÑU3Vß¾rụ̈%NŸ6zKe,½ùΉˆÄaâHdeǤÇTè£̀½à¥|¤k{¨EœÛ¶—qYÍ\]5£Ü¿/Ç*˜²åàÁr̀‰H˜8a¯b¬Á¤ºº>,Ç_}eùº(³Ær(w×Å^›Ô¡…v *×”A™₫è/º^IË“ÊÆ„“&½åܹr̀‰H˜8Ỷr\¿¾å÷¯̀}á{Æ?û´z ° qZ—.Á’ È º^I»®Èí'N]"¢d`âH””³gåxÀ€Ä˦èsjeÖØMâ èK“ڜअ¶ZIk>àƒ—x)ºjIª˜Û„–¯Đ‘ˆT†‰#QRLià-Ç,z/̀rºá Ïßñ»èë"̀Vl½‹»Ê5îpŸ…Y¢ë•eŤ:å+p@G"R&DIÙ¸QóçO¤à¨Qr‘‚OÈq–,;~(B{£·´È¬QÏ/øå(×h ùˆ¢ëe˜²É¢4¼w8 #© G¢DƯÀ±Y39¶`·˜¼È+Åÿ€O* ¨…Zzùtz¤ßư¢ëe€²Éâ¿ÿâĂă6ă€D¤L‰µx±ñE"O”ăjƠ,spåƒ×I˜T&¶h¡-̣̉bÔù)9M¸¹₫øCsä0nèHDªÁÄ‘ÈFŒcå­ÇäÈŒ̀R\ •Ô™©Ê)œúr^5“k¢¦èJék̉DŸ?3A%‘ú1q$2Η_&̣âºurl‘çÔ0àäœâ8‹>ëđ#~TTˆ@;ơư•SÎ|ńMÇ~ưäø;~… "aT÷'5…lÙ²¥M›6eÊ”©R¥Ê˜1c^¼x‘xù>üôÓO-[¶,S¦L­Zµ|óæMÑ'A©NùøYÙ<-ËvZGøbÈÈÙ!Æ$MÑT9¸ZµuµVNDùö­q?<Ê&“'‹>"J»̉Dâ8gΜqăÆƯ¾}»|ụ̀...Û¶mëƯ»÷Û·o*Ưµk×üñÅ‹ƠªUË•+×={5kvút̃`óf9nÛ6¡RgÎÈqăÆ8l&d’âƯØ-ú*X7¸éeÛjË“cco:©€í'ÁÁÁ»wïسgO—.].]ºô£²·l\›6m:wî\ƒ öíÛ7₫üµk×®\¹À¸qăDŸ ¥.eâ¨%®åxáÂä³%ZJq)”ª‡z¢¯‚µRsîX¥JœEå O R ºr¥è3 ¢4ÊöÇÍ›7ÇÄÄ 2$[¶lº5£GvssÛµkWLLŒÁMÎ; k×®º5•*U*V¬ØƯ»wŸ?.ú„(ưû¯1¥”ÓyäË—¬̃ÄÍ_ñ«´xD_릅¶*I‹ªÊ•S ,hÄÊɈ”_VˆˆR‘í'§OŸ¶³³«Y³¦´Æ̃̃¾zơêaaaº1¾9rPæˆZ­öåË—vvvR*I¤ó́™—,™Ü½A)¾ˆ‹¢OÎÇñ6h#-j QÉ„zƒ;)ïn'̈́鮉ˆ,ÉÆG­V{ëÖ­,Y²d‰;•G‘"E„††ܪqăÆS§N=qâÄÛ·o>|8~üø´iÓÆƠƠUô9‘-[&ộÖÏ‚É:ˆ̣̃X}Ô÷èÓ¶›±y†H‹9ă,ο;˹vMnC« œ»èđaÑƠ'¢´ÈÆïŸEFFFGGgΜYo½››ẫSṬ̣̣Z»vm·nƯºuë&­́Ô©Ó£§ọ̣̈̉[³{7»8ˆôàÁS7q̃³'Û§øIÍ 4CÛ´©€çÍbTc5CN9:™CîĽ8dq̀Ư—•0ăM1›?ü3ºeü!˺År(7́Ű/?đut ÿüƯutL¬½Ưˆù6lĐÅz÷₫wÏ”¨Uj¾/d$¾)ÂƠ¯__tÔÂÆG]×iggg½ơ...^%0öîëׯ§M›áíí]²dɰ°°cÇưöÛo+V¬S§1Ç }꤯@¦mpèf8$ÇeÊdú! BnæöO= x¹J©,9ẀTS1Ơ>íĐN·8Û}vs÷æƠ`¡I~̀µs'6Œ›7Ïoü_ô7o¦ÜƠKÍ÷…ŒÄ7E¬øëñï¥6₫¨:sæ̀&2^{ đđp|ºïßÈ‘#Ï=;zôèíÛ·O4iáÂ…;wîtvv:tè;wDŸ¥e£³²ÆQ£ä89ư©á(ÅƯÑƯi"kL}mÑöäpª£ºđ‘Ơ4ă7ŒØ bE9¾{Wlå‰( ²ñÄÑÁÁÁÍÍ-₫Åׯ_úY+=ỵäĐ¡CŸ₫y÷îƯ¥•9sǽß¿ÿÇươW}2c†wébæNàÀ{¼—ÆÏ¢OË–UA•‡x¨\<…Sb«¤ü)jƠ*©̉Ê/(ƒ‰­9¥A68đôô Óe]K4OOÏøåĂÂÂäÏŸ_o}Á‚<}úTô Qª3ôsbA_AHä^$cOd”È ¹cÜ—ø̣Î%cÉ¥œè|ûö¤J—-+Ç;v¬6¥M¶Ÿ8Ö®];::úèÑ£̉­Vèîî^¦L™øåóçÏoooóæM­6N+u]û†Ï?ÿ\ô QªxüX˜lpÉ9₫₫{33#¥¸ÊeFfÑg&äFneߣ²({ —ÖGy»z„¤JgÏ.°ªD”ÆÙ~âØ¦M;;»… êÚ5xö́Y«V­̉¥K§[¢ë¶æääT½zơ{÷îÍŸ?_!üæÍ›‹/NŸ>½¯¯¯è¢T¡là˜@⨈güx333¥ø48§eêÉü7!O@_ ¥®âª¨Ê¬^-ÇI Qûäï/ªÎD”6Ù~â˜3gÎ#Fܹs§iÓ¦&LèÖ­Ûœ9s¼½½{ơê%• ¬_¿~ß¾}u‹S¦LÉ‘#ÇâÅ‹4h0tèĐ.]º4õüåË—£G.T¨è¢T¡L«V5X$‰‡L ©q,Æ>ç4çs|„ i±JlÄFQ•Q¾eK¢E[·–ădJDd"ÛOôèÑăÇ,P ÀÎ;Ÿ?̃©S§5kÖÄÜQâáá±sçÎ>}ú8;;>|øÁƒ5jÔØ¼ysÇEŸ ¥–cÇ}çN9îÑĂœ#<Á“˸,-NÁÑçœEÑ+¸"-¶G{e×™Ô¤œ0{ÜDDâiôẒQ̣yyyqGµ 1m4åø;†~G „4Öwd$œœL®’r̃ä#8"|@ÁÔg̣›’b.âbi”–µóW1C|ø_»†bÅ.:s&F~j;{6†µ`5Ôó¾„o ¥ÙÏz•̃q|ÿ₫ư­[·N<-º:”†éÍ(ü‰r†3²ÆµX+Å! fªR ¥Öc½´῭éSÓ… *•J´¨²'ö°aBjKDi“êf9zôèâŋϟ?/Ư M—.]­ZµüưưÙ£™RÉ9Åà,†*§®]Ûœ#tÜö̃‰>aB{´¿‹»c;­¨Ô¿ï¨¼Åøñ£è+BDdˆºî83ÆÏÏïܹsÊè?~ܳgO“&M6nÖn̉–¤ºT+ûS›1aLGÈe›¢©è³¥XßâÛ̃è-- ¹ï¨üÑKàf÷'ưúÉño¿¥~U‰(mRQâ°mÛ6åL™2i>55‹‰‰ù₫ûïO<Ç¥ ÊOoCí³X£hQ“w¯|*ú;~}¶$[†euQWZLưܱM9>>Ѣʯ,½{ƒˆ(U¨%qüđáC@@€..P ÀÂ… /\¸pæ̀™ .,Y²D7kKttôºuëD×”̉eÆx¤î ̀ÉNñK·‹DŸ*éÛƒ=…QXZ̀€ ©\モă₫ư.g§øëÍ­ˆ(µ¨%q|̣äÉ›7od̀˜qÍ5uêÔqrràèèX«V­5kÖ¸¸¸8«²‚H„É“åØÔᙲå\ô7m{J7p#bgø€Ê<2L$ÇÊÙ‰ ¨TI#"R³’D”f©%q̀;·n`EooïlÙ²é½5kÖ’%KĐ¥D©¤qăøë¦(Æ[T~Æ#7rKñoøMôéQ‚>@¾±| ·”™R<0<I¸œ̣椩?‹DDfQKâ ZµjîܹóAù,đñăÇÛ·o¨P¡‚èj’­ûóO9nÛÖ‚;~§ïñ^Zl†f¢O•£¼7¼k—biªúÀ9N¬Û~ưúrư¬ê¢Ï“Œr ·>Ǵ²¥Q:Ơw\¸Pơ©S'$Ø-°uklƯ߸"E^+"J T4å ———[©pŸ4; ‘™0aW¢“ &5a‚2 ƒ”8¦Í ă³–YÔÖb­²cªåFư°]¹‚’%căđË/É?®µ¼/i ßJ³Ÿơ*zTM¤.îî–ÚÓ=²¤ë¸.Ưk¼†kßâÛÿá)t¬ßG³O›×®#‰ètû¶èkCD¶Œª‰>™9SăÎc4c†ÙÀ±&jJñj¬}ndyÊÖÓ0í$N¦Đ6•ă£ 5”ådƒD”*T4£ÎÇoß¾}ï̃½èèhƒ6l(ºd£̃½Kèå´Ô†{'Ĺ«rÂ:²%ÿâß\È¥‹+¡RÊu”É—÷îÅÆ¿ü‚ă•˜0A^;m±íp‰ˆL¤¢ÄQ«Ơ®^½zÖ¬Y>|H¤GJ}oßV~$FJñ ]}J)9‘s –Hj I¡Üñî]yêêN %:Èk'MbâHD)DEª·oß₫¿ÿư/ñ¬‘(5,¨\zöLă nØLÈO½b¡èó¡Ô}¿Ä—̉bq]£Äî%“Ç5Ííísæ̀™ËÑƠ$¥œ ¸n]å+¦Î4¸ ̣ơåPNô‰QS¶n ḄkƒÍ-ÇC‡*¡üZ£üºCDd9­6eG¯5^é̉¥ß¾}koo?}úôÚµkg̀˜Qt̀äåå,ºGHHH+±w/êƠ‹·mCË–̉+Å8}Æüº(öKéÑ¡­Z̉oUQ¾ïOñÔ–?Dâ?¨Y368 ˜w{_lßJ³Ÿơ*ºăX°`A^^^M4±̃¬‘¬Ỡ½r\§Ù» E¨è3!1”Ư¡²"kJÂC‘‹>}ïå5äx!HQPQâX¡Bõ¼]J“öí“ăL™¤đÂyu#úF+ŸMŸÂ)ÑgE©§:ªwC7i1%f”Ù¾]÷ĉˆRÇ~ưú,X044TÙØ‘(•\ºdpµr c8>Á).̣¢ÏRƠJ¬T.ö@Ëî¿Z59>fp*"å`Q/¾DdƒÇ3`@œ‘J<<<îܹ3uêÔ7æË—ÏÎÎ@^»hÑ"±u¦4å÷ßå8ngk ‰/€™-̀Ȫi¡•î5®ÄÊJ¨Ô ½,¸ÿúơ±{wl¼s'ôG'›0ëÖÅÆ âßE_"²5‚;ÇxÅŸĂêo‹f̀ªỶMË¥~9ràáĂø«aDÏv‹1‰­¶÷§ÙMZ´́OÂÛ·Z€;:aÔÔÎ\ñØêûbƠø¦¨Pư¬WÑ£j"UPôŒ9wN^=hPÛMÁ)îŒÎ¢Oƒ„ɬÓ1]Z´lcG''9æpD”ú?ªîß¿¿è+@w`Å sæÈ« œ§0ă¥x ØN7M‰‘?âǧˆíùÜí7`ƒ¥v>n¦|ú’̣ư÷øî»¸/·k‡căĐPäÉ#úb‘MQÑ86#Í̃¾V³$ô|÷&O?F¶ØçŒÆ?ô›…YĂ1\{Áë:®‹>c+`óOß”÷ÿÁ?PÁb{Nä'óÔ)|ùi&›aĂ0k–©;·ù÷ÅñMQ¡4ûYÏGƠDqÇâÉ–ÍŒHY#€¿ñ·èó!UP꩜–0ù́íå8**îké©̣9‘%¨.q¼sçκuë={àùóç£G®]»v‹-/^̀i¬)¥œ<Ưóçrܤ‰ñûÂgøLôù*äFîa&-Z°±£±:̣YºÇơë×7nÜx̣äÉ/^¼0hĐ _ươÁƒ×®]›7o^Ï=ù`Rñ •Ă>sR…YÊ|q’êceœ¦MåøÏ?ă½ü¥%ïn)©(q¼~ưú÷ß­[¼té̉™3g”N:µmÛ6ÑƠ$›ææ&…ÊÄÑ×7±VcµÄ@Ñç@êƒ)^ˆ…wpÇ"»U&‡úẁ•_t̀±ˆÈ %+V¬ĐƯP¬R¥»»ûÁƒuë}||¾ÿ₫û 2Ø®|BCdq.ƠFm¡œ¡¸,Ê>R£ó8/Å…PÈ"ûT₫-¬R%îkmÛÊñܹ¢ÏˆlÇ   ¥J•úùçŸ=<<9¢[?tèжmÛÖªU ÀÍ›7EW“lÎÙ³r¬ÄQR²db[×C=)̃ƒ=¢O†Ô¨4Jw<Ó¹+\“¿Ïœ9å8&&árw,sƒ“ˆHGE‰ăƒøøøxö́Ùµk׸ºº~ùå—råÊ 22Rt5ÉǽƯ+ÇŸÇŸ–×%̃Àñ=̃K1»ÅPB”í̃àÍ,˜R5å܃Êñ›̀¦üzÓ¥KÜ׆ ‘ă;DŸ:Ù%ỵäđ÷ß/Y²ä§Ÿ~̉­¬]»6€û÷ï:t€'¿F“Å:Ư•+Fmº ˤØ"©Ù¶UX%Å–P°2å}ræHD–£¢Ä±iÓ¦̃½{7wîÜéÓ§¯^½ú‹/êׯ¯Ù±Zµj¢«IiK¦L ¾tr_Vox‹®)Y®èẒüíĐ.™;~Ô[±p¡—)cx£'>yÇ‘̀¦7öç8Œ3s?Ư|ÿ½âæHD–¦¢GƠ₫₫₫²gÏ~ëÖ­ºuë+V̀ƯƯ]£Ñÿ¾hÑ"Ñ5¥4m*¦JqUT]²nÊÖS1Ơ­êË#FaÎŒ+út‰Èê©(qÜ¿¿¿}ûöܹs¢kDiI­Zbbä 6¯¼-tGE×›¬̃z¬ï€ºXy}­–-“‡ß:ÔĐíŰ0Ñ'JD¶@Eª‰RÛƯ»r\§â§œÈDÔí•ă€ö†9y+GÿV₫£paÑçGD6EEwû÷ï/º ”Æ({ÆÔ©ƒ¸ÍÀZ´0°EGt”â Ø úÈF<ÀéơOøi&fºÁÍÔ¤K¿É.0t(¤?­ë×£CÑçJDÖMEă8ÚŒ4;¶“­MlƯkµ0bØ;ßhANi?ö×AiÑŒŸ®!ÍÉÚ£V¬øô‚ôc]®NŸNr?|_Tˆo ¥ÙÏz•>ª̃³gÏÆĂĂĂ£¢¢^½z•ü}éSâ—ÁDoâ¦{ÁKtíɦ|…¯Ê@îÆß-LƯC»vrüóφJœ9#ú,‰Èê©èQµÎ¶mÛ.\øđáCƯbåÊ•]]]}}}»wï>hĐ ø¬‰̀÷ Éöír¬œ­M̉m¤x ¶ˆ®=Ùs8'Ử₫ ¿Ư­Ïñ¹I{ǿ3¹̀Û·pr88 *JôÉ‘P×ÇiÓ¦3FÊ%‘‘‘‹-4i’è ’-8P öŒ¹ˆ‹R\%E×—ḷg¬0Lîײf)̣)R₫4ˆ>E"²n*J¯^½ºjƠ*]loo/­—î2nذá´ tˆLV±"€Gäñomÿ†ß¤¸%Z®1Ù&øÔ…<ƯKMÔ4ió† åøÁƒO‘²C̀ß‹>E"²n*J—.]ªƠjí́́Æö́Yi½››Ûüùó¬^½Zt5ÉV<~,Çʙ٠|N½›E×l–rË@^ÅU“6÷ô”ăØÔ¥KË«”÷$‰ˆL§¢Ä1((@Æ ;uêäÛ6'V½zơjÔ¨àúơ뢫I¶BÙ3¦NeÙ©“âQ[‰ÙĂD)æ:ä?t%P¤m—-“ẵæŒID”%aaaq páÂ={&ºd+”‰cƠªK—ÊK}ûê—UN3hö„ÂDF̣‚WmÔ–ë¡ñÛ6k&Ç+W~¾üRô9‘PQâèååÀ`+F­V{êÔ) ]M²ÊÑ¿eâX¥~Ye²8“EWlß~ÈS°îÅ^åPPIʘ1̃*å—¡ơëEŸY1%%K–p̣äIÿcÇéV†††9rdàÀºÄ±xñ⢫I¶â¿ÿ^"OÙĂº¿¡̣iúÀRƯºÉ«”_’ˆˆL¤¢Ä±OŸ>ö́ÙÓ³gOƯÊ=zôêƠkÿ₫ư\]]9-!¥´¬Yơ×pAÂ>ƠPMZl‚&Fn¨l¤;o^¼—}fDdÅT”8zxx̀5+K–,_uuu>}zΜ9EW“lN©R'NÈKñ8®‡üh¯ÚµO"K8‚#R¼;îáèQZ§¢Ä@Å÷íÛ×·o_ooïŒ3pvv.^¼¸ŸŸßjƠª%º‚d+̃¼‘ă:uéĂiI¬Ó›}çG~#·Z¼XÇwFBö2$"si´Z­è:$(<<ÜÅÅEt-L–f'>W³8ö·mCëÖ±ñ=ẓ8z¿¥QZjjv}à#úTl‡₫›B ¨ˆÿà]\E‚aÔŸå öZ-ˆ5c—'OƸàû¢B|ST(Í~Ö«ë£$::ú₫ưûW¯^½ÿ~tt´èêÍQv©Ntôoef$ÄIœ”â¸ñÒÙKr̀₫1Dd.Ơ%·nƯ0`@©R¥êÔ©Ó¥K—:uê”*UÊßß?$$DtƠȆüóÁƠz£ƯÂ!)Î́¢+Mi×bÈÏ=áì&Ó§ËñŒq_û÷_Ñ'DDÖJ]‰ăÆ›6mºÿ₫?J+?~ü¸gÏFmÛ¶MtÉV\”ï#₫̣‹¼Z¯cWt•bSg~#² ~è§‘g$¹ÉÈ‘r>>́ííMƯmppp@@€§§çîƯ»ö́ÙÓ¥K—K—.ưøă ṃêƠ«Q£F988¬]»vÓ¦M6lHŸ>ưøñăcbbD_'J6Å vOËÖ—âöíă–‚\LùiM$Đ[Èßx¿Å·¢«CDiÇ2eʸsç·ô^ºsç̀«zóæÍ111C† É–-›nÍèÑ£ƯÜÜvíÚ•P¸m۶ׯ_÷íÛ·lÙ²º5>>> 4xö́ÙåË—E_'J¶#̣lKŸ´”bås¼­Ø*ÅÊ[DÂ)o4:Á)ñÂ₫₫rüË/À§¿iDDæQQâ8bĈ¼yó†…… <ø¿ÿ₫“Ö?ỵdèĐ¡?¶³³óóó3u·§OŸ¶³³«)| ØÛÛW¯^=,,,¡®6GÑh4Í›7W®œ1cFppp©R¥D_'J6eâ¸;¿+ŸZ+ûS¯ÄJÑ5&’Â()~‡wʆñ)çªîƯ;îף͛EŸ Y±‡0 Πnnnÿüó‰'nذAZŸ'O¹sç–(Q˜ăzyéOj¼{÷œ” HqCwƯƯcBBîéâí.Û‘5v}§×BÂ8ø|P¾)dªNŸuZçºNgĐf¸~÷zB%[·öغ5vh³áĂ_È»28±ßâ›"\ưúơ“¿Û 8qLiº®ÓºÙJº)°_½z“7õ¸uëÖÓ§O§OŸ^³fÍwï̃mƯºuÑ¢Eƒ̃±c‡1÷Óæü•*¦× OÓ¿¿T`FHë׺®…«èªÛ.N¿k¶µX»±‰ă͇ÇWDEƒ%׬ÁÖOMv·lqWö Lèúó}Q!¾)bÅÿX‡(œ8öïß?E÷Ÿ9sfF©ÿØ1<<Ÿî;êÑuî0mÚ´Zµjéâ>|øpÛ¶mươWëÖ­Å^4²”¥vưñ©”²é—ZÑU#JÚu\/¢º¸*%ôs«üª{ÿ>ĐºµœH¾|‰xdˆˆ!8qk×®|ôèÑFéÖhµÚÀÀ@wwwƯÈ‘ñùúú®^½úƺÎ×:º±{-*ú"Q̣(Æâ‘”//ºVDæú 5B́·ŒÈhđơçŸË±bPàî]ÑƠ'"+£¢;§Nể¥Ë?ÿüóâŋ脙ºÛ6mÚØÙÙ-\¸P×®@@@À³gÏZµj•.]:Ưˆˆˆ©ÛZ‹-Œ7Nêv}ụ̀å+V¸¹¹Ơ©SGôu¢äù”8n€óøúú>|øĐÓÓóđáĂvv*ºj*///ă¨6!!!±£ }êó¤Q4ÓưLÄÄI˜¤[ó~øß®µ“ß²i.à&h¢WÀÉ ï̃ÅÆZEaÄưàû¢B|ST(Í~Ö«(?ÓMíââbƠY#Y…0ÈMÚ¶ ¤¬³F²:đA›¢iüʧƠă0Et}‰È*©(EëÖ­›ƒƒĂí۷׬Y£û d“ÚCLR9ô7‘ơJ‡t_C{ºjèèÙS§b¬èú‘URQÇ̉¥K5jêÔ©S§N]°`A¶lÙôFRÔÙ±c‡è’Ơú4̀Ó-ÈÓԬ ³0KZ3SEW”È›°i36ëâ#8̣r G̉›íØÆE׈¬ƒÇ7n,Y²D¿~ư:‘¡‰̀ô©Kuô[ Çp)–:Y¿ñwTÑÅ9‘SoXÇñă1ùÓp=?¡W/ü+V0q$"#©èQở¥K¥q‰RD¼Ñ¿3d]%"‹ªŒÊyGZ‡qÊW¿WŒ15ŸÚ<₫ö›èZ‘ƠPÑÇ3ŸÆI©X±bưúơ-8Q¬#GÜAAi…®Ơ—r~j̃n$kw÷¥ÖS1uJư`> ½è‘ơQQâhooÀÍÍmÅ*ªÙ₫°r?? îüÔlàH6`:¦Â(]¬7¬c—.X³&6̃‹ºu±Wte‰È¨èQuÙ²eäÈ‘ƒY#¥¨åđ“â¦+'²n#1R_áƠń–ăL!#=­̃¼Yt•‰È:¨(qô÷÷www¿qăF`` èº-{‚lÊÅuX'Å₫đ];"ËG¸7@)ΔI.sŸfĂZ¾\t}‰È:¨è̃̃?₫˜={ö/^ôîƯ»D‰‡ăY´h‘è’È’ú ´f扮‘e8Ă¹1ï@́øeMĐäOü©‹kÔ€ôơ<^^ƾ}¢ëKDÖAE‰ă={¤øÊ•+W®\]#²-áá.£¤´B×3&‘¢kF”"₫ÄŸR/™Øg8X¸%?ư ÄÂ}¨#º¦Dd5Tô¨(e=¸ ưüđ~“{ ‡è*YØ.́’b¸è‚%äûñ•è:‘5QÑÇ₫ưû‹®Ù´#G·Ku‘"¨̃̉bDW‘ÈÂꣾÜ^á•nqfèúÍäÏ»wcË|@úôø€•+ѽ»èú‘Ú©(q(‡₫–dC6Ñ5#&̣ëù₫X0ÀhLđèøT”ˆ ®;z˜5’e=ú'ÄÆ‹ùœ(Ö@ ”Η0£2m̃,º^D¤^‚;Ǽ|ù̉ÔM2gÎ,°ÂÆH³ fƠkÂÍ÷Ÿ&:×Ê}´PKϰ´‰íưƠ N/™B·q§`Töö‰®ÅÁ_J³Ÿơ‚Uùå—¦n’6ß'J–#GD×€H¥Îă|”‰]¸]íºÿêu]+"R-U?ª&²ˆơ¹b£ “¤•‹°Ht½ˆÄ+̉¡˜XaêX̀])"R/&dû–k?ơŒ™8QZÙưÍÚ‘­¹Ụ̂˜^Ă|°CD PK¯jFS¨P¡̉¥KûøødÊ”ItuȦ‚¯è*©ÚL‡q± rü3|̀—ë¼DWˆÔH-‰£V«½uëÖ­[·¶oß₫ùçŸñÅ¥K—.S¦L₫üùEWlE_yNêïđèÚ©ÈXŒ•Ḉÿuyû‘·‰È Á½ª¯\¹rñ“»wïÆ/9sæ̉¥Kë’HƯ¨à*—f{Z©S̀»öNéö§VvU•Gx”̣Ô\üQ₫²¨Pư¬|DZD‰%J”èØ±#€W¯^]ºtIÊ#_½zàåË—‡>|ø0{{ûÂ… ÿ₫ûï¢/Y“ăB>t#JBäĐ¼qÑf ×-vùà·&ưrÑ•""ƠQË£jnnnƠªU«V­nñ̃½{/^¼páÂÅ‹¯_¿}ưúuÑƠ$+³|£ ´øUZÓ}DWHöö™Wg}lO²µéW¬G"̉§̃^Ơ™2erqqqqqɘ1cºtéDW‡¬Ơ©sÀ’~̉NCdĐWS}á''‹v*₫€ "QTtÇ1&&ææÍ›çλpáÂùóçïƯ»¿ ûÊ™<K!?‰ +PÀnE÷˜å~º%-´¿â×h!ºZD¤"‚Çׯ_ë̉ÄóçÏ_ºt)""B¯€££cÉ’%Ë|âîî.¶Âd]Âuíµ*—Ö4GsÑ•"R¯ùđhƒ˜Ø/W-Ñ’½dˆHIpâX¡B…øƯº³gÏ^¦L™/¾ø¢L™2ÅspPÑmQ².ËuƯøœÈ8 îxGƒ_[HÍ‚£ñ́]/"R Á9™”5ê×ƯV̀‘#‡F£~úôi½M*Uª$¶ÎdEbGŸK̉È!ºRD*Ö³'Æ-·KĂWư…¿̃ă}d]3"RµǛ“ß²eKâ%Óæ°Id«W/ù¦ø­ƒ(Q~~Ç.\ˆḥ'₫l¢[çG>°&"ö [7ß_ c°èÚ©[¶lót¿&;ăCziơ,]3"R&d³ë:R×Ư+­i‹¶¢+E¤vvˆ‰2¼—VöGÑơ""Uü¨zǶ¹¦”²|91RZ̀ü¢kDd>)̣Ơưûñ,í+Ṃ^åOătröLD6@pâX¸paÑW€lÖÀbù6 ûSăMÛ¶ó&öÆUè·DJÏà̀]Üå0¢4ªÉf…„]WK‹ Đ@tˆ¬À›¶m‹ă¼\îŒ@ѵ#"Á˜8RàøNt ˆ¬„6cF¹ñ vùlYe¾8ăDWˆDbâH¶éÎàßJ‹ó&g]#"k2O1Acÿ;R<SEWˆDbâH¶iùr`ô4i±]hÑ5"²_~ÙÛ¥¥ âä‹đ]?"†‰#Ù¦+â,¾+_^tˆ¬‡ŸŸ̃1#ÅOđ䈮"‰ÁÄ‘lÓ“vó¥xêX¼«PAtˆ¬GϦb¬´bñb<Ái±jˆ®"‰!8q|ûöíÛ·o£¢¢DGG‡„„„„„ˆ¾&dæÉ-´Æü€èlÙDWˆÈzh4Æài…¿?²"«2_́ŒÎ¢kIDN+W®\ºtéuëÖxüøqưúơëׯ/úƠ»|Yt ˆlKt4ÆaiÍ:¬])"@đàïß¿°oß¾üùó¿yóF·̣ĉ‰lR©R%±u&ơuf JÆÆf^®‘µ©U vÁ5è¢[qàjׯ:¬ë„Nº5h´Đ®(¥*V+̣×¾ZµjO<1i“àà`6†———ú+iÛ́²j?{¦‹µ¹s§@]¬.!!!|ST(ö}Y¿;¾Dfw¼Đ­Ïï̃€©đZ¬•̣HJ9üeQ¡4ûY/øQulaM–'e±]#"kÓ¡€̀»ơïßÇÊ»ŒléH”ÖNGƠ¾}û¼yóf̀˜ÑÉÉI·2c¢D_1R»£8*ÅNÛ@ơê¢+Ed­*An;$ơ]́†n̉Êʨ,ºD”z·q̀”)ÓĉuñÇ}}}œ?^ôe!+Ö=r>}¿Ø¿8°Ơª‰®‘µZˆeqVˆ¿₫€•X¹ «t+OàD(Bó èQjPÑ8_}ơƠW_}%º"dƯng”ûT~²àG"³4ià œ“V́Ü)¿x §¤8/̣®+¥%Y²dY´hÑ¢E‹t‹111OŸ>Ö Adœ[¸%/¯œ ÿ@îÜ¢ëEd…zöÔư?'Jëbbbƒ̣(_rwoñ­ {&"«¥¢ÄQ'""bÖ¬YM4)]ºtƠªUK•*Ơ¸qă3f„‡‡‹®Y₫è¯XX,º:DÖ¬Y3Ưÿb ´n âîHñ4L3v·DdÍÔ•8>}ºnƯº7nÜĐ ñøñăÇ›7o®X±¢~ưúgÏ]AR»}Ø'ÅE/f]"[Đ¿Jñ’%q^‰™Ŕ7Ñ5%¢§¢Ä1<<|ĈÏ=3øêÓ§O‡!º¤^ođF^ˆr艢kDdă†c¸¿ÆëƯØ-ºFD”²T”8̣`- ]’â' ”ŒÉRü>]u"²<%NNN³gÏΕ+—ÁWsæ̀9{öl]ßj"=q‹-ëc₫ˆH··. m&ÅñŸV#îW¸çxÎa‰lG%K–ܹs§¿¿¿O¦L™dÊ”ÉÇÇgĐ A»vị́ññ1{Ï[¶liÓ¦M™2eªT©2f̀˜/^¿íÇË–-;bÄÑ—‡ŒƠ[b£B…D×…ÈväüpWÏ3\&̣ô°Ö‘Èö8ˆ®€>GGÇ 0@xx¸‹‹Ḳ÷9gΜ¥K—:;;—/_₫̃½{Û¶m»yóæ5kŒ¹©ƠjGÅ™²ƠlfÉ ß₫@_|zZÍ.ƠDÉW¤nÜĐ…_|!§Œ!Gư²Îpnæ¿á7Ưb]ÔƯ‹½¢O€ˆ,F]wơX$k đôôܽ{w@@À={ºtéré̉¥üјÍW­ZuêÔ)ÑW‚£œô ÓF¨…ƒ±‹L‰’OÑ?faG¹m£Á§Ơ~Ùm½ûâ©è "‹Quâh›7o‰‰2dH¶lÙtkFíææ¶k×.Ư؉¸yóæœ9s-*ú$È\L‰’O‘8V œ&ÅÛ·'¸E ¥8²‰>"²ÛOOŸ>mggW³fMi½½}ơêƠĂÂÂÎ%ÔH5räHww÷Ñzl‘üŒŸå…#¸¥S̀ZQ° è Y?e«?₫ø̀ˆ̃̉ƠQ=̣H‹UQUô9‘eØxâ¨ƠjoƯº•%K–,Y²(×ëf5 MdÛ ưïÿsuu}” >Pô¡5@ßt+DWÈ–-\(ǃ'X́>îKñßø[t­‰È2T×9Ʋ"##£££3gά·̃ÍÍ ÀóçÏÚđÂ… ?ưôS§N*W®|ơêUS«›Gi÷nK‘"¢ Dé­é9[CBBtÁƒD×”ôñMQ'ƒïKöêƠÑÅ_–»|®‹çÏÇ!! íªg½=÷èb 4wBîˆ>9kÅ_áêׯ/º jaă‰ăÛ·o8;ëOœªëvóêƠ«„¶9rd±í´ĐJqô}D”\ªK·mÛæëëÛ´iSÿ &<₫<<<¼fÍóçÏ×jµ¦îÍÁÁÁÍÍ-~̃ùúơkR?k¥S§Nmذ¡OŸ>¥J•}1( q†ùĐj”.­x™]ª‰R•+ưúÉKS¦$Q|0䆅À1ù‰¬›ºÇiÓ¦3æáÇzë###-Z4ỉ$3öééé¦Ë%º¦oñËß¼yÀâÅ‹½>iÙ²%€?₫øĂËË«qăÆ¢/Å:„C̣–6ºÿ÷ṃ¯¼’‰#‘i4æm7s¥øîÁÑgBDæSQâxơêƠU«Véb{{{i½æÓ_« 6œ>}ÚÔƯÖ®];::úèÑ£̉­Vèîî^¦L™øåóåË×(®ªU«È™3g£Fª3QúP4U₫ôœºçọÊjƠDבȆôQŒ`pëÖôẹ́̉ŒIlª|8P5DŸ ™OE‰ẳ¥KµZ­ƯøñăÏ=+­wss›?¾££#€Ơ«W›ºÛ6mÚØÙÙ-\¸P60 àÙ³g­ZµJ—.nMDDDHHˆ®ÛZƠªUgÇ5lØ0åÊ•›={öÈ‘#E_'ơä…矆[:¢¸™Q¤ˆè:ÙÅ0àXºTù·pÔ¨$6ơ€G4‘ë è“!"3©(q аaĂN:éơJ©W¯^5\¿~ƯÔƯæ̀™sĈwîÜiÚ´é„ ºuë6gÎooï^½zIeëׯßWùg‘Ô-ΰp;ʱâÖ2Y’²Ù÷̉¥¦nư₫âưØÿ_†È*©(q CÂ#.\À³gÏ̀Øs=~üñÇ ܹ́óùóç:uZ³fMüÁÉÄéÙ3vÄï–-GDW( ˆˆ0nœ¼bÉ’¤7úÿH±r^"²"*ÇÑËËëüùó[1jµÚS§N(hî rM4ỉ¤IB¯6lذaÆ ½êííÍqƠænÈ ÿe×ư¿o_`»yû#"#,ˆ;̣ ̃“'Ë]ªû÷‡²«µAP¡8_Ă5ƯbÔÙ‡}¢O‰ˆL£¢;%K–p̣äIÿcÇéV†††9rdàÀºÄ±xñ⢫IâĂ1)ÎxXÎøë(ÛM)úW‘e(Ûó́3'ç» y"®ưØ/ú|ˆÈd*Jûôéăáá`Ï=={öÔ­́Ñ£G¯^½öïßÀƠƠµÿ₫¢«Iâ)ŸSG¶ûÙp¡®]EW“Èæ(;V/] Àß_^±nQûø ?I±r^"² *J=<=gΜ¢«IâƯÄMyáq́`œÎÎÀ!ÅÈuë®&‘Íqu•ăíÛ̀›'¯Pf•‰đƒ_6È“/Œ‡ª ²&*JT¬Xqß¾}}ûöơööΘ1#ggçâÅ‹ûùù8p V­Z¢+Hâ…ÜoºÚëFRÜ·oÜggu8̃Qª7·k‚ă±ÏÄLÑ'"¨¨sŒ‹‹ËĐ¡C‡ <<ÜÅÅEtH]z¢§œ̣³”Eöí ´W$ ܺ&¢d©](Wtï•+că?₫@Ó¦FífVuC7]¬F9¥5©™ºî8J‚ƒƒ÷́Ù³cÇđđ𨨨ø“MS¥|N½z¦üÀëóÏ3gD×ÈÖ)ûÇ,[ @^Ñ»·±»é®NÇëŒÉ¢OŒˆŒ¢ºÄqÛ¶m¾¾¾M›6ơ÷÷Ÿ0aÂóçÏĂĂĂkÖ¬9₫|­–_IÓ:åsêÆà¼áD©®uk9^¶ €ƒâÁƠăÇ&́)̣³íïđè#"£¨+qœ6mÚ˜1c>|¨·>22rÑ¢E“&M]ALÙŸúgÈư©K–Œ[ÎĂCtM‰̉€óçuÿW&“Ê.jIùR̀ÖDVAE‰ăƠ«WW­Z¥‹íƒđi4±M6lØ`pxpJ;ná–û5«ëÏÉ1D©hÙ296²oµÎ R.ÎÅ\ѧBDIPQâ¸téR­Vkgg7~üø³gÏJëƯÜÜæÏŸïèè`ơêƠ¢«IÂÁ)nŒÆÊÉrûö₫‘g3câH”‚üüä88q»¢Ư¼iÚΔƯb†b¨ès#¢$¨(q аaĂN:999)_ªW¯^5\¿~]t5I½çÔ{÷Ê/ÙÙÊeâH”r7—ăÅ‹uÿÿê+yƯ‰¦ío*¦J±=8瑪©(q P @ƒ¯.\À³gÏDW“„¹ÛRœYơ_Vâ˜+—èÊÙ®F̣ø©X°@÷ÿ+äu]º˜¶¿1#Å1ˆ™‡y¦mOD©HE‰£——ƒ­µZ­n®ê‚ ®&‰ˆ@)n‚&wîÈ/uî 8zÔÔ}Qr}́"o^yƯ­[¦ïFñÀz†ˆ>+"JÇ’%K8ỵ¤¿¿ÿ±cÇt+CCC92pà@]âX¼xqÑƠ$1”ă~ÿŒŸç̀‘_ÊfQD©́Ë/ă¯kÑB÷́1y—³1[ÙĂHµ4êñÙ³gÍ5Käa´««ëï¿ÿ®₫骽¼¼‚ƒƒE×ÂÖ(?H´Đj+±?ẨªŒ¡·yHHHB­ H¾)êdÔû²iÚµ‹,ÀÀÂĂ‘)ŚºlÙLÓQGùk>“Çaœè‹¡üeQ¡4ûY¯¢;³fÍÊ’ÀLq®®®Ó§OWÖH)a!JqS$5£»T¥´¶måøÓưå±O˜³Wåëñ/ú$‰È%*V¬¸oß¾¾}ûz{{g̀˜€³³sñâÅưüü8P«V-Ñ$1f`†ÿŒŸ•wÉ«U\º$¯b—j¢Ô¤hqܵ«¼zËsvyC>°&R!‡äï²\\\†:tèPááá.Êï°”V…"T?Ăg³ă7pTv©æG¢T-[üû«VAl·K´ic̣^{¡×0 G¸nq4FOĂ4ѧJD2Ưqœ÷Ihhl–À¬‘lÄF)î‚.ŸŒR{|å … ‹®2Q ́•ö×_ñ_÷Î̀¿Á)é¢Ï“ˆâPQâ¸mÛ¶Å‹/^¼øùóç¢ëB*̉í¥x5Vxđ ^!åG"JÊÄQñenbAåà&YơR̀ÖDª¢¢Ä±U«Vºà₫ưû¢ëBÖ!wîO‘j J+2dă¤p₫|yµrnB“´Gû́È.-ö)`QJRQâ8pàÀ-ZXºtéóºä‘Í™‰™R<clß.¿j`G oNÙ‚Gx$Åx§¢kDD€ª:ÇøûûÈ=û­[·êÖ­[¬X1wwwM¼<`Ñ¢E¢kJ©g$FJñLAÜGöŒ!J5½{#àS'è«Wáí­ ÇÅÔO³OÏ™c₫ưGp¤:ªëâlȦ¬‡ˆDQQâ¸ÿ~)~ûöí¹sçD׈ÔèÓ¤B€t{Q9ÁG¢T3t¨œ8΋Ÿ~̉…S¦È‰ă°aæ'ƠP­:ªÁƯ¢2&"QTô¨HÏ` –â%X’`9e—jâH”j•ăåËSâÊIêâ¨r‘ˆ„PÑÇ₫ưû‹®©Ë|ÈÍ́û¢/€óçåWåΛÊ.Ơ>>¢kMD˜>£FÅÆ“&aÂówơO³"«.®‰|`M$–檶iv₫JËz÷pÔÅ™é5^è̉kׯ¸s±s·º¸È“S'đó̀™^Uˆo:™ö¾Ô­+s‹ˆ@ÆŒ̉+&”7W?ô[¥ºø3|ö ÏD_¤ÔÆ_J³Ÿơ|TM*Ơ¤XÔMÊÈE¥¬‘ˆRY£9Z–²¥J¤$’ˆRŸUÏ›7ϘbÙ²eọ̣́*Q¢DúôéEW™RĐvÈăî4FcÑƠ!"C4ă¹s1v¬´´d úơ‹¿ù³f%ë8Zh¥‘Àû¡Ÿ®í ¥>%‹/6¾pæ—JÊIDATáÂ…gÏ]¤Hѵ¦q·¥¸8ë‚/ä f’Ơª‰®8Qö,Îä¾}åÄqö́ä&æaÔaN ; a­ªõ¼Ù¹sçđđpÑ¡¡œfPzNmxÇÿ•×r,¢ÔgǗđ?&÷8₫đw…«´èsç¥!¢dPQâØ»wïŸz|öÙgÍ5ëÛ·oëÖ­sWîË/¿́Ơ«WóæÍ³fÍ àåË—«W¯]kJ§qZK¡”.P&µj}”]ª™8¥¾!Cäxưzå+¿ÿ.ÇŸæ”M–Wx%Å+°â&n>y¢4GE‰cçί\¹ M›6œ1cÆĐ¡C§Nºwï^???—/_n̉¤ÉôéÓ÷îƯ[±bEÇ”ƒA“­8ŒĂR\̣¸Œ†ï/+q¬XQtƯ‰̉åHjqûÇ4m*Ç₫i™£]ÄE).¶V"Jm*JçÎ-[¶ï¿ÿ̃ÑÑQZooo?|øđg¢´EE‰ă‰'äÊ•ËÎN¿V&gΜ.^Œư®™)S&/”Ư%ÈV<Â#)₫ Ÿé‚•+åqf0{–æFt#R‡ûYn—GG°̀Ój¿à)~‚'³1[ôù¥!*J#""\¹råÚµkz/Ư¹sç̉¥K¤áÊwï̃ @ר‘lÉÏøY{ ‡+Ÿ€ơèaʉ(¥)¿̀ޝ˜3§?zd́₫’¤́Rư ¾}₫DiˆÇ̣åËøøñc—.]æÎ{æ̀™û÷ï_¼x1  cÇoß¾Pºti“&M5k€ˆƒ̣Îmq*B₫²¨Pư¬W×GIppđ={v́ØơêƠ«äï“T®)äÁ‚ÿÀËØÛÇ]–²F"ë‹/äØĐœ^Ecu[öÓöäÜQ²!Ø„‰(©.qܶm›¯¯oÓ¦Mưưư'L˜đüùóđđđ5kΟ?_Í7G)ù₫ĂR¬üP6µŸ0At-‰È,Û¶ÉqË–̃ù}Ü—â]Ø•Đ7O"J>u%Ó¦M3f̀ÇơÖGFF.Z´h̉¤I¢+H)e¦Iñ0 S¾¤|ÛÇO`ûâÅEŸQ§œ{0̃|°Ê ŸâƠkñQ›¡™èkAd³T”8^½zuƠ§f1öG’RÇ 6œ>}Zt5)E|‹o¥xf)_ºz5m̃½“cÅC$Üwßɱ¡ïùä™ñË/IïÏ$p˜ù̉"Gv$J!*J—.]ªƠjí́́Æö́Yi½››Ûüùóu³W¯6Ôt†¬Ư;È) =́*–/_Üee—j&DÂy*¦V¡ơ‰2ÝÔẸ́Ç„AÅPLZ¬†j¢¯‘ RQâ aÆ:urrrR¾T¯^½5j¸~ưºèj’å%̉-F9 …~ǽ{嘃8©è!̉®A~ ~ Ç”#|‘E¨(q Đˆ… đ́Ù3ÑƠ$ËÛù̃¡^Håó®îƯơ6SÜqL—NôIQܯw›6Å}öl9V̀ç`IÊáx”s ‘E¨(qộ̣`°£V«=uꀂ ®&YØ_øKë@ÿ‰sb1¥É´ˆTM9X¿¡fÊüÏœI©ZüŒŸ¥˜‰,KE‰cÉ’%œ}<<<́Ù³§gϺ•=zôèƠ«×₫ưû¸ººöW÷@6!1ŔGåKʉàX£†è“ ¢O’àäÀ9®];¥jñ ̣ÓÿđŸ̃ _Dd6%³fÍÊ’%‹ÁW]]]§OŸ3gNÑƠ$KúßH±r(GYayô»MÊñ×_‹>"úDù%oÖ¬ø¯+Ë/R°"ÊÆs0çN‰¾4D¶@E‰#€+îÛ·¯oß¾̃̃̃3fà́́\¼xq??¿ÔªUKtÉÂfCn*? £LØróf9fâH¤]»Êñ÷ß,̣Ărܯ_ Ö%̣¬¤_âKÁW†È&hÔ<_xx¸‹‹‹èZ˜,ÍN|nª«¸Z±³I¸Áí%^*_ ’§ƒùúëx4=<ñ3R ©'h”Êø¦¨“̃¢?J¿F±Œ™˜9#åcA½y‰à/‹ ¥ÙÏzuƯqÔcY#¯:ªKñIœÔ{5‰RÖHDjSµª'02B©Rr|øp ÖeF|/¤Å¢(*öÚY;ѽ}ûö́Ù³—.]zúô©î^£‡‡‡Ï_|á́́,ºvdyÏñ\ăÿ5W̃bL¬3½½=ˆHU&L[%OgđÆO€‡GlüƠWˆJÁêœÅYiP` X úY+U$>|ذaẲ¥KŸ?ÿU''§æÍ›<ØƯƯ]tMÉbº¡›ÏÄLÓ6V~È´m+úTˆ(®¯¾’ă9s &Ÿ}&ÇÑÑ)^#-´Rî¸ û£¿rrB"2øGƠ.\¨S§Î?ü`0kđöíÛ 64lØđÂ… ¢+K³̣´ăĂ1\ïUå¤0Ăâ£Á1DÖoÑ"9î˜̣3¼\Á). Ld&Á‰ăóçÏ{ơêơßÿIk̉¥K—3gÎâÅ‹ç̀™3b¹çÏŸ÷îƯûẼ@©e+¶Jq …1‰ÊıY3ÑgCDñ(\»f°ˆrX̃ơ)?§´7¼•Ă8pF"óN×®]ûúơk]\§Nµk×^¾|ùĐ¡C¿₫úë¡C‡®\¹²~ưúzơêé ¼zơjÍ5b+LÑm¤ø0Ç/đ÷ßŕêïåß}D”(å>CsêT«&Çü”6C룾´è ÆZDÖEpâ(M-تU«… V¨PA£‰ó-°lÙ²óçÏÿúÓăH©"ˆK9‹Lê<<Ø…]̉½ÆhD7B#1ׇÈj Nïß¿¯  ”H±Áƒë‚{÷0%Ỵ̈Ùốˆ_`åJ9Nl¦Aụ̀‰>"2Ÿ¢9RêQNsº;çaèË@dM'õ¼%K–9›„̃ĂĂ#kÖ¬ÂĂĂÅV˜’O9ñ—Á¯ûÊçZC‡Æ{Yùå=cˆTKÙ¯MÙß-®µkå¸I“Tªrđ!r×SûâY-Á‰ctt4''§$Kêf ŒN…a(%MÆd)Ë$q[™]ª‰¬‚qÍ;u’ă;j”¬94‘ñÄÇCiÊwøN—`Iâ…½½ ­U&åʉ>!"J€²_›²¿[<ËqN]­ä ïY˜%-²“5‘‘Tѧ́ưû÷'NœH¼̀Û·oEW“’ë<ÎKq.ä2XfÈ9®[×P‰3gDŸG£1f"ê?ÿ”§®^ºK–$¹…e ð½Ø»{b+ •ÎdM”T‘8>{ö¬[·n¢kA)NÙ-æ,3OÑNƯĐ|Dd=Ö®•E™ Îåâ©û… (]:•*¸»³!ÛS<Ơ-zÁ+Á¢®‘Uà£jJ=ođF ¢`rwW¹²è"¢D)'„ùñÇD *ç+S&UëøO¤øn´GûT=<‘µaâH©äs|.Å ¡¼Ư8m¡ÇË1{ÆÙB…â,¦r7HåêØø#~LÆÎˆlœàGƠ;R³ u·¥Ø₫Ë(8e¨»TY—É“1~|l¼h H¨ào¿¡yóظti\¾œªƠÔB+ơeQÖ¾©µˆÔOpâX¸paÑW€RĂL‘âZ¨e₫6m’ăDÇ₫$"U7NN J$qTÎså Rßs<Ï‚,º¸j½Â+W¸&o—D6ˆª)5ŒÇx)>€Ë(gªíÓ'ư÷ŸèS!"s%ƠĂzüíS½©¡;Ü÷A¨Ü œđ”È€´’8nÙ²¥M›6eÊ”©R¥Ê˜1c^¼x‘xù·oß®ZµªqăÆ¥K—®V­ZÏ=ÿNt2JÄ:¬“â²(›P1嬓 ˆ®4YJÏr¼sg"Ç•ăÔô+|5 rójîH_Hç̀™3nܸ۷o—/_̃ÅÅeÛ¶m½{÷Nd`Ȩ¨¨nƯºưïÿ{̣äI¥J•>ÿüó₫ù§G‹-}*V©3:Kñ$8 ă§yËcf°mÓFôi‘q”_•_ i×N§NPÙQƠ ¤EæDzl?q đôôܽ{w@@À={ºtéré̉¥bóæÍ.\([¶l``à’%KV®\ù믿fΜyÑ¢EAAA¢OÈÊü ùN­Ô~(>eCxĂă~زEÙ3†ÈZ('•½s'ñ²6Èñ¸qbê»;•=c˜;)Ù~â¸yóæ˜˜˜!C†dË–M·fôèÑnnn»v퉉1¸ÉîƯ»Œ;VD»páÂ}ûöækSUEU)¾†k 8P|N­́RƯºµè3#"£ƠRt‰Kêëw‰rüûïbê{•#ˆ¥Gz1ơ RÛOOŸ>mggW³fMi½½}ơêƠĂÂÂÎ;gp“gggï¸3%ë:€‡††>!ḳ/₫U.zÂ3¡’GóÈ)’@¡­[EŸ™Å”§ƠÊÁÀ¥zRßMÜt„£.₫ˆ˜³€È&Øxâ¨ƠjoƯº•%K–,Yâ<$-R¤Î—-[¶1^Ắ«W¯È“'ès²&ÅQ\OâdBŤ©Æp€&"T\₫S€/kogñömˆ̣rSø„('M%J³T1WuʉŒŒŒÎœ9³̃z777ÏŸ?7¸Uqåß8ÀÉ“'2dÈĐܸï¿^^^zkt¿Ó×^Kq¶l!1XlĈ¬€‹.;ö¿Ăư– | ¢==ï‡̃UB¾)ê”BïK}W¿{ưº6C†D ïØ‘¾qă\ºØÇ'æÊ•{¢®ÆÜ)X ö^ăĩlîÓ¹©_ ₫²W¿~}ÑUP Ou]§ơÖ»¸¸xơêU’{ˆ₫å—_f̀˜=kÖ,c,úÔÅ+…RR¼ (PÉmÛä¸k×́† =|(…öíÛ'²·„˜± ¥4¾)ê”"ïË’%hÜXæŸ5 ?ư”hä82̉ŃωrR™?\₫(æRL9dOªá/‹Xñ?Öăß!J#lüQuæ̀™5Mdd¤̃úđđp|ºï˜ˆ₫ù§I“&S§NơđđX±bEÆ EŸ5¹„KRÜmÙÄ!‘/2œlȪ5j$ÇË—'Y\9x₫ü‚뮜̀z:¦+g4 Jkl,ñoç“&Éqbă~+'¬TIôùQÊR~ï#ơ(sÇ)˜̣=¾\!"Aĺ“â%X’HÉ5k䨨ë]¾¼èó#¢T²k—«á¦#âæ#1r.æ®Qª²ñ^Ơræ̀9bĈéÓ§7mÚ´Zµj÷îƯ;ỵ¤··w¯^½¤2C‡-\¸đ;>}zÿ₫}''§;Æß[‹-:uê$úœT­=ÚKqoôN¼°r$ài‰´„<}ZÙ3†Èz †Ù³căơëÑ¡CâÅ•C ¼yƒgÏ`ÜÈ)KÙÏz(†"đWü*ºRD©Äöï8èÑ£Ç?₫X @;w>₫¼S§NkÖ¬‰?¸£î¾ăÛ·o¯̣øñcÑg£v!¾ Ë/·éi”™8Y¯Y³äظ/á‡˱Jn:"î}Çßđ[â-¹‰l‰íßqÔỉ¤I“&MzµaÆ̉P;_|ñGa4[-È3̉Cm˜V­’ă|ù-ªœ2o^ÑgID– ƠSª†bº–¨(„†B%x)ï;ÎÀŒ§xú3~])¢—&î8Rª9„CR<“/ܽ»ß½+ºêD”:F–c#úVøç9VƠ7Gå}Ç•XÙM’±3"ëÀÄ‘,¦JHñ,HÆâRß^«–ùû!"5øßÿäØˆ¾Ơ*Tˆ³xă†èSPPæ;°£"*®QÊbâHsW¥x &^XÑ7 K–$ZôÇåxøpÑgIDÉfo/Ç>³Å%y"*¨m¦7eîø₫)„B¢kD”‚˜8’edEV)̃ŒÍI–WN9Ö7ñ¡g*FJkĐ@ô‰Q²ưö›7oǹ%KÆY¼xQô)Ä¥̀ïà+\E׈(¥0q$ x†gÏđLZlƒ6‰—W>i*X0©½€“ˆlDăÆr¬ª1Q7oÊqé̉¢O!eîøo¤~3D6†‰#Y€̣văaN²¼rBå­‡$¨đ³‚ˆ̀S½º:d̀ŸgñWơœ῭0w$›ÄÄ‘’KÙ´@ ÔHr“k×äXï ”¾… å˜ ‰l†2ïS~•LÔ›7rܲ¥èS0$~îøïDWÈ’˜8Rr);S!(Ẹ́+WÊqçÎI•V6p44—Y¥,YäøƠ+#7rq‰3²Bï̃Fn—ª´ĐzAî¿ă§đO2öG¤.L)Yöb¯r±(&¹Ir¬œ«Ú°û÷EŸ"¥ Ótpà€ÿô“èSHÀu\ỵ̈WQ1¢+EdL)Yê¡+ûÇXª†ư%¢ä3}@Gå]¹s‹>‹l¦©³á>è3DWȘ8’ùºCû¥&j~†Ï’ÜD9|ẳ¥I•^¿^ÙÀ‘Èö˜> #€o¾‘ăÿEP̉ dă1;°CZ\ŒÅP@t¥ˆ’‹‰#™oVI±r²ÁD(‡óÓ'©̉ʃ‰>]"²4ÓtÔQv°+^\ôY$¬…"TZ¼‹»́jMÖ‰#™ÉR¼ ËŒÙ$8X 3·Â… ¢Ï’ˆR’Y:(V ¹rÉ‹³f‰>‘„åFîhD+×h y‰—¢ëEd&&d}Ø÷ï¥Å̃0ªs£™Ă7pq}ÆD”2LĐQçÁ9VyK;Øé Óă÷ Ø º^Dæ`âH樋ºRü¯ÜJÙ©D‰¤J+o?¨ücˆ̀fÖ€:~~rüƠW¢O$)Zh•ƒ—u@‡.è"ºRD&câH&ëy@¨‘ ™ŒÙJ9|cc₫Z*{N!ú¤‰(e˜5 £r8 Ơ´µ—qyä¿fk±ÖŸÂdmø#K&[ 94f‚Aåđ«W±ÁÁƒrœ1£è“&¢£ĐÑÄq₫·o—c;kø@› E©…VM$"E׋ÈXÖđ{Fjâ')^$Ô‰¥lDD‡r@Gå \FĐ{¸=mès1B-Ổḳè ç…Xhî₫ˆRG2Á>́SλÚI¨K9^Æ?ÆL¾¥,4x°èó&¢V±¢¯Zẻ¦Ê'Ôß~+úDŒ¯vÜÜq}/DW(iLÉÊ>1¯`Bk¤7oä¸B#6P6pdÏ"›wâ„wïnêÖ‹ɱÆzÆIÔBÛ­¥Åó8ÏQIư˜8’±|á+Å5PĂ®FnXª”oÚdÜ6[·Ê±jç#" ̣ô”ăÇMÚ´¤K'/N$ú\Œ¶[vb§rïđèz%ˆ‰#å8+ûÁß'À¥KrüơעτˆÔéêU9öơ5ukå„…'>S4@½ÇÖ“1™­Iµ˜8’Qª ?ÄCă7lÖLm·~ó¦wî,úÔ‰(U|w²û{÷LƯrFS+z`­£…¶ä§3ºÇÖ/đBt½ˆô1q¤¤åA)î†n9ĂømÿøCG2n6p$J›Îœ‘cÓ§ îÙ3Î$Scƈ>]À…Fh¤\“Y†ƒI]˜8RÖbíÈ£é(qL’²?tß¾Fo Ç>>¢/¥–²eå8̉œ¡ •ưđ”ƒüX‹Ø¡÷Øzf±Ç © GJ‚rR,½¿hI?_—,}&D¤~[¶Èq̉3“°v­[Ưk-´µQ[¹¦`‚ßàÑơ"˜8Râ”ßt§`IÛΙ#Çơë½Ùµkrܨ‘Ñ›‘Mh-O§»ŒÑ:uÓZrÈÑgd–ưØ•kfcvfd]/"&”°‰˜¨\‹±&m>l˜ïÚeôfÊqƒ¢¯¥º™3å¸qc3vđ́™Ï›‡³gEŸ‘Y|á«›PZó ¯4ЬÂ*ÑU£4‰#%häÁĐL}HưÛoŕåeÊ–‡Éñ€¢¯¥:e—¸¿₫2owïÊq¹r¢Ï(bÓM•kº£» \̀ƯQr1q$Ă”_s7`ƒ©›+'U>|N¹sr\©’èk@D‚ôï/ǃ™±ƒ|ùđư÷̣¢•6vÔù¿ß ¹£\ 4˱ÜÜ]™‰#PE¥8/̣¶C;“6ß¿_3d€ñ?e;Êñ/¿ˆ¾ D$ˆrÁ… ÍÛÇøñ(\X^TΆm´Đ~‹8Sq÷B/v¸¦ÔÇÄ‘ôÁ˜`K‹÷`̣0¼uêȱi­Û¯_—ăD_ "§aC9ö÷7o7nÈñ?ÿ`ñbÑ'•/ i…VZh뢮råz¬×@³œ­‹RG€>èóO¥Å@±å÷øM›LÜØÏO•*‰(-óöF®\̣¢rlp);îƯkSßO÷`Ïk¼Ö[Ùư5Đ\Á³vI” &„8€iÑŒ1ˆ7Lï×́äGDñà™œ=)sÇ%Kđă¢OÍr2!“Ú¹˜«·¾$JfAѵ#›ÂÄ1­»‰›•QYZ ‡IưYdʉÁ̃¾5qă)Y°'O}IˆHe”}îªWOΔ¹ăˆøơWѧfQƒ1X m+´R®|hJ¡”èÚ‘`☦½ÄË"("-NÅTg8›±Ÿ>}ä¸F Ó{¶ŒW -1nœè«BD*³DÑ\ïèQÓ¿›Æ#Ç-[ââEÑggi[±U ­'<•+/á’Ú¨-ºvdơ˜8¦iîp—â80c̀ÛO€ü ‡‹>+"²=Êw3&gO ñ”K—6qà0+ñ₫SNå s5Đ´E[ѵ#+ÆÄ1íR¾³k¡–yûÉ‘CgÍ2}ûäx9§^%"C4ˆ³¸rervöùçØ³G^̀”IôÙ¥Œ"(¢…öè‹»›5Đ4B#³öJiÇ4J™5.ÄB³¿€9ƒÿ₫“‡ 3}ÊYÀzö}aˆH­”í{ôHæÎêÖó·G£Áû÷¢O0et@ƒưfvb'ÓG2Ç´H™5NÀ„`ö®Ê——cåÓc½{'Çnn¢/ ©›rwwó÷è×Çˋf1ntưfÆA¿¹.}Tv‘$JÇ4G™5À€‰˜h₫®7‰Ï?7}:Èñúơ¢¯ ©Ûrụ̈%ÆMæ₫fÎŒóœ¤hÑ8°mÏdLÖB[úC©ŸÀ 4p|ëŸ̀›RÇ4ä (³Æ¶h» Í̃›r /LŸnÖ^”ƒa4l(ú ‘ê)Xÿđ₫ư7™û›5 óçË‹ơëcéRÑç˜Â‚đÿöî=,êÿø{`Aâ"^1 YÅ ID$Q¯%f*¦¦ƠÏÔ´̀K)–Ù×¼€Zĩ̉ï£ẽøªi˜J˜—KBÅ+)‚ ((°̀ï¡aYXv¸¼_Ï><³gÎΜ™âgÏœ9ó—q2&”?ÄC;Ø öc¿Úm¤ª‹‰cm±ûôgg°ƒƯl(÷ÖĂz½ñÖ™åûªÿçÙƯ½\› ¢ÚçØ±Âå'Ÿ¬øö&LÀ…oÇÅ´ijcå[ˆ…"Ä9˜S|Uô ̀Ç|µÛHUÇZaé?̀ôÿđéH¯ÈưôÆĂ$'—w+cÇ.×à±EDd\¾¾>¼đ­MyfŸ5Đ¯ââ ߆‡ă•Ú1eMÂDˆ%>Øz:¦  IÙ·J5ÇoFLAáđ/ñ¥₫ËAhăŒE¦ă)ưoôœ“–ˆÊbƯºÂå¬,LZñM>óL‘‹'›6ù[W³Áâ”0Àón;°£́¦ˆ‰c ç Ïoñ­üöÇølPÿ[¸£c‘‡–₫ ÈŸVñQµ¤?ØqáB$%U|“¶¶E¶ @p₫¼ÚGj*½ĐK„xwÆÓÅ×öGBBÔn&©Œ‰cM&@8ƒ3̣Ût¤ûĂ¿"Ï=Wä›§™q₫Gˆ" K>ư..j¬É}ïEˆë°®ÄµĂ0L€à Ï ¸ vKɤ˜8Ö@íÑ~$Fê—ˆ˹-=úĂ}>ùơë—wC¾¾…ËÿùÉOƠ úßdUmÄFâ)œj’oK‡yR9cu¨}×øk.&ỠŒ0èhô…¯Q.O£hÖ8a""*¶¹F…®Á¡C&;EDT+è牉xöY#n;>?üP¤äÇ!øăµZUíĐî.ˆ¿Ăwæ0/±ÎJ¬Ô@#@苾¼“¦`âXÇq‚₫4¾Ç÷Çp¬¼›,¤ÓÉß|³Èă\Ë#6¶È[ÿ M DDTưÜ1.®ṕ£1AѶm‘Âv팻“ê*!yÈ!®ÆêGƠù ?Iw̉4A“ođÚM¦rbâX]¹ÁÍ>…y«¬Ö¬FSø64«W—k:v,\¾rÅ4g‰ˆjưÜ17×è9s¦È³²åtíªöW oâMiä@ |T¸1#¥ Ù¯âƠ˸¬v«© ˜8V?Á tøG"̉X—§»v-23ÚàÁøöỤ̂o­€₫”h¶¶µqJ4"2™â‰Œ4âæ}}!è̃½Há¡CŒ­ö±WQˆ’2ÈmØö$|TµHDºÂUJ"gbf.rƠn8=Çêd4F ¶`‹~¡üDˆÆCK >|ùel̃\áŒôô·úƒ%"ª ¹ă«¯¢Oăîaÿ₫₫<®^ AÀ¢Ej~Ụ^º«"ÄÓ8]ús(fc¶%,Np æàUÇêá}¼/@(>vä ®Á£́âÔ)ĂK:Û¶áÿ«đvW®DTTá[Ñ8Ư¢DD!E’Å={Œ~Ùzđ`ˆ"Ö®5,Ÿ2‚€1cÔ>UŒ'<Ó‘.uC~OK©y·WcµÔ Yu¦cz*RƠn>`âXƠuFgÂ,0(ÿ]`œk¾îîxî¹"%¢ˆ—^ªđvÏŸÇX½I‚˜5‘)í̃mx‘ºúG„(bÚ4Ặ¯¾‚ àùçƠ> Ủ ̀2Èă8îRjæ g>æ7@) Fp4¢Ơn~­ÆÄ±ºûđ ïPñ"ÄÙ˜m”}ÿ=‰‰…%Í/ÁkÙ²p¹–ÏZADª:Ôđ/Ô˜mÜừ›QÄË/–= A€¢™í”Ä̃gqVJ"ÀĐ¡ôú[°%RéÇ0„Å F탨]˜8V9;°C€` Û38c°*¡"Ä/ñ¥Qv”•A@HH‘™3qé’‘DÿªĐ¢EÆSˆ¨ D±È<²êÖE·nFßÏÿ₫gx…\’™‰À@̃zKíSQ…!(±Rù=¾÷†wéơïâî<̀ë„NRÙ§aÚ9œSû8j8&U…ºWđ¡?ú_ë o¢Á”ѵ+ll ·l©Øƒaôég}ûb̉$£Ÿ1"¢2¸qnnEJ„ `ñb£ïj÷nˆ"¦N-aƠªU¾₫ZíRµ ðă8.%‘qđ%<~́ÔMÜ Gxk´–̣H3˜ Ă°íØ®ö¡Ô4LƠ7Sh6aS‰k¥Q ÆÚ]çΆ·NèߢˆAƒŒ±ƒ₫)’5ZZb×®J:uDDe˜XÂ@œ‰!%ÜáRaE¬[ẈÚQ£ °´ÄÎjŸ–*¯ ºlĂ6)‰¼Ûs1WÉø~âl€BA®.4C³wñîPû€ª7&ª„Ả¯̣"”0ú̃†‡(":®®%¬ÍÍEPPA^ó¥qF!ƠppœéWpEÊ#¿Á7oăm[Ø*ù́\Y‚%ƯÑ]N%Í`ĐơX·Ơ>²jƒ‰£I]Æå!"ư¾₫%Ouc«‡x(B́ằ:öÇĐh øí7ĂU»vơFçºu1~‘̃FMDUĐ /@ñÿgXA@` Ñw€¤$ˆ"–/dw̃)HgBC‘”¤ö)ª&F`ÄR,ÍD¦”GÅÙ÷ñ¾™âÜF„¸ëCê'9›´…íhŒ̃ˆ·pKíă«˜8Â[xËÎW¸nFÉj[Áj+¶³‘m ă<úṭdÚµƒNg¸ª}{ˆ"úö5̉^¸`x—â+¯0k$¢*mƠª’ÿLEG¤ß}gô} Q„("4ô‘uÖ¯G‹M˜8·˜½(æp„ë “̣È\ä~‡ïú¡_™6r÷WcơP mˆ†r6iónèö>Úƒ=YÈRû@Ơ$ˆüßƯØ´Zí_ -ÄÂEX”‚”ÇÖ_‚%0Áˆ ˜2¥´yʦLÁ£]ư²²Đ¤ 229??#QÅ%%%5õ\íVP JƠTKẳ±#bcK^ea5kJKô*àáCL˜€Ơ«U4£G£W/ƠNR p··aÛ6lÛß±ô[½0q4>8X0µÓ[·Đ·/Nœ(­Î† xåăç ]»Ê«äoT-ư¿°jcPª¦Z—qă°bÅ#×j4 ©¼Û¡çÍCX˜̉Ê––hƠ K—ÂßßÄç¨:€»±{vÅÙ2}°v&¼TmRƯĐM_ ¹ÏoÜ(¸Pаá#³Fi~oQ4^Ö¸eKÁ%p£FUͬ‘ˆH‘åË!øïK^›—‡o¾)ø›ûä“XºÔ¸;Ÿ>½à*ö‰8đ1•srpæ ºtù÷Jª€¶m1{6VûVCˆ@D<âÅ‚̀43;£³Ú­«rØăøH›7õ´iÓùóçëÖ­ÛµkשS§:::*ù A£;Ü'c²Q×—‡ơë±~=öíSTƠª—_l,¦OäÓ>øÀđΘª¤Vw¢TU JƠĸzûí̉nf‘YX $!!èÑĂèM8|#ӧËóYA@ï̃°³CX<=+ûdƠ ÷qÿ0ÿ_ăđ!ñ(ÔÆ ‰cÉ>ÿüó•+WÚØØx{{_¾|ù̉¥KÏ>û́ºu묭­ûY³‡f~uü¦`Ê ¨Hrs±o~₫+W–íáXFÎ?ù³f•Va×.ăƯeSYøaÄ TMŒK ÆÇ²ee¨oo©Sѳ'||Œ²)(™™Xµ _}Uä!±å`f†'ÀÈ‘h×^^̀)ËI«Ơ&$$¨Ư 0q,ABB€4h°eË–† ˜3gκuëBCC?úè£Ç~¼¬¿Lii8q¢àµ};̣̣ÊÓæ^À´iǼ’›‹Í›±e ¶n}LM++ÄÅ>‰¡ªâÿ…UƒR51.¥ùúk̀Ỵ̈¥ vv<íÛ¼4å-1())ؼ›7ăàA#eƒĐjѪ4A‡h̃®®°U4Ub-ÂÄ‘ Í=û»ï¾›7õÀ‡™ètºN:i4_ưỜ́1Cå_¦Œ \»†«Wqơ*NœÀøûoüưw9SĂâ‚‚0mZn_Çñăøư÷‚ŸÊêÔÁƒÆ9Sáÿ…UƒR51.J­[‡yópÎHOF¶·‡»;ÜƯ‘’‚#àâRđ²°€â ́܉‹±gö́)a¶Jbe…¦M‘–†^½Đ°a‘—N‡6màäd¢–˜G*Ô¿ÿÄÄÄ#GÔ«WO.œ2eÊ;Ö¯_ïíư˜Ç® ¿©ºœ† AHúËϲ~ø÷î¼23‘”33¤¦"- ©© ‡£Nܽk„Ư‡„`̃<¸<₫AOUÿ/¬‚”ª‰q)ŒŒ‚èÅŸÍUÙllààPđJI·7lmac[[éµwgîM7¿#çMpKªƯ†ffE4nŒºu‹¼.]ÂsÏÁÊ ÖÖ°²‚•²³á́Œ:u`i‰:u ^ññèÔ °´„¥eÁ­[hÖ Đhü,·Z›8VàœƠP¢(?¾^½zúY#wwwW¯^}lâh­ñWÓëŸ{àgkü;ÂqJzœơă”i€¤ss|ó BBLpÈDDƠ•ÆÅر…%W¯âçŸ ªWễ÷ïă₫}\¿^đ¶ØøGiÚÇá%}ô<ÜN£Ư)xF»ø̃F=T ùùđÏ?%¬:[¶ s*Um̀Áı¸¬¬,Nçàà`Pnooàömc>Ị̂)\yGÚă„ôz™ê»heu¿oßû/¼eđÄ­êÿô«k×®©Ư2Ä TMŒ‹Ñtë†nƯ0g~™æÆ ˸¸:ññ–qqu*H‘Tâ†ón8?[U!O$Ăù\“Đ\ú™„æ'Đ>ŸsùƠbL egg°±±1(·µµ₫Ø-ôÁO.¸ú$®É?]pƠ÷Ơ>2€FWW¤¦bäHx{£C¸»Ë+ÀÊ_ ñê[Ä TMŒK%j̃:=¦NZZÁèø_y‡kpënƯ2Ú0y@¦ Ú2v­‰RĐ0 o¢Q́̉àtơn£^œ~E禸û Ø¥Ă>öQÇd‡CFÁÄуƒƒ YY†O¢¼wï₫íw,ƯRË—vsƒ À̀ ‚¡„–øç<ùda¡™î߇̀Íafsó‚…'àç¦È(Œ£GÑ£êÔ•UáÏ'Đ«—<¥à% v!"¢êËÉ NNúY¸ZÁ§99ÈÎ.|=x€ØX´j…‡‘“Sø3=ÈËCn.rs‘—‡ØX´m yy…?ù~~Đ韮`áèQøøH%B~~£üüFùùmSRà$"ÿDùùE\Ÿ‹&Mô¦Ù >E E pw/¨ ×LIAƒE 33 ï÷Å<Ñü¡h™r%»î“N¹¢&G´ÈÍ7Ïehq*¹Q«&éy¢y®¨Éƒ&WÔ䉿ñ·ƯỌ́Dó  C‡¡¡¡¿ưö[ñ:Œ‹)åää¬^½zàÀ^^^Ư»w÷Ưw‹WcPLàâÅ‹Z­ö?₫(q­’Ố0™Ï5Kí6ÔŸ₫yDDĽ{÷:tè}́Ø±ØØØ   µ›V+äåå1bË–-:ÎÇÇÇÎÎ.66vëÖ­fff>>>r5†I-¢(¾ưöÛIIIZ­¶W¯^ú«Ó‹~óÍ7/^¼Ø¢E WW×ØØØ¨¨¨6mÚ4õ\®Ă¸˜’N§1bDTT”……E‡,,,:´qăFŸ¦M›ÊƠÓX²dI\\\pppăÆ V) AÍ“HvîܹV­Zùûûß¼yS*ùôÓOƯƯƯÿóŸÿ¨Ư´ÚbưúơîîîÆ ËÊÊ’J₫₫ûoŸÖ­[ÿùçŸR ä¢5kÖ¸»»»»»O™2E¿œA1½»wïz{{{zz₫₫ûïRÉüñ̀3Ïøùùét:©„q11é/ػロ››+•=z´uëÖ½zơ’ë0(•-==ưøñă3gΔ₫X>}Ú ‚’Ô†0ñRµlÚ´)??âĉ 6”J¦M›foo¿{÷îüü|µ[W+üôÓOf̀˜amm-•´lÙr̀˜1:N¾`Í0©%11ñóÏ?oƠªUñU éEEEeddŒ3¦}ûöRɳÏ>Û·oßÔÔÔ¸¸8©„q1±“'Oxíµ×4T̉©S§Ö­[_ºtéöíÛR ƒRÙ‚‚‚BBB6lØđ¨ JBPÂÄÄÑ?nffÖ­[7¹ÄÜܼK—.iiỉŸªlIII666mÚ´Ñ/lÙ²%€«W¯Jo&Uäåå½ÿ₫ûÓ¦M+¾–A1½C‡ ‚0`Àưˆˆˆ„„OOOé-ăbbM4 çˆDQ¼{÷®™™™œJ2(•mΜ9Ë—/_¾|¹ŸŸ_‰”„ 6„‰‰cE‰¢x₫üùzơêƠ«WO¿ÜƯƯzY Uª¯¾úªø×ijgÏpqqä/¿ụ̈¯¿₫7oÁ*Eñññ7₫ư÷ßW¯^½`Á‚;vdggËÓëׯŸ••Ơœ9s;–œœüÑG]»v-88Xú‡Ă ˜@çÎơǕʔ„ –„I£vª½¬¬,Nçàà`Pnoo¢ß ©̣xxx”ÄÄĬZµªN:RÏ Ă¤Ó§O¯^½:44ÔÏÏOÊăơ1(¦—“““™™éææ6kÖ¬ÈÈH¹ÜÅÅå‹/¾xæ™gÀ¸¨A«Ơ~ûí·#G9r¤\&-3(ªS‚Z&ö8V”ôMƯÆÆÆ ÜÖÖ@zzºÚ ¬ut:Ưºuë̃|óͬ¬¬ùóçׯ_ “²³³ßÿ}—É“'?ªÓỀ̀p₫üù]»v…‡‡ÿöÛoœ0aÂơë×ß}÷])"Œ‹éedd̀Ÿ?ÿ₫ưûmÚ´:thÏ=­­­·mÛ-U`PT§$µ$Ĺq¬(A²²² ÊïƯ»‡¿gÉüöÛoŸ|̣É… 4i2wî\y¨ Ădzááá×®]‹ŒŒ”ïX2À ˜•••´0₫üîƯ»KËăÇONNúñÇ̀¸˜̃ûï¿âĉiÓ¦5J*INN:tè{ï½÷Ă?´hÑ‚AQ’Ô’0±Ç±¢4½½}ñoäûª¨²åää̀™3çµ×^KNN0aÂîƯ»ơ83L&ùÖ[oÉ÷[Ç ˜•••µµu@@€~y=œ;wŒ‹É¥¤¤8pÀÍÍMÎ8;;7.77wëÖ­`Pª%!¨%abâh5JKK“~3dIIỈ*µ[W+äççOû́3{{{ooשּׁ¬ăÇ ‚°`Á‚¾}ûÊuSJMMLæ³fÍR» 5———««ëÍ›7ươWFÓ·oßđđđâ3SeHHHˆÊËËK)I«V­ä»d&ƯºukăÆZ­¶W¯^úå éy{{;;;_¼x1>>₫áǾ¾¾Ÿ}öYÇơë0.¦T·nƯ!C†¸qăÆéÓ§sss½½½#""¤›–d iDGGÿùçŸÁÁÁ76X¥$5>Ĺq$""""Exs )ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$¢2ËÉɉŒŒ|ươ×ưưưÛ¶mÛ«W¯Ñ£G¯Y³æÁƒÊ7²aĂ­V«Ơj d²–'&&jÿúØ1Î]I8°ÿ₫ưû÷ß¾}ûQu¢¢¢¤f{xxddd¯ UˆˆˆP¾ëÅ‹KŸzûí·Ơ> DT 0q$¢²9{ölŸ>}fÍuäÈ‘”””œœœË—/ûLZ•””té̉%iYN§[¼xq—.]/^ŒGŒq̀ËË‹ŒŒ6lXçÎÛµkׯ_¿©S§taêo355uÊ”);v ôóó[µjU9KƒóçÏ4h——×K/½´råʼ¼¼ŕúQc'M¤?qÑ¢EZ­VÎÅG©Ơj³³³Kl§|µ:--->>^.ÏÎÎ>~ü¸´ü /Èåùùù?₫øăđáĂÚ¶m0|øđ­[·êQég£”–ËRSSç̀™3tèP//¯=zL˜0á́Ù³üM#¢*K£vˆ¨ÚˆŒŒ”́ííÇk°¶[·n]»vMIIàêêjPaÆŒ[·n-eû999!!!gΜ‘KẃØ1sæ̀W_}Ơ ₫½{÷† våÊémffæ¢E‹.]º4wîỤ̈`FFÆĐ¡C/\¸ ½=wîܹsç₫úë/)Ó­Ô]+áàààëë+ p|¸§§'Q?ưôÓ‹/Ô‰‰¹rå““S‡äöDEEÉ×mË*66öÂ… ÎÎÎuêÔ‘ ú駸¸¸JÚơo¼±oß>kkkémxxø¾}û¬¬¬U¿OŸ>̉‚₫MḤGưëÔ»wï–²FA|}} Đ²eKiƠ={bbbÊwôƯ»wï½÷̃“²F__ß &ôë×Ï̀̀Lŵk×FEEU|DTƠ°Ç‘ˆÉËË“;–\\\Êúñ7n¸¹¹3æ©§ªW¯^‰uälf̀˜1ræë¯¿~äÈNwôèÑ-Z|$ `É’%–––)))#FŒHJJ°|ùrỵ̈æG} àâÅ‹ xøđ!€¸¸¸âwœeׂ Ho5jôÔSO•R¿gϳfÍ̉étñññiiiNNNxÄG¹pÔ¨Q|đ´|8>>₫Ï?ÿŒ‹‹»ÿ¾["u²xă7J¬pé̉%­V[y§‚ˆL=D¤ˆ………£££´\¼N’™™y÷îƯ»wï¿/X₫l)̃yç©€(gÏ]±bEpppHHHñlµ~ưúúo­­­Ÿxâ iY¾ª^&̣%ăßVꮕëÙ³§Ô¥']Á—çt4˜ˆ'77w₫üù¾¾¾“&MZ³fMLLŒN§“.mŽ{÷ä›ÁåÎ;•z*ˆÈô˜8‘R^^^̉ÂJœ̉¥OŸ>;v́ر£|ÿµ¬”$L¦ÑhfΜóÅ_ÙÙÙÉ«~ÿư÷âỎKKKÓûàÁùzzÓ¦M+ơT¨¸k'''ézFFƱcǤ‰x\]] úöV¬X±víZNçââ2kÖ¬~øáäÉ“Æj†­­­Ü ½fÍ}%éׯ_¥ "2=&D¤”<”-99yÆ k8 w¶IăđÊ$'''555555''§oß¾ .Œ‰‰Y»v­|‘ZªP–˜˜(Í₫#9zô¨tMÙÂÂÂÙÙ¹RO…̣]=88øÁƒ¢(.Y²dÉ’%:NªP§N%K–”#oÓjµơë×OMMƠétÆ °··¿~ưztt´T¡gÏÅ?µwï̃îƯ»?ưôÓqqq̉Åb33³w̃yǧ¢ô]Ëq?xđ`À€­[·¾sç|7‰;;;i¼ạ̀åË_{í5¦´?Îơë×÷öö–3¹-ZÈs4JêÖ­[·n]i›3f̀عs§ ‡.ư™1emù[o½µiÓ¦ŒŒŒŸ₫yĈ>>>‰‰‰̣˜ËQ£FÉwQÁG"*ww÷µk×êß}çÎ9klÚ´é—_~YîFfffË–-“.n¦¦¦ñ¼ù¿ÿưïîƯ»¥K±>>>o¾ù¦ÁG:tèà́́œ’’ŕØ1)u“fɩԛîºM›6/¾ø¢´œ}̣äɤ¤$¹—Î`k̉©S§"""”ô;êONTü:µ Ưºu“÷½ÿ₫FúØQ*”ºK¤¼åvvváááROplĺ̉¥K÷́Ù#Íø3lذ &TvˆÈô˜8QÙ<÷Üs{÷î óññqrr²´´l̃¼y÷îƯĂÂÂ~úé§®]»–{ËíÚµÛ·o߸qăÚ¶mÛ°aCFcgg×¾}û9sæ¬[·N¾ÛZfoo9dÈWW×úơë÷îƯû믿:t¨ N‚’]GDD¼÷̃{îîîÖÖÖ#FŒØ´iS‰w—‡……999Y[[·lÙRÉD½{÷–®V£ØưỘ6ƯƯƯ˜™™µjƠjäȑ۶mëÑ£‡´vçỊ̂eèâ”·¼{÷îÛ·onÓ¦µµµ‹‹KÏ=¿ûî»Y³f)9 "ªv„âó“Ue‹/^¾|9€=z,[¶¬–́º̣̣̣8€G\å'"*q$"ª™4 SF"2.^ª&""""E˜8‘"L‰ˆˆˆH̃CDDDD°Ç‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH‘ÿƒ¨7Aø&IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/evalmf_101.png000066400000000000000000000711241466512601400222700ustar00rootroot00000000000000‰PNG  IHDRh\­ArIDATxÚíƯy`LWÿÇñ“D"›¢jMBbK­U[́UB‹>U)ªÚú©µ­VUºhQªU[Óµô¡4-ª–Rj+µïDDSKD$$™̀ïë93’`"˹3ó~ươÍ;w>37Ë7ç̃{®ƒÑhÀĂ8ªë@ă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°ˆ³ê6(88XuP´bbbTGP€Æ±HØç7“³Sô†¢Ób§èƯq¨¡q€Eh`GX„Æ¡q„]X·nêȉ¢Ób§@?h`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æñ!Î=|èĐ!ƠA£q|ˆE‹©  ΪèTJJÊ©S§~ùå—¥K—ªÎ  4yëÚµë¥K—T§ĐǼM˜0áÎ;BˆÅ‹ÿù矪ă¨Gă˜·æÍ›kÅæÍ›UgĐÇ"œcɺuëT‡²k/^T9ÙÆNyç÷«?HƠêÏÚøư+¤´êDeûÅÆ°S”ëÔ©“êzAăX$bbbTG@NU«VU9ÙÀNùñDœ¬ßÛ”8ú™ºªØ/¶‡¢Vî?ë¹Gˆ́ÓñÀ#:”ª:+GxDóçX̣ââcªC@¢q€GtáÚíK–¸¬:!GxÓ¶ÆËº¬‡‹¬ÿº¢:Gxo®Œ•ơ₫7Ë:bîáGÙXGÈ7£ñ/ó*)ë+©ªÓ@Q¡q€|3¿,æ§₫u„oµ~\.ù́÷óª@‘ q|ˆO>ù$&&¦^½zªƒĐ‘ƠÇeưl²Bˆ)]kÈ%cÖœQ#äÏï±×dƯ²·¬d™­:&>GÈóăÔ«^1Ư*fƠ€ºy®6ƒÆ̣'-Ă k/WÓ[;×*#ë§’UÇ€ÂGăùđ₫³²ß1çíƒÛùÊú×IªĂ@!£q€|øô÷s²×!găh~ä:bî!Ơa Ñ8€¥̀çhôvsν‚«³é—j¶Ñ’M€5¡qK™ßÆüRsŸ=S]Öo­}è6ÀĐ8€¥̀ïCƯÂl"s£ÛT–ơ[â¶I°&4`‘¥.˺m ÏÖô4»Ô:₫úmƠÁ ĐĐ8€Ez/>&ëƒÂ°æÆAơeÍ„l #²F•Gx¸¨] ²~ă©Çº₫÷}BeƯé Ơñ pĐ8ÀCœ¸|KÖ5üÜTÇehà!̀/p¹ßô¹ưçù²î·ä¸ê7…€Æâtbº¬kù»[ø¬WÈzá̃KªßGx™;.Êúµ¦ùznị́¦.sÿÅ›ªß #<ÈŸNÉú›^5óơÜU¯˜kwcBGÖÆJU_Ó•4oÜQ Æî«ÇwGd½$2ô¶0¬…iî)\Pư† @hà¾~:rUÖ/„ù?¾ên-|Ô/§U¿!(GÈÛ¶³×eƯäqÏGß™¬l£ê·Æ̣vÏô¯X:}cn+^6=7b.—Ȱb4·ëéY².çQâ‘·Ó­¶Ÿ¬×LRư¶àÑÑ8@>ü-NÖïµ­\À­µ®î#ëßb’U¿9xD4‡ñëMă§«pkæGº;FTưæàÑ8@N7ng|#æJ—tRư Đ8@Næ—°lx½~¡ló£NƠd=ú×3ªß"< GÈi«ÙD<í‚| e›´¯"ëI›Î«~‹đ(hà?›MúưL­2…¸eßR.²¾t3Cơ€|£q€{q9MơÇGăÀ®}öûyY¿ƠºđoNư`OVñ’ơÖ³×Uđ4́Ú˜5gd=¥kb~ơÙ&tœË„ôÆ€ưJÏ̀–µ“£Cñđsw‘ơÛYª?xGöËü®-æƒÅéưvUd=~}œê„Æ€ưÚx*YÖk•Q’á“§«ÉúĂßhè#;ơë‰$YwöU˜Ä½„“¬¯¥sÀ€~Ñ8°SsÉz¥¢ăÔóÉ#ÍS€̃Đ8°Sf³7 Wg•¿ ÛÔđ‘ơö¸ “ÀƒÑ8°Go­•ơÄgª«#º†úÉ:úđƠq o4́Ñ[âeưn›ÊªăÜsMwÏGUÇ€¼Ñ8°;ñ×o˺|éªă€Ơ q`wñ•—Ř›Ö-PÖoü£:䯀Ư9øwª¬ỤTç®-+ÉzÖ¿UÇ€<Đ8°/ öü#ëŸđWç•}\e›˜¦:äDăÀ¾ô_zBÖß÷ Uç÷Nèx¸[€"AăzQ·‚‡¬O^aÄ€îĐ8°#}ÿ{\Öÿy¾¦ê8y肬¿ÙÉ™ô…Æ€Y´ï’¬_i :Næ₫«–¬ưȵƠô…Æ€½Øñ¦¬k—wW¬#{ÑM—Ó7涸Oˆ¬ÿµˆ»ÈĐGöââ;²®êë¦:Î}ơy¢¼¬—ä¾Ơt„Æ€]˜úÇYkñ˜ê8ѰRiYï]ªT©V­Z5ÊÇÇçëgdd,X°`íÚµqqq>>>uêÔ2dH`` ê÷ ßngeËÚÓƠ~éu ö•ơæÓ×TÇûqœ6mÚØ±cÏœ9Ó¨Q#èèè×^{-==ư~ë †~ưúM™2åÚµk-Z´¨X±âúơë»uë¶gÏƠo@₫¼÷ëYرªê8ùÖ©fY¯:–¨:{gûcLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2å~Oùá‡öïßÿôÓOoذaúôé‹-?¾b́رªß €ü™¸é¼¬ÿƯÁúGócëƯ8Z @5Ûo—-[–=bĈråÊiKFíååµvíÚ́́́<Ÿ²ÿ~!D¿~ưœïƠẓÉ'kƠªuîܹäädË^€z—ofÈÚÇÍRK.Nª#€‰í7{ö́qttlƯºµ\âääÔ²eˤ¤$­À­B… BóÑh4^¿~ƯÑÑQ¶’ôÏü‚ó M¬Ëä.5d=bE¬ê8́7F£ñôéÓ¾¾¾¾¾¾æËƒ‚‚„ñññy>«K—.®®®&LعsgzzzBBÂ|pñâÅ^½zyzzª~O,µûB¬›WơVç \Ö_m‹/À–  l|ü,--Í`0x{{çXîåå%îS4¼hÑ¢₫ưû÷ïß_.ŒŒŒ3fŒ…¯œcɺuëTvíâÅ‹ª# §¢̃)¿œJ•u§êîqqqªßñ£+çîtåÖƯy·}̀³uóĂ¢Ćå:uê¤:‚^Øxă¨]:íîîc¹‡‡‡âÆy>+%%eâĉ·nƯ ­S§NRR̉öíÛW¬XÑ´iÓöíÛ[̣º111ªß:rªZƠú.Œ°yEºS†ÏØ$뵃›¨~¯²¬ŸOëYwO­ycõĂo7.̉—ă‡E‡Ø)jå₫³{„ÈNØxăèíííàà–––cyjjªøß¸cnï¼óξ}ûFựË/kK^xá…‘#G®ZµªZµjªßûb~Ă›#ÿ¤>ú† `lüGggg//¯Ü#‹)))Byµ¹+W®l̃¼¹F²kB <833óçŸVư<Ü«ËNÊzæs¶00Ù ¼¬çí₫GuvÊÆG!„¿¿RR’Ö)JÚÙN₫₫₫¹×OJJBT©R%Çrm ñêƠ«ªß€‡ûÏ_ ²üTEƠq Á¢CdưÊ'TÇ`§l¿qlÛ¶­Á`ضm›\b4·lÙâăă–{ư*Uª899ÅÆÆFóåÚù 5jÔxØ ṔØ¥[²ô+¥:ØÛo{ơêåèè8cÆ í¼F!DTTTbbb=\\\´%·nƯ‹‹Ó.[ssskÙ²åùóç§OŸ.g5kV‰%ÂĂĂU¿!aÓ7æ6ÿ…Z²ü₫¸ê8́‘_#„5jÔ¤I“"""Z´hq₫üù]»v…††¾úê«r-[¶Œ9200pơêƠBˆO>ù¤gϳfÍZ³fMHHHRR̉¾}û²³³Ç[½zuƠoÀCœM2Ư‰¾f9Ûq́ߨÂËKï¤₫~ÿ¥Å}B ¶=È7ÛqB 0`Ê”)U«V]³fMrrrddäÂ… sOî(ùùù­Y³æơ×_wwwÿă?.^¼ØªU«eË–ơéÓGơ[đ_o7Íx÷ú“¶pv£¹z²̃SuvÇ!Ç™|(¸àà`æqÔ›¸¸8fAÓ›"Ú)o™¦o4Nm£ú]² ×nW₫äO­®àY"a\óB ~Xtˆ¢Cvû·^§‡ªïܹŸ˜˜X±bÅ€€'''Ơ‰@½Ç}\eưOJ†ê8́îÇmÛ¶Í5ëÀr(ÔÅÅ¥M›6Æ ăfö́ü#²₫á¥Úªă‰‘-+MÛz÷Ơ“7Ÿ'¼²êD́ˆ¾Îq3f̀À÷ïßo~=33sưúơ]»v]ºt©ê€tmÅQÓL«Ï×/W€-é×Ưeưîê3ªă°/:j£¢¢¢££Í—”.]ÚÁÁA«³³³?úè£Ư»w« @§¶œ¹.ëfU¼}Cº÷¿ß‹Bq'+[uvD/cFFFTT”VW­ZuƌܻwïÁƒgÏ­ƯµÅ`0,^¼XuR:uÏôlgúÆǛß]7³w EM/ç8^¹råæÍ›BˆR¥J-\¸P̃EÚƠƠµM›6uêÔéÔ©Sjjê¾}ûT' S)·³d]ÆƯEuœ"Ô%ÄOÖëc’UÇ`Gô2âøØci+†††Ê®Q*[¶l:u„ùß6Û7n}œ¬Ç¶¯¢:N‘kè#ëµ'“TÇ`/ổ8 !Z´h!„8{ölFFÎ9&233Ïœ9#„hܸ±ê˜ôè£ßLăǪ©Sä̀Vw₫öê8́…ÇÑ£G?₫øăIIIÆ ûçŸạ̈+W®¼ùæ›W®\ xă7TÇ ;×̉M© °+Rª³ÛP@/ç8 !ÆpáÂ…Í›7oƯº5((ÈÏÏ/)))66633SQ±bÅ?₫8dzfΜ©:8Å"æ†Ü~ÿ¿0ƠqÉ„ÎỠ_sV«Gưrúó®̀t  Èé¨qܸq£¬ É'r¬°gÏƠèÑö¸²¯áS€-Y“1m«ÈÆqÊhª€Gđăá+²ơ+À–¬OYÓÅă߸£:Û§£ÇÁƒ«ÀúôZpTÖ+mzúÆÜV ¨ûäô»“”u›wxïÈFª°q:j‡®:X“¦•M7ÈÙwñ¦ê8l‡ªX±ÁÑ1²₫²{`¶d­₫evKîÅû.©ÀÆ)q́Ñ£‡¢\¹r³gÏÖê‡Êq?kölöŸËzx‹Jªă(°ô¥Ú?ܤƠ/ư÷xdƒ̣ª°eÇ£G !*V¬(k°Đ©«i²®âëª:Ø>U°VóËz•]cî›^5e=à‡Ø<„âÇ?üPáîî.k°P̀Óˆc ö{#û×¼¾ü¤VÏßưϼƠR€ÍRÜ8¾đ yÖđ`s̀Înи‚ê8Ợw?qù–V₫'µ®·Ñ‡ªX¥ÿ3»z®Ư±­PGÖs`Kđ :ÇQ“™™yæ̀™óçÏ †,ë‘+cUÇ`›t4â¸páBY;99ùûû;88¨@w₫n¦ßê·2 ØäAqă¸qăÆ<—Ÿ9sæ̀™3j³Đ›ˆy¦!´U¸,&oÿîPơ£ßâ´źÚ³Ÿ<]Mu"¶ƒÙXÍf'íuöUG§>́XUÖ6S€MQ<â8xđ`ƠŸë°̣h¢¬Ÿ®YFu]óru¾q;K«oeú¹»¨NÀF(n‡®ú`ºÏ7;NÍô´r@ƯÖ³ökuļĂm :Á¡jÖÇÙ‘ÛJ=H«ễ²̃iv£( Ư5gÏ]¼xqbb¢"99yôèÑmÛ¶}öÙggÍÅm¬»5|Å)Ỹµ†ê8VàÙ:ee½́à•l LttËA!ÄÿûßO>ùÄ`04ỉÄÏÏoèĐ¡{÷îƠ:~üøÎ;.\È ¬;4}ÛEY¿ƯúqƠq¬ÀOưë8¼µI«ÿµèèóơÛ¨NÀèhÄñäÉ“}ô‘Ápwâ±Ă‡Ë®Q³{÷îèèhƠ1·¸ätYWô*©:Ø/5sçÎ5Bˆ§zÊÇÇgÓ¦»ÿ+×­[÷£>*Y²¤â§Ÿ~R@q3¿ Ó7Zîëgƒd=èÇƠqØ5'NœBÔ«Wõ¼y~~~[·nƠ–9̣_ÿúW›6m„±±±ªc(nG/Ư’ơ•VÇj i₫˜¬¿Ùù·ê8lÇ‹/ !êÖ­+„HLL<~ü¸ÂÓÓ³I“&Bˆ+ !̉̉̉TÇP¬æ₫• ë—”WÇÊT/ă&ë“Wøư   tÔ8zxx!„[¶lÑ[·jƠÊÉÉIqăÆ !„¯/÷́ËÀe'e½đÅƠq¬Œù„—æGüàÑèèªêJ•*]½zudzgÏ^¹r¥¶°mÛ¶Bˆ .l̃¼Yáïï¯:&XwYÇ&2â  t4â!„¸}ûö—_~'„(Q¢DË–-¯]»Ö©S'mfÇ-Z¨  øôXpDÖó_¨¥:Uzµi€¬gíàLG¢£Æ±W¯^Ú æKÜƯƯ ƒ6G««kï̃½UÇP|~:|UÖưUPÇ*Eơª)ë7~âÚj¢£CƠÎÎÎßÿứÙ³wíÚuçÎæÍ›6L>êçç7sæ̀råÊ©  ˜́‰O‘u½Ơqzj…%J”>|øđáĂÍzzz®X±"88ØÑQGă£Ó7–%‘¡½Óê߉î_Gu"ÖJGăW_}¥Ï=÷\¥J•ạ̈%JԪŹM€Ư¹tÓt{úÇ}\UDZb/„ùËÆñ§#W ¶1vMGcttôåË—…­[·6oØ¡I›ÎËzdK~!T“Ç=ÿºp÷Đÿ¶³×[TóV€ỦÑÁß=zhÅ… Tg Øè_ÏÈú‹nªăX½{&tœÇ„‘Ç!C†<û́³Bˆ9sæ\¹rEuÊÜÉÊ–µƒƒê46¡œG Y_OÏR€µ̉Ñ¡jíệåËŸ>}ºC‡µjỢññqÈơGcæ̀™ª“(ZƯæqYLá{¯måÏ~¿{À‡¿ÅëPUu"ÖGGăÆe¾ÿ~Ơ‰¨±>&YÖ]BüTDZŸv®.Çñëi< ª!ĺ“I²nè£:Mqs1ưοq›Ọ̈MG#ƒV€z§.2«ÔmÿÍA­˜{xËO¨NÀÊè¨q̀1ï7û”i0ʺT 'ƠqlJ» _Yo={]uÖG§‡ªcbbÖ¯_¿té̉ÔÔÔ¬¬¬7n¨N 8¼³ú´¬'t®¦: 2?gôg&Oºk£££ĂĂĂ#""† 6nܸäääÔÔÔÖ­[OŸ>Ưh4|ûốóͦi\Ç´­¢: Z9Àt¿Áç¾;¢:+££CƠBˆ‰'Ο??÷̣´´´™3g&''?^uFE%!å¬Ëz¸¨c›™@èhÄñرcß}÷V;9™Nl’S9.Y²dÏ=ªc(*sM—Ŭ|™Ëbùx†₫|JuÖDGăœ9sŒF£££ă|°oß>¹ÜËËkúôé®®®Bˆ ¨  ΅»xSÖOVñRÇf™ßû{Æö‹ªă°&:jOœ8!„èܹsdd¤›››ùC;vlƠª•âäÉ“ªc(‹÷]’ơóơË©că÷q•ơ™¤tƠqX 5IIIBˆªUó¾™A`` "11QuLEâ¥ÿ—ơ/ƠVÇÆÍî$kó3àÁtÔ8 !̣<‹Ñh4î̃½[Q­Ós@Au®e”çøå[ªă°:jëÔ©#„صk×°aöoß®-Œßºuë!C´Æ1$$DuL…oÀ'd=§g°ê8v¡_£ ²₫vW‚ê8¬ƒƒ~&GLLĹÖ­ÛF{zz®\¹2 @ủ‡‰‰Q÷ˆ‹‹»ßYPÅ|§8¼µI.7Nm£:½Èócç‡E‡Ø):d·ëu4âèçç7uêT__ß<ơôôœ4i’₫»FùuøŸTY×̣wWp_:j…M›6Ư°aĂ AƒBCCK•*%„pww 8pàï¿ÿ̃¦ 〠ºgúF³û ¨-èm:ù§÷âcªă°úºsŒÂĂĂcäÈ‘#GB¤¦¦zxx¨N h¿v[Ö~¥TDZ#}–ï·äîǺK\^ª:½Ó׈£d0.\¸ṕر . Ơq•/·ÆËzđSUDZ;aKËú¯ )ªăĐ;Ư8>}zÚ´i[¶lÉ̀̀Ô–¸¸¸´iÓfäÈ‘œ Ø‘+ce=ó9®§.n«^©[é£ZƯm̃áK㛫N@×ô5â¸té̉ˆˆˆ7Ê®Q‘™™¹~ưúgy&::Zu@°)y•”ơ囪ăĐ;5{ö́ùøăÍL—.m:†b0Æ·ÿ~Ơ1ˆy¦Ëb~́ÇƯbÔx«ơă²¸é¼ê8tMGăâÅ‹³²²„•+W>}úÁƒ÷îƯ{èĐ¡™3gj©333.\øh_¾|y¯^½ÂÂÂzê©1cÆ\»ví¡O9räÈ!CÂĂĂ5jù×_©₫„[óË1Ó¼­=êrj5¦t­!ë÷~=£:]ÓQă¸oß>!„››Û‚ :v́èææ&„puum×®Ư¢E‹ÜƯƯ…{÷î}„-O›6ḿرgΜiÔ¨‘‡‡Gttôk¯½–₫€§lÚ´©wï̃›6m*W®\XXØúöí»iÓ&‹_ÀühúlQÍ[u»æäè ë;½Ü€é¨qtuuBÔ®]»B… 9*[¶lƯºu…NNNùƯlLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2å~O¹qăÆ»ï¾ë́́¼hÑ¢~ø!**jÉ’%%J”øàƒ²³³UN€xơ×˲^9 ®ê8vÍüóuơål €ÓQă&„8{ölFFδ³²²Î=+é^ƠË–-ËÎÎ1bD¹rw„=ÚËËkíÚµ÷룣£SRR Ô AmIƯºuŸ~úéÄÄÄ#G¨₫œ‘–iỤ̀qÓƯ vå™Zed½=>½[`ătÔ85êñÇOJJ>|ø¥K—ạ̈+W®Œ9̣̣åË̀ïf÷́ÙăèèØºuk¹ÄÉÉ©eË–III÷»ÔfëÖ­Ư»w7_8ỵ䘘˜zơê©₫œ[0víYYëÀL[êµ 2Ưîu͉$Ơqè”âỵ̈ßxă ó/½¼¼„›6mÚºuk`` ŸŸ_bbbll¬vÑŒ‡‡Ç¼yóä( %ŒFăéÓ§}}}sÜ;((Hß°aĂÜÏ:zô¨Oụ̀å÷îƯ{àÀëׯ׬Y³]»vÚi— nÂÆs²ß‘ÆQ½Uê–ư‡V?óŸCÆ©Üâ@77ǹsyVVÖ‰'r,LII¹ßú÷“––f0¼½½s,×:ÔäääÜOÉÈȸyóf5Æ¿dɹ¼R¥J_~ùeíÚÍœsăuëÖưljûºxñ¢ê0¹vÛ4ëV '‡¸¸8Ơ‰;EWø ¦\§NTGĐ ?¯H»tZ»"Ûœv ́7nä~ÊÍ›7…§OŸ¾zơê¤I“Z·n}ûöíüqæ̀™Ă‡_½zµ%ă111ªß:râÎCúÑçë}²̃0(¬jUoƠ‰ „Ÿvv³æît<3̀§érüS+÷ŸơÜ#DvBqă8xđà"Ư¾···ƒƒCZZZå©©©âă9hw !&NœØ¦ÍƯƒ5C† IHHˆ₫ơ×_{ö́©öC¬ƯÎs¦ÿÙZ2n¼×¶²l§₫qÆ@nÇáÇíÛsvọ̣̈Ê=²˜’’"„×Y›swwwuuupp7_̃®]»èèè“'OªưÄk·́àY?[§¬ê8¸G9WRïÎkqñÆó€ĐƠUƠEÄßß?))Ië%íôÿ<ŸR®\9ó…Újí2́_‹Êú§₫uTÇÁ=V½bĐ1bîál €m̉×9»wï1cÆ©S§rôyæ?¯m¶mÛ6&&fÛ¶mÏ<óŒ¶Äh4nÙ²ÅÇÇG›92·đđđ œ:uJ»øZ£ÍƯS³fMƠ•&{ÊúÀß7UÇ ;:qܽ{wß¾}ÿúë¯k×®î/¿›íƠ«—££ăŒ3´ó…QQQ‰‰‰=zôpqqіܺu+..N^¶ö́³Ï !Æ+/»>räÈܹs½¼¼Ú·o¯ús¬Ø M'˜oY¦[BQéhºpá̃Kؤ£ǯ¿₫Úh,ü{¤Œ5j̉¤I-Z´8₫ü®]»BCC_}ơU¹Î–-[F¸zơj!D­Zµ̃|óÍ/¾ø¢S§N 6LKKÛ³gƒƒĂ„ Ê”áOđè¾Ùù·¬ûÖơ,À–PT¾êXî—Ø»sñô[r¼oẶªĐ5̣Z÷={>ó̀3̣êæ‚0`@Ù²eW¬X±fÍ *DFF1B›‘ç~^ưu??¿… ₫ùçŸ>>>mÛ¶:th`` ê °b'.ß’uơ2L§ÖÇ¡(ùMxxxBB‚¿¿ÿüá訣cèù̀…–7uöÿNU€^èèPµbáÂ…&LBxzz–+W.ÇLíú=³Ûák=ă@rom’µqjÁNÑ+m¿œMJ¯₫éNmI%ï’>xJu.»Æ‹Ùíßz]sêÔ©Ù³gkuJJʦr©jfW/Å_¿£:½ĐÑ¡ê9sæÈyØ’ß‘ơ’ÈPƠq`‘¡Í“ơ[.¨@t4â¸wï^­hÚ´i§N q:jưt䪬_ó/À–P|¦?ôơö»g¦¾µêô›­W€z:jœœ„^^^sçÎuvÖQ0±í́uY›ßÑÖ%Ûht̀ë¼svEG‡ª4h „¨P¡]#`KZÍÚ/ëU¯ÔUùđóËud]aüƠq¨§£Æqذa>>>§NÚ²e‹ê, ù̀ åü-NÖïµ­¬:̣­Uuï-g®kơ†SÉíƒ|U' ’Çơë×ËúèÑ£GU@A_oj?í\]uäÛªu½̃ߪƠƯæN›ØZu"*éèP5săv–¬K•pRÂÓƠ4¾™­:Åt4â8xđ`Ơ¦ˆ¹‡e½̉́2 X—;V÷¿‘ă÷~=óÙ3ŒöKGăđáĂUGP˜¶MÄÓsă¬Ö¿;˜lj›ÎÓ8öLG£¹˜˜˜sçÎ]»v­K—.®®®·nỰ̣̣R @>ül6éw—?ƠqP >nÎ×̉ïxpùf†i®́”îÎqŒˆˆ6lظqă’““SSS[·n=}út£ù¬ôí9³Û ®ÀôÖÍ|Έy‡ °%ÖM_#'Nœ?~îåiii3gÎLNN?~¼êŒ̣X»æU½e½ûBê8”Ñшă±cǾûî;­Ön?¨‘³9.Y²dÏ=ªcx¸¡?Ÿ’ơƯUÇA!èQ×4ø’—UÇ †Ç9sæFGGÇ>ø`ß¾}r¹——×ôéÓ]]]… ,PÀĂÍØ~QÖ#[VR…àÇ~¦ëâ_\|Lujè¨q(„HLLTÀC˜OßÈe1¶dæsÁ²~uÿÆöHGcpp°"ϳFăîƯ»…ƠªUSÀC¿|KÖơº>T ÀZ|öûyY¿ƯúqƠqPäUñ’ơ–3×UÇPLh‚1kLW×~̃µ†ê8(ræg#D̀;\€-°&z¹ªÚÁÁ¡zơêơëׯ[·né̉œVX“ồlY;;:¨ƒâPÆƯEÖ)·³TÇPLổ8ÆÓ§OŸ>}ú§Ÿ~ªQ£ÆOîTM6o8GăØÅcíÚµk×®Ư§O!Ä7>,ûÈ7n!®_¿₫ÇüñÇB''§ÀÀÀ•+Wª₫Đ˜üz"IÖ‚} °%X’N©w Zœ–é[Ê¥`Û wz9T-„đ̣̣jÑ¢E‹-´/ÏŸ?èĐ¡ƒ:tèäÉ“YYYƒáäÉ“ªc¸GÄÜC²^ÉôvfƠ€ºmfĐêˆy‡·i :€¢¥ß«ªK—.íáááááQªT)₫‹t*Ûhª]ơû+E!¼†¬wÄƯ(À–X8fggÇÆÆîß¿ÿàÁƒ8₫|îu¸VĐ•·VÅÊú³g¸g±=ơ[u,Q«<|¥gƯrÛ]SÜ8¦¤¤hmâ>|ëÖ­+¸ººÖ©S'́|||éu‰/¶ÄËzt›Êªă@•ê:¼µI«{-8jœÚFu"EHqăØ¸qc£Ñ˜caụ̀åĂÂÂx≰°°Zµj9;ëhX€ư¶¬ưK—PPä÷d²kÔ&׆+T¨ààà „HMMƯ³gO§<ùä“j3ĐÜ3}#—ÅØ±/»Xq÷¤…ÁÑ1³z«N ¨èe0ON¾|ụ̀¯£:,!„8øwª¬?î©:”̃¢’lgÿù7#`øÀ£X°çY÷óWUơu•ơ©«iªă(*4Eÿ¥'dưßÈPƠq Ø”ˆ²6?‡€Q|¨zơêƠª?@A=WÇ4 ÒF›¥¸q Tư È·~KËúÛçkª]Đ¸Â¼ƯwO`˜óç߃UT@áăP5€|[¸÷’¬6 Pº0÷_µdưÑ\ÅØ&Gùsà-ï®: øĐ8ÈŸˆ¹L߈¼-î"ëçU@á£q?oÜ‘uµ2nªă@Gú©63`·ÖœH’u·Ú~ªă@§&u©>yóy­»ö́ûíª¨N Đ(nË”)såÊ•½{÷îƯ»W.́ß¿ÿĂ¼²€N%˺uuƠq k%œ3 ÙZ}+Ăà^ÂIu"…Cñ¡êV­Z©₫Xäé_á85Äü;Äü;€µS<âøî»ï:;;ïØ±#11Ñh4j×Ê”*UJơÇ §ÛYÙ².]’$Ơ{´ûB¬Ăk0,e>ø—[ăUÇPtÔ8¦¦¦5*111ÏG¯^½úöÛoߺuKuLÀ¾üwÿeY÷¬[NuX™Ï’²>í¶ê8 JGcTTÔ?ÿü#„đññyóÍ7úé§;vüüóÏo¿ư¶···"!!áÛo¿U°/}¾?&ëåưj«+Ă„€ÑÑyî‡B¸¹¹-\¸0((H[èçç̉ºuë^½z¥§§3SX‘•–ơá8U°z:q|xÊ”)–<ư»ï¾Û½{·êO(VƯ盄¸[ ˈ–•d=yóyƠq< ]7…bÙ²eÙÙÙ#FŒ(WîîmvGíååµvíZmnȈ6mZÍ5U¿  X­íëëëëëk¾\»«a||üûơ×_Ÿ8qâ³Ï>óôôTư>€âÓf–éđL߈Âe₫UñĂªăÈ7Ư]S¸̉̉̉ ƒ··wå^^^Bˆäääû=ñàÁƒß~ûmddd³fÍ;–ß×Ơî‚cnƯºuª? »vñâÅ‚oÄNÍê—/̃(²b§èS‘î—Úfó&̃ÊŒ‹‹Sưv­?,ÊuêÔIu½°ñÆ1==]áîîc¹vÙÍ7î÷¬w̃y§R¥Jo½ơÖ£½nLLŒê·œªV­ª:‚ø÷º³²₫ }•¢₫ĐØ)úT¤û¥Më›Nß="æg§eT¿]ëÀ‹Z¹ÿ¬ç!²:=T³~ưú¥K—¦¦¦feeƯ¯Ă{(ooo‡´´´˵éu´qÇÜ&MtñâÅÉ“'3ß8́ÍÇÎÉú£NƠTÇ 2ŸĐ1‚ k£»Çèèè3f$$$h_6kÖ̀ÓÓ3<<üå—_:t¨ƒƒC₫̃³³——Wî¾3%%E!¯³6·{÷î%K– <¸^½zª?  X%§eʺtI'Ơq`›ÜK˜¾µ2 Æl €úqœ8qâ˜1cd×(¥¥¥Íœ9óĂ?|„múûû'%%i¢¤XăïïŸ{ưØØX!ĬY³‚ÿç¹çB¬Zµ*88¸K—.ª?$ ¨˜ÿ˜ …ë“§MƒÙï¬>­:€|Đшă±cǾûî;­vrr2 Z-G—,Ỵ̀3Ï4jÔ(_›mÛ¶mLL̀¶mÛyæm‰Ñhܲe‹OXXXîơ+W®,×ÔܸqcûöíaaaåË—Wư9EeGœil¾uuƠq`³̃oWéÚ»gÓ~¾ùÂä.5T'`)5sæ̀1ï¿ÿ~=êׯ¯-÷̣̣>}ú;ï¼sûöí ä·q́Ơ«×œ9sf̀˜ÑªU+혨¨¨ÄÄ常hëܺuëÊ•+...=öXóæÍ›7on¾…cÇmß¾½aÆŸ₫¹ê (*?¾"ënµưTÇóswI¼u÷Ôˆ„”;%U'`ª>qâ„¢sçΑ‘‘9®J騱c«V­„'ÒïfFuö́ÙˆˆˆqăÆơïßÚ´i¡¡¡¯¾úª\gË–-:u4hêÏP¦×‚£²^ñ2Ç©Q´̀'tŒ˜Ë%2€ƠĐQă˜””$î?ă@`` "111_ÛÔ 0`Ê”)U«V]³fMrrrddäÂ… sOî(OV1Mj±ïâMƠqXJG‡ªƒƒƒ8°gÏÜÆƯ»w !ªU{ÄùAºvíÚµk×û=Ú¹sçÎ;ßïÑĐĐPæe„mmúÿª{ê8° Ï×/·́àƯ$ï»Ù€3È+ £Ç:uê!víÚ5lذíÛ·k ăăă·nƯ:dÈ­q Q°A³ÿü[ÖĂZ<¦:́Â/Ơ–ơKÿ=®:‹èhÄñơ×__³fMbbâúơëׯ_¯-0`€\ÁÓÓsđàÁªc¶æÔUÓ ùU}]UÇè—Fưüü¦Nêëë›ç£“&M P°5÷Nßȼ÷(>sznÚ6à‡ªăx85Bˆ¦M›nذaĐ A¡¡¡¥J•B¸»»‡„„ 8đ÷ßoӦꀀ ¹bq¬]̃½[̣çơ'+Êz₫îTÇđp::T­ñđđ9räÈ‘#…©©©Ú̀‹È³³_iˆ>[Ír¥N₫ï_—Ăÿ¤Ö­Àï|@×ô5â(ÅÄĬ_¿~ơêƠ©©©YYY¹o6  PüŸÙơÔÿy¾¦ê8°;æ7·dBG@ÿt7â=cÆ y»êfÍyzz†‡‡¿ụ̈ËC‡•·Ø€@¿R²>í¶ê8B_#'N3fŒ́¥´´´™3g~øá‡ª6¥̣ÇÊúû>¡ªăÀN ~Êt¦cß%̀ËèÇcÇ}÷ƯwZíää$—ËQÆ%K–ä9=8€Gsáºi€çÅ'üUÇùœéÚêE{/©àAtÔ8Ι3Çh4:::~đÁûöí“˽¼¼¦OŸîêê*„X°`ꘀøóœéÔáF•S]u@¬À„€ĐÑ<¯¿₫ú5kׯ_¿~ưzmá€ä ƒV°z©w ².鬣ÿaϼƯLne °%EHG3üüü¦Nêëë›ç£“&M à–h@A™_|°r—Å@/Æu0ă>víÙl @QÑQă(„h򫎠  ZªT)!„»»{HHÈÀÿư÷6mڨ؂Íf'u ö-À–€Â4¾£©qœ°ñœê8̣ £CƠ‘#G9R‘êáÁ ï´Ế’ƠN5˨ÜĂËƠùÆí,­N¼•éçî¢:€{èhÄñ«ÿ‰×–Đ5…®›ÙqêU§†Î˜O)Ê„€éhÄ1::ụ́åËBˆÖ­[WªTIuÀö¹89¨Ü£¥Ù¤<;Ínn@'t4âØ£G­¸pá‚ê,€m±"VÖ“»ÔPÈĂ³uÊÊú‡ƒ—UÇp5C† yöÙg…sæ̀¹råê8€ új[¼¬G…?®:‡Ÿúבơ ‹©à::T=lØ0!Dụ̀åOŸ>Ư¡C‡Zµjùøø88ä<”6sæLƠI«t.ù¶¬:j7nÜ(ëôôôưû÷«NØ”{.‹y…Ëb __?4ôçSZưụ́“ßôª©:€»tt¨@‘:üOª¬qùV-wƠ‰¡«Æqøđáª#6kÀ'd½èÅƠq€‡˜Ö=0bîƯ“+"æ}ïIƠ‰Á¡j€u ñ“ơéÄtƠqÜ¥£ǯ¾úÊ’ƠÊ•+\»ví%J¨ X‡ÈïËz̃¿j©XäƠ¦ß₫ïÇ™;.¾ñÔcÛ€B £ÆqÖ¬Y–¯øÅ_©N Xï÷_’ơË+¨X$ªWMÙ8ùé# Öz¨:66ö¥—^JMM-ø¦Û¶7₫¦¬ëVà₫ï€G§£Æñµ×^{úé§µºL™2Ưºu4hPÏ={́î™M4yơƠW»wï^¶lY!Äơë×,X :5 wóÉéa]–D†Êºç‚#ªăĐÓ¡ê—^zéÅ_BôêƠḱر®®®ÚrƒÁđÅ_üç?ÿ9räÈûᅵ––öÿ÷»víÚ¾}ûo¼¡:8 kÿ¤dȺ²«ê8@>¼æß{ñƯ»F¾ª:=8~ùå—ñññåÊ•ûè£d×(„prrzûí·+Uª”––6cÆ !D©R¥̃yç!Äßÿ­:5 k“7Ÿ—ơˆ–•TÇ̣­Éă²̃w]uÀ̃é¨qܹs§¢bÅ9S988!º{Đ­té̉Bˆk×®©N èÚ»«ÏÈzZ·@Ơq€|3?¿BÎ́@5·nƯB=zôøñă9:{ö́áÇ…F£Q[²nƯ:!„v²#€îߪªNØ/8V®\yö́ÙåÊ•ËóQ—ñăÇk£’ tîÜYuj@§ÖL’u›>ªăâæbúk•r›Ö€2:j…aaa7n|ï½÷êׯïåå%„(Y²dơêƠ{÷îưÛo¿ơêƠK[­N:C† ™7owî'bÙqj¦o„•[iv®…ù÷6€b¦£CƠ’%Köïß¿ÿ₫BˆÔÔTwww‡ë|üñǪcz—i0ÊÚ½„“ê8@´̣•ơ–3×UḈ—¾F¥˜˜˜ơëׯ^½úÖ­[YYY7nÜP°&ï¬>-ë «©‚εÊÈzÅQ&ÔĐ]ă1lذqăÆ%''§¦¦¶nƯzúôér.öùæ ²Ó¶ê8@!0ŸàÙùÜ~PC_‡ª'Nœ8₫üÜËÓ̉̉fΜ™œœ<~üxƠ½KH¹#ë².ªă…ĂÉÑ¡àP@:qØ·oŸ\îåå5}útíîƠ ,PĐ»}oʺ{mî®Ûñyײ₫zûEƠq{¤£ÆñĉBˆÎ;GFFº¹¹™?Ô±cÇV­Z !N<©:& k‹÷]’ơ¿ê—+À–=z̀«¤¬Ï&¥«Ø5IIIBˆªUó¾%@`` "11QuL@×^ú¯éVïK_ª­:PÈ̀'%eBG øé¨q Bäy£Ñhܽ{·¢Z5&ûV±´¬]º¥:`wtÔ8Ö©SG±k×®aÆmß¾][¿uëÖ!C†hcHHˆê˜€~ øá„¬¿á²ب¾ ËËú?%¨ØưL˜˜˜Ø­[·Œöôô\¹re@@€ê¤£:îw¿³ l‰Ă[›dmœÚFuœ‡°“bu¬b¿X×·zÁYÅN±7vû·^G#~~~S§NơơơÍóQOOÏI“&é¿kT9”*ëZ₫îªălG!DÓ¦M7lØ0hĐ ĐĐĐR¥J !ÜƯƯCBBøûï¿·icûÿV̀üBó{l¶gAoÓiK/.>¦:`Gôuç!„‡‡ÇÈ‘#G)„HMMơđđP°®Ư–u ?·l Đ»¾ Ë÷[rw%.ÿ72Tu"À^èkÄ1ºFÀBÓ¶ÆËú§S(ræ—Wï¾¢:`/t4☾oß¾Ă‡_½zUkôóó«[·îO<áîÎ [Àƒ¼¹2VÖ3 R(r«^©[é£Z1ïđ¥ñÍU'́‚.ÇŒŒŒ%K–̀™3'999÷£nnnƯ»w>|¸ê¤€éfj ø˜ßBæ̣Í Ơq{¡₫PơÁƒÛ·oÿé§ŸæÙ5 !̉ÓÓ—,Ỷ¹s烪 è‘ùe1Ñư먓·Z?.뉛ΫØÅcrṛ«¯¾zé’éîº...!!!...æk¾öÚk×®]SĐ¡ƠÇM³Ÿ>W§¬ê8@1™̉µ†¬ßûơŒê8€]P|¨zÑ¢E))wOjnß¾}ß¾}5jäàà WØ·oß‚ Ö¯_/„¸qăÆÂ… ‡®63 +¿Ç₫›jQÍ[u X99:²ï«‘™íæ¢₫0`ÛÿŒÉ[ öèÑcÆŒ76ï… 4˜>}úóÏ?Ÿc}vsÈéaò¿çåµ2âÆñÂ… Z1tèЬ&GÏŸç,ྼƯtq¹Pl:×*#뤴LƠqÛ§¸q¼yó¦Â××·B… XÍÏϯlÙ²BˆÔÔT · ؃÷ל•ơ¸ÜÊö¨}éFµ¿HR°qGƒÁ „ps{ø].´;jëĐ|úû9YïHă{´êÓÑꈹ‡TÇlçÖêjªéÀœ—+©a§\MȲ™Ó(bºøcsçÎ;w>xôôtƠ1}‰˜g\1t́ÍgÏT—Óñ¼µ*vjD êD€Í̉Eă˜˜˜Ø¿Ơ)+³ë¼é₫¼-™ˆvlt›Ê²qübK<#Pt8T X¥^–ơ³Lú »ç_º„¬ă¯ßV°Y4€UzaÑ1YÿÄma÷̀'t4¿ '€Â¥øPơêƠ«U«×øqOYü›‰Û€¢¢¸q äL ßư#믟 RĐ…̃a₫KÜ=…cÁú5ªP°íȇªëóÍοe=¤ùcªăºđßÈPY÷_zBuÀ6éâªêb°|ụ̀eË–>}ºT©R­Zµ5j”ÏÖOOOÿá‡~üñÇ‹/–.]:((hÀ€O=ơ”ê÷ˆ“W̉d]½̀Ă'Ï °ØÅˆă´iÓÆ{æ̀™FyxxDGG¿öÚk˜2++«ÿ₫Ÿ}öÙ•+W|̣É5jüơ×_ ˜9s¦ê·ˆˆ¹¦ÿ™¾0÷Ÿçkʺߒăªă6Èöǘ˜˜¨¨(ÿuëÖEEE­_¿¾oß¾‡2eÊư²lÙ²ƒ6hĐ`Ë–-³gÏ?₫Ï?ÿ́íí=sæ̀'8üÅbM#!₫îªă:̣J“Y/Ü{IuÀÙ~ă¸lÙ²́́́#F”+WN[2zôh//¯µk×fggçù”uëÖ !̃ÿ}yíÀÀÀAƒ †;v¨~C°k³v˜În|µi@¶ئÚåMÿMøû¦ê8€­±ưÆqÏ=­[·–KœœœZ¶l™””´ÿ₫<Ÿçîîj¾P»<>>^ơ‚]{ă'ÓơÔQ½j`K€m2?Ăü¼…ÂÆ/1§OŸöơơơơơ5_$„ˆoذaîg}óÍ7ÎÎ9?™cÇ !*Uª¤ú=¯é±‹7î¨ØoÓ̉̉ ƒ··wå^^^Bˆäää<Ÿ’cÉ®]»¢¢¢J–,Ù½{wK^7888Çíđ7T¹xñ¢ê…àÉù¦ï¯:”‹‹S¨@lc§ØØ/ưëy~wèîÜÛ}½ëÛ.₫ª” ́kשS'ƠôÂÆGí̉iw÷œxxx!nܸñĐ- †ï¿ÿ~̣äɃaêÔ©~~~–¼nLLŒ%«¡8U­ZUu„‚º|ËÔ)ëh ·´b“¬}¿̀¯Zơ»·6iơïç̉¬ưíhlă]X¯ÜÖsÙ o½½½̉̉̉r,OMMÿw|€¿₫úëĂ?ưôÓfÍ©~C°_Ûă®Ëº‰ÙƯƠ}:%%ÅÓÓ4H£æïŸ÷‰/ÙÙÙo½ơÖo¿ưÖ®]»qăÆ= ¿͵ô,Yû—.¡: kƯj›N+Zs"IuÀvØøˆ£¢mÛ¶ƒaÛ¶mr‰Ñhܲe‹OXXXOY´hÑo¿ưöâ‹/Μ9“®zđÑo¦³ßk[YuÀ ´®nº¯́o1ÉØÛo{ơêåèè8cÆ í¼F!DTTTbbb=\\\´%·nƯ‹‹Ó.[3‹/.]ºô»ï¾«:;p׸ơ¦ÆñÓÎƠUǬÀ=:r´($¶¨: `Ô¨Q“&MˆˆhÑ¢ÅùóçwíÚúꫯÊu¶lÙ2räÈÀÀÀƠ«W_½zơÂ… nnn}úôɽµgŸ}622Rơ{‚}I¹m:Híæbûÿ́…¢tI'YßÉÊ.À–˜Ø~ă(„0`@Ù²eW¬X±fÍ *DFF1B›‘'7mÜ1==ưèÑ£¹å?óÁ’U\X́£NƠ₫½î¬V₫ờÄg­ ÊÁh4ªÎ`k‚ƒƒ™ÇQoâââ¬w4‡ÿÍH'„0Nm£:N¡±êbĂll¿ØÆíÛ`·ë9́èÚÏG®Êú™ZeTǬŒo)Y_º™¡:`ơh]{î»#²6?Ù€%̀Ïî0Ÿ À£¡q¬†£w¿̣穪¦;„í‰OQ°z4€~ ưù”¬§FÔP°J=ë¦ăưï₫˪ăÖÆĐ¯Û/ÊúÍV«X¥åưj˺Ï÷ÇTǬ# Sg’̉e]É»¤ê8Đ8ze~"ÿªơTǬجÁ²¸́¤ê8€£qtêøå[²®_Ñ£[́Ưÿ5«(ë¹%¨X1G@¾Ø/ë~*¨X½àr¥d}äŸ[Ø`×h=zkU¬¬¿{¡–ê8€Ơûª{ ¬»Í;¤:`­h¶¯c°éÆKqÉ·UǬ# ;½›f YĐ;DuÀF z̉t¦ăôm °%À~Ñ8º³ô€iâ¾ Ë«؈Ù=M×V_qª[́# /]0Ưí‰ÇJ«€ # /æÓ7®PWuÀ¦,ëkº‹L÷ù‡ °%ÀNÑ8úr%5CÖyqĂ 0ơªgºoơÊ£‰ªăÖ‡ÆĐ‘Ï~?/ë·[ssj đ5«â%ë?Î\S°24€ŒYsFÖŸw­¡:`ƒV™b~fKĐ8z‘™-kgGƠqÛTÆƯEÖ7ïTǬ # óLƒ«^á² ¨Œm_EÖÿ^wVuÀĐ8z±ñT²¬Ÿ®Y¦[đ wªfª7œS°&4€.üz"IÖ‚}UÇlœGI'Y'§eªX G@"æ’ơ*¦o˜ùOY·y\"XÆĐ…l£©.é̀&P´ÂkøÈz{Ü Ơq«Áß'@½7WÆÊzâ3ƠUḈBD¨Ÿ¬£_Q°4€zÓ¶ÆËúƯ6•UḈ‚ù-={.8ª:`hÅ.\»-ẹ̈¥K¨À}Ñ8™Oß8™»ÅŨ_£̣²~ă§Ơq+@ă(v(!UÖ/5(_€-ÈŸï^‘ơ¬«XG@¥ïöü#ëŸđW°;U|]e›˜¦: w4€J//=!ëïû„ªØó #æ2¡#đ4ûU§‚‡¬O^aÄxG@™¾ÿ=.ëÿ<_SuÀN h\AÖß́äLGàAheí»$ëW¨Ø©¹ÿª%ëA?rm5đ 4€û/̃”uị́îªăđp4€æÓ7®z¥n¶  ÷1ÍËó¯EÜE¸/G@¿oÜ‘uU_7Ơq»Öç ÓªËrßjà¾h¦üqAÖĂZ<¦:ѰRiYïªă¸G 'ÓŸÅ[ƠqƯ¡qUǨƒ²fúF@ò*+}´Cu@wheJ—tRÀ=:ûÊúZz–ê8€îĐ8Ågô¯gdưQ§jªăÈC§edư˱DƠq}¡qϤMçeưAû*ªăÈĂª¦£ƠLèä@ă“K73dí[ÊEuysqrPĐ/G ˜t3º0̉ 7“»ÔơÈ•±ªă:Bă“ƯRdưTU/ƠqÜרđÇeưåÖxƠq¡qĂ’—eƯ³n9Ơq¡#—È#95x¬´¬ü“ª: 4@‘{uÙIYÏê¬:‹D6(/ëy»ÿQĐG Èưç¯Yÿ_³ªă°È¢CdưÊ'TÇtÆ(ZÇ.Ư’uPÙRªăđèh¢e~ZưJ¦o¬Ê¼Ơ’uä÷ÇUÇÔ£qÖÙ¤tY×,Lj#`M^n\AÖߦ: #P„¾̃~QÖ¯?ÉÙ€ơ©[ÁCÖ{ăoª(Fă¡a?Ÿ’ơœ\O XŸ{'t<¤: #÷UÙÇUÖÿ¤d¨(Fă•€wÈú‡—¸[ `­F¶¬$ëg₫Ă #́#PT₫I¹#ëçësjÀZ}Ñ-PÖkN$©¨Dă‰-g®ËúÉ*^ªă(SaÈVP†Æ(æÓ7®búFÀÊ­|Ù́™¹‡ °%ÀºÑ8E"åv–¬ưÜ]TÇP ]Cưd½>&Yu@G đ['ë÷ÛUQ@!hSĂGÖëNr¦#́#Pø>úÍÔ8~̣t5Ơq‚{'täh5́#PÈ®¥›R{”tR@áp/aúqÎ4UÇÔ q YÄ\Ó4o+¹,°!æ̃Y}Zu@G m»!kó“¢X;óS–?ß|Au@G 0E¾"ë³Ë0ØóÌ&ù́#P˜z.8*kS¶Ç|ZÖn\"ûă¬:€~-_¾|Ù²e§OŸ.UªT«V­FåăĂaG°kæ7‚ÚSu ¸1☷iÓ¦;ö̀™35̣đđˆ~íµ×̉ÓÓUç‚®½ñSŒ¬¿́X€-Đ/ó[Ï¿ÿ’ê8@±¢q̀CLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2Eu4èÚ¬Ëzx‹Jªă(?¼T[Ö‘ßW(V4yX¶lYvvöˆ#Ê•»ûoåèÑ£½¼¼Ö®]›Í½í‘·ØÄ4YWñuU€ÂGă˜‡={ö8::¶nƯZ.qrrjÙ²eRR̉₫ưûU§ƒNÈ5&¿Ëb›6§g°¬_ùá„ê8@ñá☜ŒFăéÓ§}}}}}}Í— !âăă6løà-œê2Ûá­Mªßr‹+ø&,T§‚‡ê7  ½₫dÅA?̃=§ỹîæí₫§è_³ø~ƒÁ"]f«N cNiiiƒÁÛÛ;Çr///!Drr²ê€Đ»^µJÇÅñ+₫á.^¼¨:̣À~±Pu—3×2U§cNÚ¥Óîîî9–{xx!nܸñÛ„]Y6°‘êV£jƠªª# ́K¬yƯ¿î”Ưw²8ñö…Æ1'ooo‡´´´ËSSSÅÿÆ̀%-©âcs,LNËô-åb¾ävf¶«KÎsL/^¿ó˜wIK^¾™á_º„ùC¶ÑÉÑá‘7˜çB£Q8Ü»ÉR2*x–xä fdK8ß³ÅÄÔL?—G̃à­ ƒ{ 'ó%×Ó³¼Ưœs=÷öc̃®–l0÷Ós¿Äư+„ˆ{¿™`‚Ê–º=©uƠ æ~èRJFù{OŒF'‡‚ü~Îă7X¶Qäø•Ÿûuóơ*w²²K:ßóW)ñV¦ùṛ»ÁÔ;’÷ụ̈¼‘å•ÇïgK7x-=Ëç̃§§eJYöû9Ï…WS3Ë̃û(Ă`,ádÑúûâßÂ.Ñ8æä́́́åå•{d1%%E!¯³~€ª›ÆÆÄÄK—.½ß –́{ØM4…`Ï=­[·–KœœœZ¶l™””¤ư:@Q‹‹‹sww 5_(„ˆ×¾d7)‘••ơÎ;ïøøøŒ=:÷£́”â·uëV‡îƯ»›/œíëëëëëk¾<((H˜u-(Rß|óMî;&„¨T©’`7©óơ×_Ÿ8qâ³Ï>óôồñ;E‰£Gúøø”/_~ï̃½ß~ûíçŸ₫Ë/¿¤§§ËØ/ůK—.®®®&LعsgzzzBBÂ|pñâÅ^½zi?8́”bĐ¼yó¶mÛ¶mÛÖü¼RÉ’]`'»ÉYu«—––f0¼½½s,÷̣̣÷₫‰¢’cÉ®]»¢¢¢J–,©¬°›”8xđà·ß~Ù¬Y3­7ÇN)~7õ¬Q£Æøñă—,Y"—WªTéË/¿¬]»¶`¿¨¼hÑ¢₫ưû÷ïß_.ŒŒŒ3fŒV³S”³dØÉnbı ´ÿÔƯƯƯs,÷đđBܸqCu@»c0.\8pàÀ´´´‰'úùù v“ éééï¼óN¥J•̃zë­û­ Ø)ÅëæÍ›BˆÓ§O¯Y³f̉¤Iươ×–-[†ú÷ß>\Û#́—â—’’2qâÄ[·n…††¾đ íÛ·wss[±bŦM›´Ø)ÊY² ́d71âXP̃̃̃iii9–§¦¦ÿưŸbó×_}øá‡gΜ©P¡Â§Ÿ~*OUa7¿I“&]¼xqÉ’%̣¥Ø)ÅÏƠƠU+&NœØ¦M­2dHBBBttô¯¿₫Ú³gOöKñ{çwöíÛ7zôè—_~Y[’đ /Œ9rƠªUƠªUc§(gÉ.°“ƯĈcA9;;{yyå₫O"%%E!¯«BQËÈȘ0aB¿~ư†ºvíZóœÙMÅl÷îƯK–,yươ×åơ¹±SŸ»»»«««››[xx¸ụ̀víÚ !N<)Ø/ÅîÊ•+›7o®Q£†́…ƒÎ̀̀üùçŸ;E,Ùv²›h ¿¿RR’ö!ÅÅÅi©Ng²³³ßzë­… ¶mÛö·ß~2dHîQ.vSq̉nz1kÖ¬àÿyî¹ç„«V­ î̉¥‹¶;¥ø•+WÎÅÅÅÁÁÁ|¡öó’••¥}É~)NIIIBˆ*UªäX^­Z5!ÄƠ«Wµ/Ù)ÊY² ́a7Ñ8‚¶mÛ †mÛ¶É%F£qË–->>>aaaªÓÙ…E‹ưöÛo/¾øầ™3ï÷_»©8U®\ù™{5õ\đ̀3Ï´lÙR[RüÂĂĂSRRN:e¾P›(DεÉ~)NUªTqrr5æËcbb„5jÔĐ¾d§(gÉ.°‹Ư¤zr[đ÷ß׬Y³S§N7õÔ–̀™3'((ḥäɪ£Ù…́́́víÚ5hĐ ==ư«±›Ô:zôhî;ǰSßñăǃ‚‚zơê•””¤-9|øpXXX£Fµ%́—böúë¯}ùå—̣æ=§NjÚ´iíÚµOŸ>­-a§›÷ß?Ï;ÇX² ́a79ïưf̃¼y“&MªX±b‹-Ο?¿k×®yóæå¾,…îÊ•+-Z´pss«^½zîGŸ}öÙÈÈH­f7)t́رç{.""âóÏ?7_ÎN)~ß|óÍ_|áååƠ°aĂ´´´={ö888|₫ùçO?ư´\‡ưRœ{ö́ùÏ?ÿT©R%$$$))iß¾}ÙÙÙcÇíÓ§\R<Æ»|ụ̀eË–å>EÛ’]`ó»Éiüøñª3Ø‚°°°*Uª\¾|yûöíÎÎÎO?ưô¤I“rÏxŒ¢••u%/5kÖ”Wɰ›ºzơê?üÜ¡Cóǻ”â×°aĂ€€€³gÏ=zôÎ;M›6ưâ‹/4ib¾û¥8•*UêùçŸB\ºtéàÁƒ™™™ 6œ}z¡DÚµk×[o½•˜˜¨}™––¿aÆ₫ưû=ºè> ª0âÀRû÷ï×:”*U*÷ QQQ+V¬X±bEÇs>>7BF­5}´a|XN‡₫Ûo¿í̃½ûÁ›µäƠÛ·oïèè(„8qâ„¶$GăxëÖ-y˜XödzdË“Ëo†~øAº~ưúÆ7ỉ$<<¼pO© \ ̃{ï½^½zƯ¾}Ûh4NŸ>}úôé>>>)))ƒA[¡dÉ’Ó§O„¾-88ØÏÏ/11Ñ`0ôîƯ;<<ÜËËëï¿ÿ̃´i“¶Bûöís?ë·ß~kÓ¦MơêƠ9¢,vtt6lX1|~i9÷íÛ·»wï^«V­k׮ɫIrđôôÔΜ5kVlll¿~ưœôËÙÏϯaƲ“«V­œ£QSªT©R¥JiÛ|ÿư÷W¯^íàà°mÛ¶ß3&¿É_ươeË–¥¤¤lܸ±oß¾7•ç\¾ụ̈Ẹ̈ê"6ƒGù4₫|ó룯]»&»Æ+~ươ×0Ü(„pttœ9s¦vp311qụ̀åÿùÏÖ®]«mܸñÀs<¥Q£FW®\Ù¹s§Öºi³äéE;thhè3Ï<£Ơéééû÷ï‹‹«T©’¥Ë±5­8pàÀäÉ“-w4Ÿœ(÷qj‡Ö­[ËWß´iÓï¿ÿîïïߤIm¡6Tœ'Ë“{zzN4I ̃½{÷Œ3Ö¯_¯ÍøÓ»wï¡C‡ơ^PühäÏO<ñÛo¿3¦qăÆeÊ”)Q¢DƠªUÛ´i3f̀˜uëÖµjƠê‘·\¿~ư 6 <¸N:åÊ•svvöôôlĐ Á„ .\(¯¶–¼¼¼–,ỴüóÏW©RÅÏϯcÇß}÷Ư /¼P ‚%/=ỵä‘#G¹¹¹…„„ôíÛwÙ²ey^]>f̀˜®]»–)SÆÍÍ-00Đ’ ‰:v́¨­¹®§–Û B8::Ö¬Y³ÿ₫+V¬h×®öèêƠ«åaèÜ,Õ¦M›•+WöêƠ+44ÔÍÍ­R¥JíÛ·_¼xñøñă-y¬CîùÉ@Ͼúê«Y³f !Úµk7sæL;yéG••µyófqŸ£üđ8Çl“³³3-#€ÂÅ¡jX„Æ¡q€E¸8aÄ¡q€Eh`GX„ÆùµĐ¦Ưđˆƒ§IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/fcm_101.png000066400000000000000000000347721466512601400215730ustar00rootroot00000000000000‰PNG  IHDRh\­A9ÁIDATxÚíƯ{˜Uu½øñ5€ÆcÈ5H8ÀhJ`'¹¨\́P‰BÆ/5́ä•$$ÄK*铉 y đ`¦G¢à˜h ^P@î71uF‘™ưûcwÆƯaXa¾{Ï~½Íw/˜Ï|Z¼[{ï5y‰D"€©z²ƒp á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆ¥Aèê ÂÂÂĐ#‡ĐºuëB†p<$röïSU………v£’ƯHe7RÙ46$•ƯH•!»‘!cÔ>/U‹p á@,€X„#±G­… †!ƒØTv#•ƯHcCRÙTv#,á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ’Óá¸yóæÂÂÂ×_½æĂv́ØÑ«W¯ &„ ¤œǹsçđ˜D"qƠUW}ôÑG¡‡¬Aè())Y¿~ưO<ñĐCđàxॗ^ =2@x¹C‡ưÛß₫çÈ 6ÜvÛmÇs̀ÚµkCO X.†ă´iÓ>ưôÓ(æÍ›÷â‹/îï°}ûöMœ8±  `̉¤I\pAè©ËÅṕׯ_̣ÁâÅ‹k8́;îX³fÍ}÷Ư×´iÓĐ#„—‹áÇ+fÏ=jÔ¨>}ú¬^½úŸưí………i+ . ư=…QTTz„ b7RÙTv# Ie7RÙ!C†„₫¾3…p¬FYYÙĉÛ·o?~üøÿÛŸ°nƯºĐßD騱cè2ˆƯHe7RÙ46$•ƯHUû»QơŸơªWˆr„p¬ÆôéÓ‹æÏŸŸŸŸz€L‘Ó÷q¬ÖK/½4₫ü‹.ºèøă= @qÅ1Ư† ¢(9sæ̀™3S×,X°`Á‚.]º<ùä“¡g@8¦ûêW¿úƯï~7ueÏ=K–,iÛ¶mÏ=[·nz@€0„cº~ưúŨ¯'iơêƠK–,éƯ»÷-·Üz:€`¼Ç€X„#±äôKƠS§N:uêëÑ£‡û2¸â@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#[̃y'ôYK89äơ×£¶m£ ö{@—.Q^^è)2•prÅë¯G'œEQ4cFơíØ¥K´qcEÚ zÂÈÇÿùăªíXÝprH"ñùăÔvL«ÆÔĂ¨Ô ôµ*‘øü•è3¢(\5Ä"œSµSŸ`¼T ä¢jQ5ÔL89ªsçøå•W† ă G Uư ơ₫îÑ@%áäœưƯyG;ÔL8¹¥êwöw̉G ‡́ï~Ú áäị̈ÖøCèq2prņ Ÿ?®ùv<^z\€̀#’LĂîטHD^ưö·¡ÈHÂÈ-¼Ë·jØá@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±G²3ϬéÙ BÏü_åt8ñ¼¹°°đơ×_¯úTYYÙ “TĂư€¬ «·wï̃iÓ¦₫ù;v́3f̀ÓO?Ư§OŸĐCe‡´jܼùó×§µ#d5áXñăÇÏ™3gĐ AÏ>û́å—_^y_jVíwª½Gu„c5æÎû́³Ï{î¹w̃ygË–-C“5j¸_£v€:@8¦K$óæÍ;âˆ#®ºêªĐ³d™ß₫öóÇU3Ö@Öñ©êtï¿ÿ₫[o½•ŸŸ?räȪÏ>|Ô¨Q¡g̀PÅÅQAA´{÷~ï×XyG7t€l$Ó%oUVV¶jƠªªÏúˆLÍ‹p€d€́•Óá8uêÔ©S§¦-~ưë_wF€ª¼Ç€X„#±GbÄ"ˆE8‹p á@,€X„#„öÊ+¡'€XrúGBxyyƠ,ú‘̃d$W!œj«±†uJ8B 5סv óG!NæåEË–…>'ˆE8‹p á@,Â2Ø5¡'€Ï G¡I“X‡{lèAàs~r „đá‡Qt ›̣øù1dW!œ̉P5y„#Ơ¯_5‹ª€Œä¥jêùçCOq¹â@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8KN‡ăæÍ› _ươjŸưĂ₫0bĈ={öíÛẉäÉÅÅÅ¡ç)§Ăqîܹû{ê¶Ûn›2eʦM›N<ñÄ&M<úè£?₫ñËÊÊB LƒĐPRR²~ưú'x⡇ªö€uëÖÍ5«U«V<̣HË–-£(6mÚœ9sf̀˜qÍ5ׄ Œ\¼â8tèĐ‘#G(zøá‡+**Æ›¬Æ(&MÔ¬Y³§Ÿ~º¢¢"ôøaäâÇiÓ¦}úé§QÍ›7ïÅ_¬zẠ̀åËëƠ«wê©§V®Ô¯_ÿä“O~â‰'^}ơỠ½{‡₫ÈÅṕׯ_̣ÁâÅ‹«>›H$6nÜxä‘Gyä‘©ë]»v¢hûöíÂÈM¹5+---//õ¼yÚz³fÍ¢(úàƒâü!………i+ . ư…QTTz„ b7RÙTv# Ie7RÙ!C†„₫¾3…pL—üètăÆÓÖ›4iEÑ={âü!ëÖ­ ư}d;†!ƒØTv#•ƯHcCRÙTµ¿UÿY¯z…(Gäâ‡cjÖ¼yó¼¼¼̉̉̉´ơ>ú(úßë9H8¦kĐ A³fͪ^Y,))‰¢¨̣sÖ¹F8V£U«V»víJ–b¥-[¶$Ÿ =@±ƒ *//₫ùç+W‰ÄsÏ=WPPĐ³gÏĐÓ„!«1bĈzơêưæ7¿I¾¯1¢Y³fíܹó¬³Î:́°ĂBO†OUW£mÛ¶&L˜>}úgœÑ¿ÿmÛ¶-]º´Gÿ₫ïÿz4€`„cơF}ÔQG=₫øăO=ơT›6mF5v́ØäyrSN‡ăÔ©S§Nº¿g‡:tèĐĐ3d ïq á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#*Ï=ååƠt@ûö82p„Câ¹ç¢SO¢h¿iؾ}TTTÓi„#¯½öùăªiXYE„#cÇF·Ưöù/SÛ1­‰Đ³@<•jÛQ5½„ê²±c£(~úÓ¿ÿ²S§©ÏªF²‹+ph¥]w¬¤È:¹±c£æÍÿaE5„#ríÛG»wÿĂ[đ„#Zû»óv ëG8„̉ªqóæ-û»Gd>á‡Jµw̃©á₫á„#5ܯQ;¥„#Û·₫¸êg¨SÛqüøĐ³@»fÍfÍrÊ)'Ÿ|rƠc¦M›VQQqÍ5ׄ₫AÍ÷kL¶#d‹LÇ'Ÿ|̣k®)--M₫r̃¼y ¸ưöÛ6l˜z؃>X^^.Œ~ă¶mÛ&MTZZzê©§^sÍ5?ùÉOZ¶l¹xñâŸV₫è_jKF_qœ9sægŸ}vÉ%—Œưß—ôÎ=÷ÜóÎ;oÑ¢EO<ñÄĐ¡CCC2úăêƠ«óóó/»́²Ê•‚‚‚_ưêW 4˜1cƧŸ~z@€’Ñá¸}ûö:vØa©‹]ºt9÷Üsÿö·¿=øàƒ¡È!Í›7ë­·öíÛ—¶~饗6mÚô®»îÚµkWèrEF‡ă±Ç[VVöĐC¥­L4©¤¤äk®©¨¨=&@NÈèp=ztES§N0a¢E‹̃}÷ƯʧÎ:ë¬~ưúưùϾ́²ËÖ®]zR€º/£Ă±W¯^cÇÍËË[°`Á%—\rï½÷¦>{Çwœt̉I‹-:ó̀3ËËËC PÇet8FQtÉ%—ü×ư×…^ø¯ÿú¯GuTêS5={öơ×_ߥK—¼¼¼Đ“Ôq}Ǥ®]»Nœ8±Ú§;́°sÎ9çœsÎùä“OBO P—eúǘ6lعsçĐSÔeu$8Ô„#±GbÄ"ˆ% nÇ“f÷îƯ«V­zçwÚ¶mÛ·oß;w¶hÑ"ôPu_6…ă®]»îºë®Gy¤¬¬,¢óÏ?¿oß¾Ă‡ïÑ£Ç7̃XPPz@€º,k^ª₫́³Ï.½ổ¹sç6mÚtøđá•ë-[¶\¼xñÙgŸ¬I‘¬ Ç{î¹gŧœrÊÂ… oºé¦Êơ‡~ø̀3Ïܺuëœ9sâ—Û»wḯÙ³¿÷½ïớÙsàÀW\qņ Bï@HY/½ôRưúơo¸á†F¥®×¯_ÿÚk¯mÔ¨Ñ3Ïâˆ#Ö×zơƠW£(:ÿüó“ƠEÑI'Ô­[·­[·~đÁ¡w Œ¬ ÇîƯ»¿óÎ;o¼ñFƠ§Ö¬YóöÛowëÖí`}­6mÚDQ”Úˆ‰Db÷îƯơêƠ«LI€\“5áøƒü //oüøñ«W¯N]_½zơرc£(6lØÁúZ§Ÿ~zÆ §M›ö׿₫µ¬¬lÇ×\sMQQш#6mz'ÂÈK$¡gˆkÆŒ³gÏ¢¨S§N›7on×®]£F6mÚTQQ1|øđÔZqo¼ñÆ\úâø¨Q£&O\¿~ư₫̃ª‹ . ½a}å+_ =E¦°©́F*»‘Ɔ¤²©‚́Æ!Cª.®[·.ôfM/¼^y啽zơ>}úæÍ›£(zûí·£(:ꨣÆ—zgÇ/®¤¤ä¦›núøă{ôèqÜqÇíÚµkÉ’%?₫ø7¿ùÍÓN;-Ο›™ö§cÇ¡GÈ v#•ƯHe7̉ØTv#UíïFƠÖ«½H” ²)£(0`À€‹‹7õ¼wï̃N:µjƠê •‰'¾̣Ê+“&Múá˜\Ù±cÇÙgŸưÓŸ₫tÁ‚:u ½ dÍ{‹̃zë­äă‚‚‚^½zt̉I‡¢ß{ï½Å‹wîܹ²£(jÛ¶í¥—^úÙgŸ=öØc¡w Œ¬¹âøï|çÓO?}á…ª½•ăA´k×®(>úè´ơä…Æ÷ß?ôN„‘5W»téEÑúơëơ:úè£ëׯ¿aÆ´ %ßßĐ¹sçĐ;FÖ„ă5×\“ŸŸ×]w}̣É'‡ô åççŸ|̣ÉÛ¶mûơ¯]QQ‘\ܰaẰ™3?üđ„̃ €0²æ¥ê–-[̃zë­×^{ígœqÆgtèĐ¡ê-O=ơÔƒ̣µ¦Núưïæ̀™O=ơT÷îƯwíÚơÊ+¯TTTL™2å_₫å_Bï@Y•—úvîÜyÇwT{̀Áº N‹-zê©»ï¾{É’%ÿó?ÿSPPpÊ)§\rÉ%Çw\èm&kÂñŒ3ΨÍ/רQ£qăÆ7.ô÷ )²&o¹å–Đ#ä´¬ùp aeÍÇo~ó›ưôÓ믿>ôŒuY¿Ç±~ưúíÛ·=zôwܱgÏŸ₫ô§i?뀃(‹Ă±̉7¿ùÍÎ;oß¾}ûöí¡g¨³êB8FQÔ²eË(¾üå/‡ Îª áXZZúæ›o¶hÑ¢qăÆ¡g¨³²æĂ1ưë_«]/..;wî|0xđàĐ3ÔeY\pA ÏqÄW\qEè견 Ç~Vu‡† Ö¾}ûĐ3ÔeY~V5@XYóá˜={ÖĐcÆŒù·û·Đ3ÔeY¥¥¥Ÿ}öÙ₫zë­·̃~ûíĐ3ÔeưRơsÏ=wÉ%—T₫rΜ9óæÍ«zXEEE"‘èĐ¡Cèy게Çúơë7mÚ4ù¸¸¸øđĂoÔ¨QµG6õ|̉¤I¡ç¨Ë2:ûơë·té̉äă³Ï>{̣äÉ¡‡ÈQ©.¼đẪ½{‡ we͇c&Nœ8pàÀư={ƠUWƠđ,d‹¼¼èÜsp„’5W£(*..₫óŸÿ¼mÛ¶´ơ²²²?ưéOơë×= |!É(œ??¢è?₫c¿äåE‰DèYÉIYï¾ûî9çœSĂ=wFzF88ªmÇÔk×_]}è)É=Y÷ßÿÛo¿}â‰':ôüă²eË®½öÚüüüµk×Λ7oäÈ‘W_}uèà I$>¯Ă´vL­Æë®S„‘5áøüóÏéK_9sfÓ¦Mد_¿;öéÓ'¢N:ự—¿üÿïÿué̉%ô˜đ…TmÇiÓT#™"k>óÎ;ï}ôÑÉÛ:uÔQ«V­J>5bĈ‚‚‚ûï¿?ôŒp¤¾q₫ü¨S§•¿T„•5áEQ½zŸOÛ¡C‡-[¶$ׯ_¿°°đ7̃= Ơ~öE5\Ö„cëÖ­·nƯúñÇ'Ù¾}û—_~¹̣Ù¼¼¼¢¢¢Đ3ÀA“ÖÇ« /kÂqđàÁeeeW^yå¦M›¢(êƯ»÷[o½µdÉ’(vîÜùÊ+¯´k×.ôŒpФƯ¯qƠªÜßjAÖ|8æ¼óÎ{æ™g-Z”H$î¾ûî“O>¹Aƒ—_~ù׿₫ơµk×–––~ç;ß =#Ỡ廆û;BíÈ+-Z´xđÁÇwÜqÇEQÔ®]»)S¦́Ư»÷…^صk× AƒFzF8̉>C½yó–Ê_Οïº#!eÍÇ(Z´hqÑEU₫̣œsÎ:tèÊ•+[µjƠ©S§ĐÓÀAPơÎ;[¶ÔtG¨MÙI»wï^µjƠ;ï¼Ó¶mÛ¾}ûvé̉¥E‹¡‡€ƒ †û5jG2A6…ă®]»îºë®Gy¤¬¬,¢óÏ?¿oß¾Ă‡ïÑ£Ç7̃XPPz@88ª½óNj;ªF‚È÷8~öÙg—^zéܹs›6m:|øđÊơ–-[.^¼ǿ³ÏNÖ$d¯ä-xj¸_c̣€jị̈µ kÂñ{îY±bÅ)§œ²pá›nº©rưá‡>ó̀3·nƯ:gΜĐ3À•Hà~ª‘€²&_zé¥úơëßpĂ 5J]¯_¿₫µ×^Û¨Q£gy&ôŒuYÖ„ă5k:v́Xíç`4ỉ©S§mÛ¶… .ËplÖ¬YåϬª¸¸øˆ#=#@]–5áØ½{÷w̃yç7̃¨úÔ5k̃~ûínƯº… .ËpüÁ~——7~üøƠ«W§®¯^½źرQ 6,ôŒuYÖÜDZoß¾?úÑfÏư½ï}/ùsb₫û¿ÿûÅ_Ü´iSEEÅđáĂÿíß₫-ôŒuYÖ„cEW^ye¯^½¦OŸ¾yóæ(̃~ûí(:ê¨qăÆ¥̃Ù€C!›Â1¢ 0 ¸¸xóæÍ{÷îíÔ©S«V­B27÷îƯEÑá‡^ơ©‚‚‚^½z… ·dî‡c;î¸ÓN;-ôü]æ†cµ†₫Ío~3ô¹(ËÂqÏ=ÅÅÅ¡§ÈEY„"ˆE8‹p á@,€X2÷'ÇDQôî»ïö́Ù3u¥¬¬,¢´ÅJ¯½öZè‘ꬌÇD"QZZZu½ÚE©̀ Ç'Ÿ|2ô|.sñK—.aX¹rå=÷ܳzơê>ú¨°°p̀˜1ÿú¯ÿzW‚ñá˜ê-Z´èœsÎY´hQË–-{ö́ùÚk¯w̃y‹- =@0™{Å1 ={ö\uƠU 4¸÷̃{{ơêEÑo¼1räÈk®¹æÔSO­WOm¹HUăÑG-))¹øâ‹“ƠEÑ×¾öµoûÛ;wî\¹reèéÂƠøË_₫’——7lذÔÅ›o¾yƯºuÇ|èéÂđRu5V­ZUPPĐºuë—_~ùµ×^Û½{÷1Ç3xđàüüüĐ£#ÓíƯ»÷Ă?ܹ́óơ×_?₫üÊơöíÛß~ûíÇ{lœ?¤°°0meáÂ…¡¿³0BÁF*»‘Ên¤±!©́Fª »1dÈĐßw¦é>üđĂ(6nÜø₫ûïOŸ>ưÔSOưä“Oyä‘;ï¼ó+®x̣É'ă\w\·n]èï#ƒt́Ø1ôÄn¤²©́F’Ên¤ªưƯ¨úÏzƠ+D9Â{Ó5lØ0ùছn6lXóæÍ[·n}ùå—>¼¨¨èücèÂé7nܰaĂüüü¤®<8¢µk׆ áX–-[vØayyy©‹ÉW¨÷íÛz:€0„c5 PRR²~ưúÔÅW_}5¢c9&ôtaÇj ><¢)S¦|đÁÉ••+W̃{ï½Í5;í´ÓBO†OUW£[·năÆûƠ¯~5dÈ̃½{—––._¾ê áQEyyÑư÷à€Œó̃{Ơ,ª9D„ÂKFáèÑQE?üá~ÈË˰—:*Ă¢sÅ>7zt5×S¯5N˜zDG8À?\¶KkÇÔj¼̣Êè–[BÏ áGˆ¢ư´£j„TÂ₫.­U#¤đ¹j?j¢!I8À?HkÇ!CT#üp€v¿Æ… pGÈÂ>Wí]¾«½Gä á—öi˜îѹI8@íçÎ;ÚR G¨éÎ;Ú* Gø\µw̃ImÇj’5äáOĂîט< Ú»«W¯₫g{aaaÚÊÂ… COa…!ƒØTv#•ƯHcCRÙ(z÷>,¾’º̉°á–-[jé«2$ôd áX²²²‰'¶oß~üøñÿ·?aƯºu¡¿‰ ̉±cÇĐ#d»‘Ên¤²ilHªß5k¢o}+}±S§‰D- PơŸơªWˆr„÷8VcúôéEEE7ß|s~~~èY §¥}†zôè’ÊÇnßXû\qL÷̉K/ÍŸ?ÿ̉K/=₫øăCÏ9­êw6ÜƠ¹sÓÊ÷;æåEµvƯ‘ÈǪ6lØEÑ̀™3 ÿ×÷¾÷½(,XPXXxú駇rÂ₫î׸¿û;R \qL÷Ơ¯~ơ»ßưnêÊ={–,Ỷ¶mÛ={¶nƯ:ô€j¸_cÚç¬]w¬5Â1]¿~ưúơë—º²zơê%K–ôîƯû–[n =äDâïW«½óNj;ªÆZ#€ •HDkÖ́÷~ÉvL₫7µĂ{€̀Uó]¾Uc-sÅñÀzôèᾌ®8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ̉ ôª¬¬́÷¿ÿư#Y¶lÙ’%K~̣“Ÿ\vÙe¡§C8Văá‡^±bE¯^½î½÷̃üüü(6lØ0jÔ¨;ï¼sàÀƯºu = @̃ăX… FQtơƠW'«1¢.]º\|ñÅååå/¼đBèéÂƠزeKăÆ{ô葺إK—(¶oßz:€0¼T]{î¹§AƒôY½zuEíÛ·=@±Ư»wO[Yºté¬Y³¾ô¥/ 6,ΟPXX˜¶’|ù;…!ƒØTv#•ƯHcCRÙTAvcÈ!¡¿ïL! ¼¼üÁ¼ùæ›ËËËo½ơÖ-ZÄù]ëÖ­ =x騱cè2ˆƯHe7RÙ46$•ƯHUû»QơŸơªWˆr„p¬É²eË~₫óŸoÚ´©M›67ÜpCŸ>}BOŒp¬̃̃½{o¹å–¹sç6lØp̀˜1^xaå'¬r“p¬FEEÅøñăŸ}öÙÁƒ_wƯu-[¶ =@x±sçÎ}öÙgÏ=÷Üë®».ô,™Â}Ó%‰yóæqÄW]uUèY2ˆ+é̃ÿư·̃z+??äÈ‘UŸ>|ø¨Q£BÏ€pL—¼ATYYÙªU«ª>ëƒƠ@Îé¾₫ơ¯» #@Ũă@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹pܯ?üá#FŒèÙ³gß¾}'O\\\z¢¬4dÈĐ#d»‘Ên¤²ilH*»‘Ên„%«wÛm·M™2eÓ¦M'xb“&M}ôÑÿøÇeee¡çF8VcƯºu³fÍjƠªƠÂ… gÍờ3Ïœw̃yo¼ñÆŒ3BŒp¬ÆĂ?\QQ1v́Ø–-[&W&MÔ¬Y³§Ÿ~º¢¢"ôtaÇj,_¾¼^½z§zjåJưúơO>ùä]»v½úê«¡§C8¦K$7n<̣È#<̣ÈÔơ®]»FQ´}ûöĐ„Ñ ô§´´´¼¼¼yóæiëÍ5‹¢èƒ>ˆó‡†₫>2ˆƯHe7RÙTv# Ie7RÙ€„cºäG§7nœ¶̃¤I“(ö́ÙsÀ?aƯºu¡¿ €ƒÏKƠé7o——WZZ¶₫ÑGEÿ{Ư  Çt 4hÖ¬YƠ+‹%%%QU~Î ×Çj´jƠj×®]ÉR¬´eË–äS¡§C8VcĐ AåååÏ?ÿ|åJ"‘xî¹ç zö́z:€0„c5FŒQ¯^½ßüæ7É÷5FQ4kÖ¬;wuÖY‡vXèéÂÈK$¡gÈD÷ƯwßôéÓÛµk׿ÿmÛ¶-]º´{÷î÷Ưw_ƠÛôäá¸_O<ñÄă?₫Æo´iÓæßøÆØ±c“wäÈM€X¼Ç€X„#±GbÄ"ˆE8‹p áxĐüá1bDÏ=ûöí;ỵäâââĐSVVöÀœ~úé'œpBÿ₫ư/¼đÂ^x!ôPaǽzơ0aBèABZ¹råå—_>`À€O}ú”——‡®¶%ÿ—rÅW|öÙgÉ•_|±[·nßúÖ·BVKö́Ù³|ụ̀k¯½6ù¿‹+V¤S§ÖîFNZ¸©œZk™+ÁĂ?\QQ1v́Ø–-[&W&MÔ¬Y³§Ÿ~º¢¢"ôtµmáÂ…Q]}ơƠùùùÉ•.]º\|ñÅåååu₫U•lذá¶Ûn;æ˜cB̉£>ZRRrñÅ÷êƠ+¹̣µ¯}íÛß₫öÎ;W®\zºÚöꫯFQt₫ùç7hĐ ¹r̉I'uëÖmëÖ­|đAèéjĂĐ¡CGùĐCí:µp7rêÔzÀƯ¨äÔZû„ăA°|ụ̀zơêzê©•+ơë×?ùä“wíÚ•ü·!§lÙ²¥qăÆ=zôH]́̉¥KEÛ·o=]ûöí›8qbAAÁ¤I“BÏ̉_₫̣—¼¼¼aÆ¥.̃|óÍëÖ­;₫øăCOWÛÚ´iEQj#&‰Ư»w׫W¯2%ë¶iӦ͜9sæ̀™}úô©ö€œ:µp7rêÔzÀƯHrj "'NO‡T"‘ظqă‘Gyä‘G¦®wíÚ5¢íÛ·÷îƯ;ôŒµê{î©úÏ̃êƠ«£(jß¾}èé¸ă;Ö¬Ysß}÷5mÚ4ô,!­Zµª   uëÖ/¿ụ̈k¯½¶{÷îc9fđàÁ•WPrÊé§Ÿ>gΜiÓ¦5jÔè„N(..9sfQQÑ~đƒù{̉¯_¿äƒÅ‹W}6×N­5ïF”c§ÖîF’SkÂñ‹*---//õ¼yÚz³fÍ¢¼œ#ºwï¶²té̉Y³f}éK_J»Ô”#V¬X1{ö́Q£FơéÓ'y–ÏM{÷îưđĂ;wî|ươ×ÏŸ?¿r½}ûö·ß~û±ÇzÀÚVXX8wîÜ .¸à‚ .¨\5jÔäÉ“C–œZÓ8µ¦qj ÅKƠ_Ṭó}7N[ỏ¤IE{ö́ =`Håååsæ̀ùÑ~TZZzÓM7µhÑ"ôDµ­¬¬lâĉíÛ·?~|èYûđĂ£(Ú¸qăSO=5}úôeË–=÷ÜscÆŒyûí·¯¸âºư9Ùj•””ÜtÓMüq=Î>û́ÓN;-??ÿñÇÏÍϘWåÔZ§V§Ö€\qü¢7o——WZZ¶¼5@̣ÿç¦eË–ưüç?ß´iS›6mn¸á†ßªRWMŸ>½¨¨h₫üù¹ùjlª† &ÜtÓML>¾ụ̈ËẃØñè£₫ñü₫÷¿zÆZ5qâÄW^yẻ¤I?üá“+;v́8û́³úÓŸ.X° S§N¡ ̀©uœZ#§Ö \qü¢4hЬY³ªÿ÷·¤¤$¢Ê攽{÷N›6íüóÏß±cǘ1c~úéÜ<µ½ổKóçϿ袋rđ“U5nܸaÆùùù H]û́¹ç{Ưu×…%°¯~ơ«•%’ö́Ù³dÉ’¶mÛö́Ù³uëÖ¡¬m øƯï~·~ưúäc“’÷Uɵ۰}ôÑơë×ß°aC"‘H-éuëÖEQÔ¹sçĐf§ÖTN­•œZĂÁˆ#î¾ûîßüæ7§œrJ̣Û³fÍÚ¹sç~ô£Ă;,ôtµ*‘H̀›7ïˆ#¸êª«BÏ^¿~ư*o*‘´zơê%K–ôîƯû–[n =]ÇÿƯï~7eÊ”»ï¾;y••+W̃{ï½Í5;í´ÓBOW«̣óóO>ùäÅ‹ÿú׿3fL½zơ¢(Ú°aẰ™3?üđ´Wós–Sk%§ÖTN­a ǃ mÛ¶&L˜>}úgœÑ¿ÿmÛ¶-]º´Gÿ₫ïÿz´Úö₫ûï¿ơÖ[ùùù#G¬ú́đáĂGzF‚éÖ­Û¸qă~ơ«_ 2¤wï̃¥¥¥Ë—/ÏËË›6mÚ—¿üåĐÓƠ¶©S§~ÿûߟ9sæSO=Ơ½{÷]»v½̣Ê+S¦Lù—ù—ĐÓe§ÖJN­dáxpŒ=ú¨£züñÇŸzê©6mÚŒ5j́رÉÿ‹œS¢(*++[µjUƠgsó}ܤºè¢‹Z´h1gΜ_|±  `Đ AcÆŒI₫ô‹\Ó¢E‹§zêî»ï^²dÉÿüÏÿœrÊ)—\rÉqÇz´ âÔäÔJæÈK$¡g ¸±GbÄ"ˆE8‹p á@,€X„#±GbÄ̉ ôÿ6l8ưôÓk>fåÊ•‡~xèIêád±¼¼¼V­ZƠÚ—[²dIyyù)§œúû₫»_üâO<ñẠ̈åËCä ád±üüüç{®Ö¾Ü•W^YRṚæ›o†₫¾£(̃}÷Ư'x"ô@nÙäÓO?Ư¶mÛË/¿|ÿư÷—””4mÚ4ôD@Ùd„ Ï<óLè)€%œđ /ü₫÷¿óÍ7÷́ÙÓ­[·o|ă]tÑa‡VyÀÎ;ç̀™óßÿưßûÛߢ(jÓ¦Mÿ₫ưøĂ&ßCyóÍ7ß{ï½É# 5jôÚk¯M˜0aÁ‚<đÀI'”úµºwï̃´iÓ¥K—FQ”=¢Ûo¿=ÙgQµhÑâöÛooƠªƠ#<²{÷î(öíÛ7`À€+¯¼2YQ5mÚtèĐ¡QmÛ¶í‹ÏÙ¸qăÙ³g÷éÓ'Y1§È4®8Y,ù^Ă(..̃²eK§Nzôè‘öûôéóØc­Zµª_¿~—]vYÚo|ÿư÷ÿøÇ?¬9Ï8ăŒ† ₫³SÜX€j G .Û¼yṣ¿ «= ̣ÚäÛo¿ư—¿üåå—_̃¾}û[o½U\\|ÇèĐ¡Ăÿm*€Œ"ºlï̃½Qµk×nđàÁƠжmÛ(æÏŸ?uêÔ}ûöuèĐ¡wï̃ƒ>öØc·lỤ̀‹_üâŸưååå‰D"m1ín‹1§È4¨Ë:uêEQ£FjøDËG}ôË_₫̣đĂ¿ç{R_ Ñ—矵cÇÊÏM‘©2ÇuY«V­:ê¨M›6­^½:u½¼¼ü¬³Îêß¿ÿÎ;W®\Y^^₫ơ¯=ím…k×®ó%̉^Ô₫ÓŸ₫tP¦ ½sƠ@7nܸqăÆ­Y³&¹̣ÑGứg?[µjU=Z´h‘¼Å÷Úµk+s­¼¼ü¡‡7o^EÉ›/Vª¨¨(--M>N¾sqîܹ•+K—.½ë®»ÊT¡·  ^ªê¸áÇ¿ổK=öذaĂÚµkWPP°yóæ̉̉̉£>úÆoŒ¢¨S§Nƒ úóŸÿ|Úi§ơêƠ+‘H¬[·®¸¸xäÈ‘sæ̀ùÏÿüÏ?ü0y÷œæÍ›ŸsÎ9:t¸ă;† ö»ßưîƠW_4hP÷îƯß{ï½76kÖ¬uëÖŸ~úéœ ¹âÔqyyy7ƯtÓ¯ưë&$LÇÇ÷øă$¹ơÖ[̣“Ÿ´mÛöå—_~÷ƯwO>ùäÇüꫯ9rdưúơ—/_˜(V®tơÀ­G¼…­¦¡V.¸á€·ˆŒ,¿mHC}5 !¬VƠ³Â”G¼ÅñăÛ‘j„—°XùÛ€7ỉDœ8Q~wÀª̃‚pÀëÚцoÚP‹·ªđ:†÷¬5T#” T=€U=ÀçåçÏ"A„ï/̃###CơjnaÚ¿OöbccY VCƠĐc5 XÄDqèñà¡Cœtô’¿^2†çñV5̃Åp u`àiÛm¶o„Z„#^Ä~çèèn.öw<‰pÀ[8Û¯ÑÙ₫€‡x û5̉đ„#̃‹/‚Ñ·#WÉ@ Âî•®z/Âjè±z¬†™Äj5F¡~5´v4s5ùï†7 đ%Ç«&F8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤`^‹¸|¹‚'˜‡Å"Ö­«à đ°eËĈ®P§êMÆÔᘕ•ûă?º~Ú©S§Úµk7~üxƠó@ẻ2¨fM§í¨=Á$µ¤}™÷Üă´Mµ^bÙ2ñđĂâ½÷œ¶c:"?Ÿ?2u8¦¥¥Uø«Ơ:qâÄK—.©*Szzùm‡í¨ÿf333sîܹ-Z´P=2T>gíh¶jÔ8kGªQ-‡íH5*dÆpœ>}zJJJJJJ||¼‹§]½zu„ aaa“&MR=2¸…};³5öíH5zC;¶hÑ”jT(Pơ têÔI»±aĂO{ûí·8°xñâƠ#€»híxï½Æăf«FÖö¯úT£ZVkyÄ—”\»E5*aÆp”±{÷î… &%%ÅÇÇïß¿ÿ·₫ă±±±†#éúD7“œœƠ#xVCƠĐS»±±â½÷‚}´íÈ‹/æƯw_av¶Idï̃*mÚÜl»{÷Ư?OŸ~Ú´«á%²²Dtt”₫È‘#ÙûCéƯ»·êđ„£ÅÅÅ&LˆŒŒ7nÜïûª¿/uăÄo°z¬†ÚƠˆ¾îîôéu_x¡n&]Ăö.[·VÏ̀ŒúÓŸLº^Â~¿ÆW_Z¼ØCŸƯ₫Ûºư"“0ăÏ8VhÖ¬Y999¯¿₫zPPêYÀínƒçbGÿæp5\́ïĐ_ căbG¸áh´}ûö¥K—9²mÛ¶ªg·3\ ăb30\ ăbxŒáꬬ̣÷§iGÏ#233…)))±¿zà„«V­íÓ§ê ̉Ø_CízGÿf µëưáw̃q±¿#ÜŸq4ºùæ›ï¿ÿ~ư‘ .lÚ´©Q£Fqqq 4ø½¼‹³w ×Y׬).]j̃ÑĂ«¡¿†Úpơ=÷ˆµk…ÚŸw4û5꯳~ï=!„đØÏ;áhÔ©S'Û~=ưû÷oÚ´©}ûöo¼ñ†êé ̣Ùï¼chG¿¯F=ûw íH5zŒëươíÈoêđ̃ª“̉̃ïs¶_£í=kưÛ‚~Lû2í×h{ÏÚ$«á%´Ơv±_£ö„Y³Ä„ ªg5 Î8€y¹Î ̃½ÍƠI®¿ØZµ̀µ^¢Â5çÅĂLÉÉÉÉÉÉ>­uëÖ́ËÀ[ƠB8@ á)„#¤B8@ á€g›PfB8`gï^a±\÷¿€ñÀªÇ#°së­~ö™øæƠ“*\ÏbqúPB‚X¿^ơ|€2„#¿zâ WƠ¨éÙ³âç~p€ÂRGH! …pàW¿ü¢zÀ«üꦛTOx5€_-\(¬Ö säHÅÏüápÊKéèQ¯ù²ÑÑjWz……ª'0ẦËb;:}tØ0Q¥(-ơÄ‘‘N}é%%6nôÄå{ïÙcÿ„İË₫èö9 sƯÂBÊv́E8€Iißn·lqÜÆ‰%K„"0Đ½í¨‘“ă¸_zI$' !D·nîmG[|\»Ñ¦°ZmÿK]`µëpñ₫äÉbÆ 7=ăÊơ´jtñ¸áfgß¶jÔxb ûv´U£¦kW7~ö:uÊo*$5UŒY~÷…<±B<óLùmĂ¾…ëÖ©Ơ4G0)ựéÛÑPî₫1GưÇ×·£¡Ư=F^ăv4T£—üЧÌ›ç¸í«±W/Ơ³F êÊX­åߌµvlÖ̀£Ơh?†Ö„½ó§ÇÈËuëóç¯ƯµXÄ‚T£bóæ !DJʵ»‹Ø³§₫̣$ªÑĂG05C;nÙrƯCJÆÈÉï¼S[Ɇv¤½¡o½ơfÛCT£çñV5˜Ă$̣|'yɆ÷¬U=Ă{ÖªQ  †½în|¼1¦L¹îî₫ f ®›öBö(T£„#˜ájá|·2\ #œïÑăV†«a4́ö¢–áj (J`jöƠ¨ñp;ÚW£ÆĂíh¨F{ôÀc Ơسg‘í6(G8€yÙï¼ăl·²ßy'++Ûv×cíh¿ó³=zà1ö;ï,\xÆÅ₫p7ÂLÊÙ~nGgû5:ÛßÑMœí×H;*äl¿Fgû;ÂG0£W^qµ_£ÇÚqíZW»|{¬³³]í¼C;ªâb—oÚQẦhêTqç×nW¸ÎæÍîă{ĸq²cœ8á®1¢¢Ạ̈å®ÆĐ·#[óxŒm©î¼£oG₫P<†p“Ú¶MÜy§«ï¸ÚCî₫–<{¶7NưåË]}­ ³Z]íרµ#(D8€ymÛVÁ<ó-yöl¯càÀ —ç‰1`àz¿Fí÷ÊÀcGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ẦËb¹Ñ'T°0aµªĂK$'‹Í›]=ÁT«ocêp̀ÊÊưñÇí*..~ÿư÷ûôésÛm·uîÜù±ÇÛ́úßcđ5Z¸¨ ŸP)ÂÂDA¨RÅi;zf /‘œ,^zItêä´MµđB¦Ç´´4‡Ç¯^½:|øđ3fœ={¶C‡Í5Û¶mÛˆ#æÍ›§zd¨o¾Y~Ûa…èå®1¾øB\»í°ơcôïïÙ5̣¸Ë—ÅK/]»í°ơ«Q¯êqaJªP °°đĐ¡C«W¯₫ä“O>aÙ²e»wïn×®Ư¢E‹‚‚‚„™™™IIIóæÍëÑ£GË–-Up£ÆŒBˆç»v×b¹.Úộ́³âí·Ư5Æư÷‹ưK<đÀµ»Uªˆ²²̣Ï®£_?ñÿ§zƠܬF qú´hØđÚƯNĦM¢cG«.ÎS=.LÉŒgûöí;dÈgƠ(„HOOB¼øâ‹Z5 !bbbzê©̉̉R̃°à7ÆŒsç–ßu˜kn­FMb¢ø×¿ÊïÚÎ;­5 ˆÓ§ËïÚÎ;Rđf<ă8}úô+W®!>üđĂ-[¶Ø?!;;»F­[·ÖŒ‰‰Bœ8qBơøPíÏ;êy 5Z;êÏ; e{Ô<Ơ¨ÑÚQ̃Q¿T#Ô2c8vêÔI»±aÇOX°`A` qeöïß/„ˆŒŒT=>T&C;Úx¬5†v´1[5j íhC5B93†c…Zµje8²uëÖÔÔÔjƠª 0@æ#ÄÆÆho›PNN꼫¡Çjè©]₫ưE^^Hrr]Û‘¡C ÇÍËÎöè·Ư&̃}7øé§ëÛ$$½ùæá=¶m ¸ë®&¶»µj•mß~̀´«a£ä_–̃½{«₫º½áX̉̉̉>úèơ×_/--3gNxx¸̀?•‘‘¡zp/uăÄo°z¬†ÚƠHN¾îî’%!|âù1~úº»_Ü´i”i·‰¾îîÅ‹UN²]+cfÿ—Å₫Ûºư"“0ăÅ1̣¶mÛÖ·oßéÓ§‡‡‡/Z´è¾ûîS=T¾ ·ăQ8†‹ưư›ĂƠp±¿#à„£c%%%Ó§O6lØ©S§Fơå—_ÆÇÇ« *Ÿáj‡×Y{xŒ~ưÄ»ï±Ư5a;®¡̃¶í¸í.íµx«Ú²²²qăÆ­[·.!!aÚ´iª'·p¶ó³ư=0†v5Lvv‘‹ưư›ưÎ;ÙÙ¥.öw<‰3¤¥¥­[·î‘G™7oƠÀ_9«Fgû;z` ư5ÔÎöwôoÎökt¶¿#àa„£‘ƠjưđĂkƠª5qâDƠ³€'Øï¼chGϰßyÇĐ&9㨱ßyÇĐ¹¹ªG„)ñVµÑ¹sç?4dÈûG“’’TÏ•Àj‹Óưmû;ºû<Ÿ6†³ưmû;át£m5œí×hÛßqåJÿÿÍƯđN„£‘¶ATqqñ¾}û́å₫Äus-Ơ‘˜h–jÔ¸₫b4?ÿ,ªUS=%̀ÊÔᘜœœlØ»LˆÛo¿]^‹j„BüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áˆÊd±‹å†P)îºË+ÆÀϨ4¶sÖd>¡RÜu—ؾ]ưøÂ•fêỘÛöM¦?̣đĂnăñÇeLj÷èúàëGT—_vÚ†jüä7ñÄ"5µâ1âăÅæÍÊÖ _D8¢29lGOV£Æa;RÜ Â•̀ĐÑÑQ¶Û©F‹óT#¿áˆÊghG'«QchG ƠÀïF8Â-^~ÙxÄĂƠ¨yâ ăª€ßp„[¸¾œÙlcàGT>}œ5o₫‹Ăăăt|È#QÉ ×P§§ç¸̃ßÑcÄNjÇ^+$¨Lw̃q±¿£ư] ăâ:k ƒpD¥q±_£'ÛÑÅÎ;´#7‚pD¥±Z¯Ưp¸ó¾mÏtëw̃Ñ·ăƠ«ÊÖ _¨zø«U ätçmûzÜ1FÇNw̃Ñöè1B(Z&|áˆJæz¿FT£Æơ~öû;€ ñV5¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áè?̃zËƠ£Ó¦©Ï³ rơhzºêùLÉb©à 3f¨àR êTÊÊʺ÷̃{—-[Ö¶m[ûGÿùÏ.[¶́đáĂÁÁÁ]»v?~|XX˜ê‘²}K₫Ë_<:mxåñÊ+ÂjU=¨gWă“O<.î½Wa–ƠđÚÅâtÙmj/¼ zV€¦>ă˜––ǽ¡¹sçN™2åÈ‘#wÜqGÍ5W¬Xñä“O«Ù1ÛwÜÑ£œwÔªÑđL?fû?ưÔÁyG[5d5¼DƯºå·.»íàäÉbÏƠăœ0c8îܹsÚ´iü±Ă'ddd¤¦¦Ö¯_?===55uíÚµC‡Ư³gḮÙ³UÏî˜₫¡ơƠ(̀qMÿ5ÚQ_BˆK—TÏjyy¢Ṇ»†vÔßưÇ?Ä­·ªà„ñoß¾C† ùÄỘB!–-[VVV6f̀˜ˆˆíȤI“BCC¿ụ̈˲²2Ơă;æ°MXö_©­í«±F Ơƒ‰³v4Tăc©àœÆqúôéW®\B|øá‡[¶l±Â;ªT©̉­[7Û‘€€€.]º¬^½ú‡~hß¾½ê¯À1«ơº÷¬¿ụ̈ºK@̀Sö«ñé§âôiñí·åRJä剺uÅùó×îFGGé¥Àû™1;uê¤Ưذaƒư£V«ơđáĂuêÔ©£?="DóæÍ…'NœđÚp××’™«Ñ~5¨F/ahGª|‚Ăѵ¢¢¢̉̉̉Úµk‡†† !ÎÛÇs$66Öp$ƯSÀdeOädeegg{æ“;““£́s;Z}û=«¬£Ơ®†—عSÜ~ûÍå?'3sfn₫-ơüƯ0`AôX =%«Ñ»woƠ_·· ´K§kØ’ªY³¦âÂ… 2$##CƠüöû5®^åp‰ºṇ̃ûØçú«¯6u₫Ó­~¾̃£ àº»“&…Oœ®z(ơø»aÀ‚è±z_ ûoëögˆLÂŒǸV»vm‹ÅRTTd8~é̉%ñëyG¯e¸Făp30\ £q¸G<Éơv<oF8†††ÚŸY,,,BØ®³öB.®¡6a;ºØy‡vTHˆ3gæºØ£à…GêׯŸ——§•¢ös‚ơë×W=c«Ñ´íèpçû;Â3 ;ïüÏÿ\t½¿#ÀÛốÙ³´´ô»ï¾³±Z­7n ‹‹‹S=.Î5°]́×H;*äl¿FÚ|áèÀC=T¥J•w̃yç̉¯op¦¦¦æææ8đ¦›nR=®wù6´£ßs½Ë·¡á+V”ß¶ßyÇĐ¯ÅUƠ4jÔhüøñ³fÍêׯ_çÎ;¶uëÖÖ­[?ñĪGs̀¶a¡³ư+|‚?±}±Îök4Ơjx‰Ạ̊åâÁî×hÛß‘?đf„£c#FŒ¨W¯̃Ê•+׬YÓ°a䤤1cÆh;̣x§ ¿Ưêû±Ơ*._vµË·©VĂK (²³EÓ¦NŸ—§zD@ELÉÉÉÉÉÉÎíÛ·oß¾}UÏˆß‰ß ă…\T#À'˜:aj¯ÂàT$Îqq LiÆ Çǹ¦çG˜ÏŒḅd§̉8Á[Ơ0™qñbϱXxÏ{œq„ÉTXÀ ÂRGH! …p€ÂRG˜Œ̀>;́Å€#„#̀ÇuR8A8”œƠ!Ơ€süæ˜ÀoÄGH! …p€ÂRGH!ưDx¸°X\=Ábññª§ô”3*^ ×O¨7VđY"#=1Fi©°X\]D̃±£'ÆøÂÑ„‡‹¼ 4ؽ{÷Î;Ÿ|̣ɯ¿₫:44TơÈ~Ë«/IMM={ölûöí?ÿüó}ûöưßÿư_tttrṛ¹sç₫ö·¿Í™3güøñ}ôÑă?^XX˜ªz^æƠá¸yóæªU«₫ư lѢŸqăJKK5jÔ»woÛÓ}öÙêƠ«ïرCơ¼₫̀«ĂñèÑ£M›6 ·¹í¶Û„‘‘‘ú§EFFfgg«ÀŸyu8è„„„Û_C}åÊ•€€Ơóø3¯¾8&::zëÖ­ûöí»å–[´#U«VƯµk—áiÿưïO<Ù¦MƠóø3¯>ă8pà@!ÄSO=ơé§ŸfggÛößÑËËË›8qbiii·nƯTÏ àϼ:ûơë×·oßsçÎM:µwï̃4Wiié°aĂfÏŸŸß¹sçÆ¯]»¶ÿ₫;v́P½ đ¶sØZ5éÖ1œµ£í ´# B>ˆrxLÍ5£££;VYŸëÓO?ưá‡î½÷̃¯¾úê­·̃JKK{ï½÷„S¦LQ½ đVkùmC;ê«QñÙgĂ¾ơ±ø÷¿«Y(€ñ™p ½|ù²³GóóókƠªUYŸë‡~B 6,đ×oï:thÙ²åÑ£GÏŸ?¯z%à3¶£}5à¹1ôíh¨Æ¿üEíj|€Ï„c«V­NŸ>½gÏû‡8p̣äÉ–-[VÖçjذ¡B߈V«µ   J•*¾t:”3´ă„ á®Fû1´v¤¿ƒÏ„ăĂ?l±XÆ·ÿ~ưñưû÷3F1 ̣¾÷éÓ§zơêÓ§OÿÏ₫S\\|êÔ©—^z)''硇 Q½đ1úh[¾¼ü¼¸ÇªÑ~Œ¯¿.¿M5äY¬úï'̃mö́Ù .BDGGgee5nÜ888øÈ‘#eee‰‰‰úK­oÜ={†®s<))ịäÉ₫³±±±öÓÓÓU¯Ÿ999øĂTO¡^tt”₫îüùg₫ô§"åcL7|x¡ª5áaÀ‚è±zJV£wï̃ö322T/†¾ôÆëóÏ?ß®]»Y³feee !N<)„¨W¯̃رcơ;;̃¸Â™3g^¾|¹uëÖmÚ´ÉËËÛ´iÓÊ•+ï¾ûî^râ™ó/“3QQQ7₫A|ư~Û·×9RơXBlÙR÷å—ë*€¿z¬† ¢Çjèy~5́¿­;gû5ÚàÖ±͉#Gœî×è™1₫ÁgÂÑvª/77÷í·ßvøœÊÚ'<<|Í5óçÏß´iÓ¿ÿưï°°°®]»>ưôÓmÚ´Q½ đ%V«X¹̉Ơ.ßiµĂ‡Å’%bèPÅcü€Ï„c¿~ư<ù邃ƒÇ;v́XƠ_7|›'7Œ .ªy>o¼ñ†êLÍg.€Z>sÆñî»ï®đ9[·nU=&€ß̣™p,,,4±Z­¶ír4h®zFæ3áøÓO?”––:uꫯ¾z÷Ưw¯\¹̣׿₫UơŒ₫̀‡Æ1 22rĈo¿ưö… {î9+Û¸‡£ÍƯwßƯ¬Y³'Nœ8qBơ,~ËÂQ!„¨[·®êAü–?„cQQÑO?ư^£F Ơ³ø-Ÿ¹8æ?ÿùĂăùùùiiiçÏŸOHHP=#€?ó™p>|¸‹GkƠª5zôhƠ3ø3Ÿ G¿«ºI“& ˆŒŒT=#€?ó™päwU¨å3ÇÄÅŹhÇQ£FƯsÏ=ªgđg>EEE¿ụ̈‹³‡?~̣äIƠ3ø3¯~«zăÆO?ư´íî’%K>üđCû§•••Y­Ö&M¨ÀŸyu8„„„h·óóó«V­́đ™µk×4i’êyü™W‡c§N¶nƯªƯ4hĐäÉ“U`R^z=öXûöíUO`^>sq̀„ zôèá́щ'ºxó¿ÿ+,WO°XDƒncß¾ ƈáá^|ÏœqBäççóÍ7Ç3/..₫ꫯThvÿû¿B»xÉbV«ƒ'h1wæŒhĐ@ü÷¿îcß>Ѧ«1bcÅ¡CB.rsU¯¾ĂgÂñ̀™3ƒv±çÎ!CTÏhv+V”ß¶6ư)À3gÜ8Æ /¸ĂVBˆ¼<5 €̣™·ªß{s'Õqǯ¼̣Ê]wƯ%„˜:uêŒ3† 0tèĐ©S§ªÑ́DPPù]})̃8vx"°²¬^-úôqü©ơƠèî1đ?>sÆñ»ï¾«V­ZJJJHHH=:uê/„ˆ~ơƠWÿç₫'&&Fơ˜fWT$‚ƒEqñµ»‹ÈỆh5jV¯}ûÏ?/Ăj¥¸Q>sÆñôéÓM›6Ơ¶u¬W¯^XXؾ}û´‡zè¡°°°÷̃{OơŒÂî¼ctt”₫QåưyGª€ä3á(„¨R¥|Ú&Mdggk·bcc÷́Ù£z@\chGç¡U€ßđ™plĐ ÁÑ£G/_¾¬ƯŒŒÜ¹s§íQ‹Å’““£zF”+*2Q’k«W‹5Ô€đ™pLHH(..~₫ùç9"„hß¾ưñăÇ7mÚ$„ÈÍÍư₫ûï7n¬zF”³ßFÑơÆn+~ưo •cà|æâ˜¡C‡®]»vưúơV«u₫üù]ºt |öÙgo¿ưöƒƯwß}ªgÄ5ÎầÙÆnb¸FƠø Ÿ9ă₫ÑG;¶M›6BˆÆO™2¥¤¤dóæÍyyy={ö1b„ê!„]5fee;ۣǭ́¯¡v¶Gä3g…ááá#G´ƯÈô{ô$%¹qŒŒ Wcè÷è>Üó‹€ó™püå—_yæ™´´´ÄÄDÛñˆˆˆ 6 4¨Øv: ÜvÛµvtvOkǤ$‘–æ̃I´œ¡µăđá‚=ăøM|&,X°{÷î®]»¦§§Ïœ9Óv|Ù²eưû÷?zôè’%KTÏqÛm¼ù[TäöjÔ¸cơjª€ß̀gÂqûöí¯½öZpp°₫x@@ÀÔ©Sƒƒƒ×®]«zFæ3áxàÀ¨¨(‡×ÁÔ¬Y3::úرcªgđg>¡¡¡— ¿D'??¿V­Zªgđg>­Zµ:}úô={́:pàÀÉ“'[¶l©zFæ3áøđĂ[,–qăÆíß¿_|ÿ₫ưcÆŒB 0@ơŒ₫̀g6ïØ±ăă?¾páÂx@û=1_ươ–-[9RVV–˜˜xÏ=÷¨ÀŸùL8 !₫ùvíÚÍ5+++Kq̣äI!D½zơÆ«ßÙîàKá(„è̃½{÷îƯóóó³²²JJJ¢££ëׯ¯z(Sđ̃p,))BT­ZƠ₫¡°°°víÚ©À\¼÷â˜6mÚôêƠKơ¸Æ{ĂÑ¡ÄÄÄ»ï¾[ơfäcáxáÂ…üü|ƠS˜‘…#T! …p€ÂRGH!á~Í› ‹Åø?àk¼÷7Ç!Μ9§?R\\,„0´Ùµk—ê‘ax̣¤È̀tđ€Å"¬VƠÓ€ßÀ«Ï8Z­Ö¢ëY­V!D‘ªçÚèQW~ÿ½‡Æøî;ƯcÇ";wvúTww\ºÔC_/æá½g?ÿüsƠ#ø­Á²³EÓ¦ư₫{Ѿ½Âíçø´1¾ưVtî,×…‹ÈÍuëºc !ÄàÁ®ÀO~ï ǘ˜µ́Ư»wÁ‚û÷ï¿téRlĺ¨Q£îºë.Ơ«â˜­“¢¢´£­…›ß¶Ñ¥‹øö[ÑỴ»|¹rĂÑ6Æ#á¨mOàƯr~¯~«Z¡ơë×̣ˆñ=kưiĐ?văjàG.\¸0qâÄÀÀÀ´´´O?ư455ué̉¥U«V}饗ÊÊÊTOç@»vÛѾ¾‘]Y""®kG…œµ£¡½‘ "X±bEaaáSO=Ơ®];íÈ­·̃zï½÷æææîƯ»WơtÙ·ăêƠ­F7·#ƠÀ "øöÛo-Ë€ô_ươŒŒŒ¶mÛªÎ)C;öëW~Û3Ơ¨ñÚv´¡ø}¼÷â…öíÛÖ Aƒ;wîÚµ«   E‹ AAAªG«€Öú³Ơ¨¹ÖơU/‡V«ñÚnª€ßp4*))¹xñb³fÍ₫ú׿.Ơ]Xùæ›õrË-2$66Öp$==Ư3óŸ:UMˆFú#'Nœ°Z¯zæ³ÛäåÔV«¨`Ǵ¬,QX( Ư9K”₫ιsç²³/yx5lrrrT}j/Äjè±,ˆ«¡§d5z÷î­úëö„£ÑÅ‹…‡>wîܬY³ºuëöóÏ?/_¾|̃¼y£G₫üóÏeÎ;fdd(₫ûï¯{‡ZÓ¥K¤‡O:=+¢£…Â⺭Ö(éùûØo%9zt½zơê)<éåî/Ú—°z¬† ¢Çjèy~5́¿­ÛŸ!2 ~ÆÑ¨zơêÚ™3g0 víÚ 4xöÙgsrr¾øâ Ơ:e¸†zƠª̣Û†=zÜếYQ_÷&ơÂÔÿ:~ûwPt¶óư=@áhT£FêƠ«uï̃]ÿ\Ü¿êqƯO«F‹EX­íß_¬Zuíö?₫¡zV|gưVBˆ’çµjÔôé£zV÷‹‰)¿m̃Q_‹©ŸB8úưy5C;ê«ÑđL•™)5+¿«oG}5d5¨D„£ŸpØ&¬FĂv¤¸AüŒ£ÿ°ZËÏ®•”ߥ5['ef˜qøđµ»&_ *gư³2g'Î;Ú˜s5¸q„£¿±¯"3wRf¦¨Qăº#f^ náèoŒG\ïïèßú÷—/_wÄơ₫ÀÂѯ®†Ñ8Ü£Ç WĂØĐü>„£ÿpq µ ÛÑ₫jg{ôI„£ŸpX¦mG‡;ï¸ØßÈ ư‹s&lGû5̉ÜÂÑÜ|sùm×WUwî¬zV÷{åW«¡oÇÚµUÏ €O!ưAV–ˆ¢¢}{ö_­zV÷kÛV́̃íj5´v¬][ä竟ÂoñYY<ÁTû¶m[Á×›™©zD|g …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p¬Ø©S§Úµk7~üxƠƒ¨D8VÀjµNœ8ñ̉¥KªPŒp¬Àûï¿¿}ûvƠS¨G8º’™™9wîÜ-Z¨@=ÂÑ©«W¯N˜0!,,l̉¤IªgP/Pỡëí·ß>pàÀâÅ‹CBBTÏ áèØîƯ».\˜””¿ÿ₫ßúÇÆÆ¤§§«₫ÔÈÉÉQ=‚a5ôX =VĂ€Ñc5ô”¬Fï̃½UỮ‚pt ¸¸x„ ‘‘‘ăÆû}!##CơáE¢¢¢TàEX =VCƠ0`AôX =ϯ†ư·uû3D&A8:0kÖ¬œœœ¥K—©À[pqŒÑöíÛ—.]:räȶmÛªÀ‹pÆÑ(33S‘’’’’’¢?¾jƠªU«VÅÄÄ|₫ùçªgP€p4ºùæ›ï¿ÿ~ư‘ .lÚ´©Q£Fqqq 4P= €„£Q§N:uê¤?²ÿ₫M›6µoß₫7̃P=€2üŒ#¤Â[ƠkƯº5û2pÆRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! %Pơ^ª¸¸øÓO?]¾|yNNN­Zµ7o>bĈ;ª @ÂÑ«W¯>|÷îƯ¡¡¡:tøù矷mÛ¶iÓ¦¿üå/₫óŸUO áèÀ²eËvï̃Ư®]»E‹ !233“’’æÍ›×£G–-[ª@~ÆÑôôt!Ä‹/¾¨U£"&&æ©§*--Ư¼y³êéÔ ÈÎήQ£FëÖ­ơcbb„'NœP=€¼UíÀ‚ +³ÿ~!Ddd¤êéÔ hƠª•áÈÖ­[SSS«U«6`À™k8¢½ưmB999ªGđ"¬†«¡Çj° z¬†’ƠèƯ»·ê¯Û[(--ưè£^ưở̉̉9s愇‡ËüSª÷"QQQªGđ"¬†«¡Çj° z¬†çWĂ₫Ûºư"“ ]Ù¶mÛË/¿|äÈ‘† ¾öÚkñññª'P†pt¬¤¤ä7̃HKK«^½ú¨Q£{́1ÛÖæD8:PVV6nܸuëÖ%$$L›6-""BơDꤥ¥­[·î‘G™6mêY¼û8Y­Ö?ü°V­Z'NT= €ጣѹsç?4dÈûG“’’TÏ áh¤mU\\¼oß>ûG¹°˜áhtûí·³ #€=~ÆRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …ptêŸÿüçC=×±cÇÉ“'ççç«È'ơîƯ[ơ^„ƠĐc5ôX DƠĐc5Ô"›;wî”)S9rÇwÔ¬YsÅO>ùdqq±ê¹”!ÈÈÈHMM­_¿~zzzjjêÚµk‡ºgÏÙ³g« @ÂÑeË–•••3&""B;2ỉ¤ĐĐĐ/¿ü²¬¬Lơtj́ر£J•*Ưºu³ è̉¥K^^̃?ü z:5G#«Ơzøđá:uêÔ©SG¼yóæBˆ'N¨@@Ơx¢¢¢̉̉̉Úµk‡†† !Ο?/óAbccU^„ƠĐc5ôX =VĂ€Ñc5ôX …G#í̉é5j׬YSqáÂ… ?BFF†ê/ ̣ñVµQíÚµ-KQQ‘áø¥K—įçLˆp4 µ?³XXX(„°]g `6„£ơë×ÏËËÓJÑ&;;[{HơtjốÙ³´´ô»ï¾³±Z­7n ‹‹‹S=€„£=ôP•*Ũyçíç…©©©¹¹¹¼é¦›TO †ÅjµªÁ-^¼xÖ¬Y7îܹó±cǶnƯÚªU«Å‹ÛoÓ`„£S«W¯^¹rå={6lxçw3FÛ‘ÀœGHág …p€ÂRGH! …p€ÂRÇJóÏ₫󡇋‹ëرăäÉ“óóóUO¤Lqqñûï¿ß§OŸÛn»­sçÎ=öØæÍ›UåN:Ơ®]»ñăÇ«D¥½{÷>û́³Ư»w¿ă;’’’¶mÛ¦z"eJJJ.\øÀÄÅÅơèÑcôèÑ™™™ª‡R +++66öÇtø¨Ù^Z]¬† _Z]ÿƯ°á¥Ơ“ÇÊ1wîÜ)S¦9rä;î¨Y³æ+|̣ÉââbƠs)pơêƠáĂ‡Ï˜1ắÙ³:thÖ¬Ù¶mÛFŒ1õ<Ơ£)fµZ'Nœhûèæ´~ưúÁƒ¯_¿>"""..n×®]C‡]¿~½ê¹(--6lǾÙ³óóó;wîܸqăµk×öïßǪGó´´´4g™đ¥ƠÙj˜ó¥ƠÅß ^Z=ÍvđàÁ-ZtîÜù̀™3Ú‘äääæÍ›¿̣Ê+ªGSà£>j̃¼ùàÁƒ‹´#‡ºóÎ;[¶lùÓO?©N¥Å‹7õ¼yóæÏ?ÿ¼êYÔ(((hß¾}Û¶mwîÜ©ùñÇo¹å–øøø̉̉RƠÓyöoÊèÑ£ùåíÈ–-[Z¶lù§?ưIơhráÂ…;vL:Uû÷b÷îƯ†'˜ê¥µÂƠ0ƠKk…«¡ÇK«‡qƱ,[¶¬¬¬l̀˜1Ú‘I“&…††~ùå—eeeª§ó´ôôt!Ä‹/¾¤‰‰‰yê©§JKKư₫]233çÎÛ¢E Ơƒ¨´bŧzª]»vÚ‘[o½ỡ{ïÍÍÍƯ»w¯êé<í‡~B 6,00P;̉¡C‡–-[=zôüùóª§ó„¾}û2ä“O>qöS½´V¸¦zi­p5lxiơ<±́ر£J•*Ưºu³ è̉¥K^^ö½ÁT²³³kԨѺukưÁ˜˜!ĉ'TO§ÆƠ«W'L˜6ỉ$Ơ³¨ôí·ßZ,–è¾₫úëmÛ¶U=§5lØP¡oD«ƠZPPP¥J[Jú·éÓ§§¤¤¤¤¤ÄÇÇ;|‚©^Z+\ S½´V¸^Z•0ÅË“[Y­ÖÇשS§N:úăÍ›7Bœ8q¢}ûöªgô¨ ØÛÛ¿¿"22Rơtj¼ưöÛX¼xqHHˆêYTÚ·o_XXXƒ vîܹk×®‚‚‚-Z$$$ØÎ ˜JŸ>}–,Y2}úôàààÛn»-???%%%''çá‡6Éß“N:i76lØ`ÿ¨Ù^Z]¯†0ÙKk…«¡á¥U ÂñF•––Ö®]Ûp<44T\:Á$Zµje8²uëÖÔÔÔjƠªN5™ÄîƯ».\˜””¯½Ê›SIIÉÅ‹›5kö׿₫ué̉¥¶ă‘‘‘o¾ùæ-·Ü¢z@O‹MKK>|øđáĂm“’’&O¬z4¯ÀK«/­¼´ªÂ[Ơ7J»¾¯F†ă5kÖB\¸pAơ€*•––.Y²äñÇ/**9sfxx¸ê‰<­¸¸x„ ‘‘‘ăÆS=‹b/^B>|xÍ5³fÍÚ¶mÛÆGụäÉÑ£Gû÷u²Μ9ọ́åË­[·4hP¯^½‚‚‚V®\iÎk̀íñ̉ê/­¼´*ÄÇU»vm‹ÅRTTd8®m  ưDZ9mÛ¶íå—_>räHÆ _{í5×?ªâ¯fÍ•““³téRs¾«W½zuíÆ̀™3{ôè¡Ư~öÙgO:µbÅ/¾øâÁT=£GM˜0áû￟4ỉ£>ª9uêÔ Aƒ{î¹U«VEGG«P1^Zá¥Uđ̉ªgoT```hh¨ư₫ !lJIIÉôéÓ‡ vêÔ©Q£F}ùå—æ|iÛ¾}û̉¥KGiÂ+?́Ơ¨Q£zơêAAAƯ»w×OHHB®Ÿ³wï̃ªU«ªüáÀ‡Y,–úơë{́ÓmÚ´©´´´k×®ª¿îk^yå•Ơ«WïØ±Cơ ̀‚pàĂ‚‚‚6nÜè±O÷üóÏ₫ôÓOª¿n!„8sæ̀êƠ«UOÀ\Gđ%W®\9v́ØÎ;ß{ï½ÂÂÂƠ0Â|Éøñă×®]«z &E80…Í›7úé§?ưôÓ… Z¶lyçw9̣¦›n²=!77wÉ’%_ươÿû_!DÆ ;wîüè£j?Cùúë¯/Z´H{flllppđ®]»Æ¿jƠª÷ß¿C‡úÏƠªU«­[· !´çlذá́Ù³¯¾újffæ5k₫đ‡?HNeoÀ€·Ưv›¢¸¸ø­·̃R½®̀…pàÿfÏưüĂjµ6lØ0""bçÎÛ¶mûî»ïRRRêÖ­+„ÈÍÍ2dÈÑ£Gƒ‚‚6mZVVvôèÑ÷̃{oƯºu+V¬ kß¾ưƠ«W?ùä“’’’¡C‡ºn;{7n\qq±¢¬¬Lr*‡zôè¡Ư((( xáÀ‡ÛBJ/44ô³Ï>ÓnoذaáÂ…M4™3gέ·̃*„ÈÍÍØ£G=z¬ZµêêƠ«“'O₫­sN:µM›6O?ưtóæÍĂĂĂ%§oĂà|˜Ơj=éÈéÓ§mÏ™5k–âÍ7ßÔúL₫æ›oÖ¯_ụ̀åBˆ«W¯vï̃ưùçŸ×ªQ̉·o_!ıcÇn|Î5j,\¸0>>^«FÉ©ÀÛpÆ€Ó~ÖĐẠ̊óó³³³£££[·nmøăăă?û́³}ûöuêÔéÏ₫³á¾á̀Ĩ|¾1¾:Ăùàp:(OƠ 0B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)Áª° ¸¸8Ơ#€J”••¥z5ÇJaÛŸÜÅÅű.¬†«¡Çj° z¬†Ÿ¬†ŸŒá{¼U )„#¤B8@ á)„#*×ÚµkUàGX =VCƠ0`AôX =VC-ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRl999qqqß~û­ùi§OŸNHH7nœêyT²u8¦§§—{Óéœ0aÂÅ‹U  X°ê(**:|øđgŸ}¶|ụ̀rO^´hÑöíÛU  ñgÏ?üđƒ̀™ÙÙÙ³fÍjÖ¬Ù¡C‡TO  ˜Ă155ở¥KBˆ%K–lÙ²ÅÛiW¯^?~|xxxrṛ!CTO  ˜ñ]»vÚƒ7œ6{ö́ƒ.\¸°víÚªGPÏá(cï̃½óçÏ8p`›6m233í?g8²víZƠ_“yyyªGđ#¬†«¡Çj° z¬†’ƠèÑ£‡ê¯Û_”””Œ?¾aÆcÇưmBVV–ê/ÂDGG«Á°z¬†«aÀ‚è±z¾_ ÷¿ÖƯ¯ÙáèÁôéÓọ̣́–-[¢zaë}=Ú¾}û²eˆ~×]w©ÀpÅÑ(;;[‘–––––¦?‘‘‘‘‘ûù矫@ÂÑè¶Ûn{衇ôG.\¸°yóæúơëÇÇÇ×­[Wơ€jFíÚµsí×£Éܼ̀̀ys«V­^{í5ƠÓ(ĂÏ8@ á)¶~«:%%%%%¥ÜÓZ¶lɾŒ\q€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGXÓÙ³ª',ÁéT=BˆcÇTO@A8Z†Ă!:ÁbcDE™µ£oÆüŸĂ!Ú¶ơú́àÁ¢JQZê‹16ôú́äÉ":ZlÚ¤d…\‡p´Wy‹¡rO°ä̃ÚÑ7c₫OûزÅs;,/BˆààÊmGmŒ¼<Ïí8y²HIBˆNhG@=ÂÑ ¦O¿öØ=†ôG̃{¯ÇøđCÙ1¦N­Ä1₫ưïkƯÛQ?ÆĐ¡•8@ÜÛÑU  _Œá̃®jÔt́¨n!Gk?̃k;ªqذJcÀ¯íh¨Æ—^ªÄ1Ú·÷Ú†j\° ÇüŸ₫çơíh¨ÆÊ₫1GưŸ¯oGC5úÉO[6G8Z„Çvôe5j<¶£/«Q㱩FÀ{;ú¸Ư?‹Öo¼N5~ˆp´“뾩F¡cb¢]}S÷vt¡=C;ú¾Ư?W^xûí0%c0G8Z¡5¾¬F¡5¾¬F¡5T#àÎc™ù>×üd &G«?̃xÄÇƠ¨0ÀxÄÇƠ¨iß̃xäƠWŒø¿Aƒ®û°M5cLtƯ‡¿ûªơàáh5æ·33†ù₫€=~®Qxߣ§Rî†̃÷è  áh)úNzôQÏÇ}ù¤œư}0ÆÔ©"-íŒù₫>cèPñùçǻïØ“û=Ỗöè©Tî;ïäääº>¤ÿA8Z„Ç{¨Mî³öÁ®»aLöwôÁ®»aLöẃÉÛÎ;>nGoû5zÛ߀B„£˜́¼ăËv4ٯїíh²_£É=€Ư¼ü²ÙÎ;>kÇuë̀vù¦C8ZëµƠăÎ;úv¬Ô-\¸Çwôíè›1<î¼£oG¶ù€M™"î»ï—ÇåîƒóÍ7•5ƈ±ceÇ8ỷ׫À€p´§Ól¿F­}ĐIN§Ù~Z;úf “ưµv¤mÛÄ}÷™}/hOUö7Ë̀™b́XơcA8Z‡ù~îû;VóưƯ÷w¬$æ»|»ïïØÓ¶måœà›\›9Ó/ÆP.ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p´?ÿÙ́Ù₫ư}4Fï̃fÏç£1î¹ḈÙ·̃gÏúhÀŸ97z‚•<ø 8qẤ[­à‘­Ă1'''..îÛo¿uª¤¤dÑ¢E?üđƯwßƯ¾}ûaÆ}óÍ7ªç5ăpˆ´4¯íØ¿¿øè#_¼ä9"#Ăk;'fÎôÑ{öxmÇ·̃Ï='¢¢hGØöÍḥ-Yî ṾàƒbÍqÛm^ÛÑV«xcëpLOO÷xüêƠ«C† yơƠWÏ=Ûºuë&MlÛ¶mèĐ¡ï¼óê‘=s½ylG­ gVêÛQ«F_á±µjÔDEU‟{óÍk=~Kê¥zÜJ–-Ö¬ùå±ÇvÔ¯†ù€µÙ1‹vîÜ9uêÔ?üĐă üñ̃½{6mÚ4gΜ÷ßåÊ•aaaï¼óÎÁƒUïÓyí±¡ơƠh8³RÇ0´£¾}9†¡ơƠXÙc~nôh1kÖµ í¨ÿđÙgǺ٪ǭd±±bûökÚQ¿ññb÷nƠăêØ1{ö́™””´|ùro'¬]»Vñâ‹/†„„hGbccŸyæ™̉̉R¿}ĂÚc;ú²Ư?…«ÿ₫ô±‚™ïlj,íÎCYbçNŸájGª0đÖv«Fͽ÷znGªĐ V=€©©©—.]B,Y²dË–-î'äææÖ¬Y³eË–úƒ±±±Bˆ“'Oªß+§óº÷¬×¯G\÷¬ïÇÈÈß~û»cÇ«]wF3!„çÏ‹ĐPߌ±ghØPäå)X ÀÏ-„Ï?ÿˇ†ëö©FÖ÷Ư÷ˇ·ƯvƯ³T# ́íÚµÓlܸÑă sçÎ 6®Lff¦¢aƪÇ7£¯%%Ơè>†±]ÂÂ|ÙT#à¡]́VC;ºP€ÆáX®-ZlƯºũ¼y7ƯtSŸ>}d₫„¸¸8ĂííoÈÉ11Ñ×ÉÍÍơÍ'7á¦wÁ„…ß»·¬vm˯†K>`mƠĐS»½{‹‚‚Ú))·º T4fL=¿Y""ĪU7ơéSßu¤iÓË+Vœ²çjø!%«Ñ£GƠ_·¿ ËQZZºté̉3f”––¾₫úë2ÿTVV–ªƯ÷kœ93Ú÷·ƒ'Ê©F!„·Ư}·ÈÉÑÑäoñÖ[Æ#}ûF«½l]i_l b5ôÔ®FJÊu.^\ûƒ*ñ?êü|Abb®ûđđájAAÑÙt5üïWĂư¯u÷+D6aÇ›cämÛ¶­gÏ©©© ,xđÁUOTĂƯ0“ư+‰áêrTÚGĂƯ0“ưÛ*w;[ñø…›́ïØ áèÙåË—SSS|úôéQ£F­Y³¦M›6ª‡*‡É=Ô¾lÇ_W•ÆäjÚĐ3ÜCm²Gî¡6Ù£°'̃ªö ¬¬ĺرëׯïÖ­ÛÔ©S###UOT>Ơh¸ÏZQÙïYûs5î³¾ç~Ôđºó₫>kûÜOæqçĂ}ÖÇ µïYjqÅуôôôơë×?₫øăï¼óNàV£ûăʾîèÏƠè₫˜ë€·j4ßܪ¼í×èmGÀG#§Ó¹dÉ’›o¾y„ ªg‘e¾Ë·¡+Ï{ï™áƠ¿ÿ]±cèï_7_={*q5€â¾ó¡mÅ}çC;V¯®zD@̃ª6úñÇOœ8’””ä₫lbbâÀUÏhäzÖ[®•{B…(,ááâüùÿ}–V­¤~CL—.;ÆêƠâÁÅ5WđÚ÷‚·ư]û;Úä;E[ oû5ºöw®FÍSOPüf„£Ơ˜ßG̀lÁÀoF8Z¾n¿ƯóqÑ´éă÷¿W¶Xáh†»aöï/gGŒñØcbíÚ<óư}0F›6âȯ÷ÊI„£Ex¼‡Úä>kŒáºÆdGŒáºÆä>k ƒp´“w|Ù&û5ú²Mṽ¡¸„£8¿<đ¸ó¾]gVêw̃Ñ·£oÆđ¸ó¾¯^­Ä1°`Ơ b8bÜ8¯;ïh{ô¸ïÔScôïïuçm÷z*cŒ¶m½î¼£íÑ3t¨ ªôI°ÂÑ:̀÷kôA5j̀÷kôA5j̀÷ktßß”‹·ª …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG°¯èèrNp8TèCsæ”sBơêªGT³u8æääÄÅÅ}ûí·Ÿưä“Oúơëß¶mÛ‰'ª*Rt´8v̀, µ§l̉s我#;ØêƠÅ¥KvY À[‡czzº·§fÍ5ỉ¤£G̃{ï½µjƠZ±bÅÓO?]RR¢zd¨“'‹cÇ~ý1†ôx@ơ¸•,;[Œi¶Z5jjÖT=. ñ¨¨hçÎS§NưđĂ=••5õ¼¨¨¨µk×Λ7oƯºuƒ Ú·oß̀™3UÏă•WĈ×>4Ô’₫Ă?₫Q¬[§zÜJ+–,ñºúj¬QCüü³êqú={öLJJZ¾|¹·>₫øă²²²Ñ£GGFFjG’““CCC׬YSVV¦z|¨iiÛÑnƠ¨IJ̣ÜT# ¬zRSS/]º$„X²dÉ–-[ÜOرcG•*U:uêä:Ô¡C‡Ï>ûl÷îƯ­ZµRư@ÅHKBwSˆáJ›}ªQ“”$„^[›n¢ëØ1Ûµk§=ظq£û³N§óÈ‘#·ÜrË-·Ü¢?̃´iS!ÄÉ“' GVbhG»U£ÆĐT#``Çp4W\\\ZZf8*„8wîœ̀g8²víZƠ_™yyyªGđ#¬†«¡§v5ÆEE·.]ZÛu¤}û’wßư!7× ̉¦˜5«ÖóÏ×q q8p̀«á‡”¬F=TƯ₫‚p4̉n®év×\­Zµ„.\ùC²²²T~$ºÜấ„ƠĐc5ôÔ®Æ̉¥×}øơ×!Êÿ¿£p€ääë>,)qØy5üïWĂư¯u÷+D6aÇ›c̀………9ââbĂñ‹/ÿ]w+)w;[Ñß ăbÛƠ G£àààĐĐP÷+‹EEEB×}Ö` †{¨Möè±Ă=Ô&{ôöÄ[ƠDEE9r¤¨¨¨vík?ñ“››«=¥z:¨0̃ṽÑßgítª̉W¼í¼£¿ÏÚ>«xÄGºvíZZZúơ×_»8ÎM›6…‡‡ÇÇÇ«*†·jô¶¿£µy«Foû;öD8zĐ¯_¿*Uª¼ưöÛÚÏ5 !æÍ›—ŸŸß·oߪU«ª*˜ûÎ;†v´“w í¸`êYux«Úƒúơë7núôé½zơjß¾ưñăÇ·nƯÚ²e˧zJơhPaœNápxƯ¯Ñµ¿£M̃œƠVĂÛ~®ưß{O ¦zV@Âѳ¡C‡Ö©SgƠªU«W¯®W¯̃ÀG­íÈ–a…ii¿ä£M˜¯FR’¸ÿ~ñûß«PÊÖᘒ’’’’âíÙ={ö́ÙSơŒA5üŒ#~üQơ€z„#nöïÇuÿ‹Œ÷Ư§z,@1Â7w̃éáàḅdƠ“*\Ïd·Æ”ÚvF8đ?O=U₫ß))́Û" …p€ÂRGH!øŸóçUOø5€ÿ S=à×G₫g₫|át–sÓY₫9€E\Ϥ IFØá€›}û<üË_T(¬züÏwpqpÇGH! …p€ÂRG€b‡5Êë³»v ‡Cơˆ¾]„„rN((P=%́p¨¤EáÛo{nÇ]»D«V×N³<íËܽÛk;j'DDĐPƒpø÷vtU£æØ1Ơ#úÇvÔ×óúơªG„-•ô»%êÛÑP¹¹¢qcƠ³úv5 í¨¯Æ?¨¶D8soÇn²a5º¯†«©Fø  ¡{ơªïúĐVƠè¾»w‹˜˜hׇT#Ô"~Áăoø³a5j<®ƠåG€¿Ø¹óº ²i5j íM5B=Âà wĂ!/6ÛßṆ̃ ;åæ–³¿#à„#@=÷jÔxÛßṆ̃<î[i²¿#à„#@1÷wrrr]Ú° ÷PëWƒv„Z„#@%oû5zÛßṆ̃<î¼c²¿#àK„#@ó]¾mØ&û5̉đ„#@}ưxÜyG_K³g«·̣ưñ¿<đ¸ó~5víR=+l‰p¨¤ÅÉ~Ú ÷5´uëÄÿh¶_£­V~(Xơå;ỵäúơë<Ú±cÇ:¸Ÿ“ZVV6ỵdƠĂ~µr3ÈV´n]9'Øj5àoü=?ÿüóÉ“'k.Y²¤sçÎo¾ùfơêƠơ§-]º´´´”p¨<~ưVơñăÇ“““‹‹‹;uê4ỵä¿üå/‘‘‘7n|₫ùçU`;~}Å1--íÊ•+#FŒ=z´väñÇ4hІ >û́³={ªÀFüúcfffHHÈŸÿügבđđđ7̃x#88xæ̀™—.]R= €øu8tèêI¬Ï¯Ă1!!aôèч###cĈ ,Đ?;{ö́Ö­[oذ¡wï̃¥¥¥ª‡°8¿G!Ĉ#₫ñ 6́øC:uôOƠ¨Qc₫üù/½ôRll¬CÿkáP üzGMÓ¦MÇïñ©ªU«0`À€ÿưïọ̣́TO `e₫~ÅQRơêƠ›4i¢z +³H8 ²B8@ á)„#¤Àv<çÏŸ?pàÀ÷ß_¿~ư¶mÛæççGDD¨ Àú) æ̀™óé§Ÿ–””!ܶmÛÄÄÄ–-[¾úê«áá᪰²€y«úÊ•+#GLOO¯]»vbb¢ëxddäÆû÷ï¯Ơ$°’C‡̀6Mơ|60á8wîܽ{÷v́ØqíÚµÓtÿ|üñǽ{÷>v́ØâÅ‹+đÓ]¾|y₫üù<̣H|||—.]{î¹́́lƠk€½8¢ys¯í8møë_¿uØ—&·oßô÷¿ÿ½FúăAAAS¦L©Q£Æºuë*ês•––=ỵä¼¼¼~ưúƠ®][ơJ`#†v\° Ôơ˜jô=‡3pV}æ̀™óçÏBÄÄÄäää4hĐ FG-++KLLœV¡wäïÛ·oÈ!ú7Ç8qâÄ   rÿÙ¸¸8÷ƒk×®U½~jäååưîw¿S=…¿`5ôX =VĂ€Ñc5„ÙÙƠx ₫HNN®Ï>{=Üfee©^é×^x!!!aúôé999BˆS§N !êÔ©3f̀ưÎ7®¨¨hÚ´i?ÿüsË–-ï¸ă‚‚‚Í›7¯Zµê₫ûïï̃½»̀Ÿ`Ï™¼‰V=‚a5ôX =VĂ€Ñc5>úÈxä̉¥èfÍ|ôÙƯÿZ÷x‘È)…;wîܹsaaaNNÎåË—cbb¢¢¢*ü³Œ?~×®]ÉÉÉO<ñ„väôéÓưû÷₫ùç322bbbT/6b¸FÓ¼¹8xPø¬¡ ˜Ÿq̀ËË;qâ„ö8<<øàƒƯ»wÏÏϯ́OTPP „hܸ±á¸v¡ñÇT½Ø…ûÎ;±±—MöwDe ˜pŒB>|¸²?QăÆƒ‚‚²³³ · i?ßФIƠ+€-xÛ¯ÑÛ₫đ€ ÇÉ“'‡„„̀™3ç¿ÿưo¥~¢:?~ü­·̃*++Ófgg§¥¥U«V­sçΪW[0ٯѽássLddä믿>eÊ”^½zơêƠ«Q£Fî[*vêÔ©B>WJJÊ£>––¶zơê-ŹÚµ«¬¬l̉¤I¿ÿưïU¯¶àt₫̣K¨=ăí·{=•!`ÂÑu©/??ö́ÙÏ©¨Mp"""V¯^ưî»ïñ¼ù_ÿúWxxxÇGŒqÇw¨^lļµvlÙRơ”v0áØ«W/_~º5jŒ3f̀˜1ª¿nàƠèc¯½öêl-`n€ZsÅñ₫ûï/÷œ­[·ªÀ²&‹ GœN§k»œºuëFDD¨ÀÊ&¿ûî;Ă‘̉̉̉Ó§Oùå—sæ̀¹té̉K/½¤zF+ àŸq jذáĐ¡CgÏ}áÂ…çŸ̃É>N•&€ĂÑå₫ûïỏ¤ÉÉ“'O<©z˲B8 !"##…·̃z«êA,Ë áX\\üƯwßEDDÔ¬YSơ,–07Çüç?ÿñx¼°°0==ưܹsƯºuS=#€•L82ÄäÙ›o¾ù¹çS=#€•L8ü®êFơéÓ§aƪg°²€ G~W5€ZssL||¼I;5êP=#€•L8_¹rÅÛS'Nœ8uê”ê¬̀¯ßª̃´iÓˆ#\.^¼xÉ’%î§•••9ÎF©ÀÊü:ƒ‚‚j×®­=.,,¬V­Z5<–œœ¬z^+óëpl×®ƯÖ­[µÇqqqưû÷Ÿ8q¢ê¡lʯĂQoذa­ZµR=€}̀Í1ăÇï̉¥‹·g'L˜`̣,`s‡Ù³C‡–s_r8Äă—s JÀ\qB~ơƠWÇ7/))ụ̀Ë/ƒ‚‚Tø#íï‡C8:T¼ÿ¾Ù |Iû†]¶L!>üĐë |ĂB•€ Ç3gÎ 0ÀdϤ¤$Ơ3~gÚ´kƯÿ¦qU#ă±ơ×_zI¼ô’ê)a?ï¿ÿ₫©S§î½÷̃={~ñÅÛ¶m›2eJHHÈ¡C‡–,Y’””ôâ‹/ªđ;Úfưë/êÛÑP\½üÓy­ í¨¯Æ©S©F¨0áøơ×_ßtÓMiiiµk×î̉¥K»ví¢££Û´i#„ˆ‰‰yå•W₫ßÿû±±±ªÇüÇv¤¿å̃©©T#üEÀÜóư÷ß7nÜXÛÖ±N:áááĐêׯ_xxøû¼åx‘œ,^}ơÚ‡Ơø5ưwå²e"&&Úơ!Ơµ&…Uª\›¶Q£F¹¹¹Úă   ¸¸¸}ûö©đ_†vt¡ÿäñ{“j„ruëÖ=v́ØÏ?ÿ¬}ذaĂ;wºu8yyyªgüZr²HH¸îƠø3Ăwèí·SP/`±[·n%%%/¼đÂÑ£G…­Zµ:qâÄæÍ›…ùùù»víjĐ ê¿6t¨Øµëº#́ø3Ăwèǻïø@ÀÜ3hĐ uëÖmذÁét¾ûî»:t~öÙgï¹çC‡?øàƒªgü—·wØ đOÿ»ÎdGÀ7æcDDÄ̉¥KÇŒsÇw!4h0ỉ¤Ë—/óÍ7]»v:t¨ê?å~µá^~ÅpuNN®ëĂe˸î•æ£"""bøđá® Đ³gÏưû÷GEEÅÄĨđSw̃1Ù߀Zî;ïäæíïøR …£æüùóø₫ûïëׯ߶mÛØØØˆˆƠC~Êd¿FÚđC&û5̉đóVµ¢   %%¥S§NÆ ›4ỉ¦M›„‰‰‰Ï<óLaa¡êé´páµÇî]èmÊyÜyGÿ]L5B‰€ Ç+W®Œ92==½víÚ‰‰‰®ă‘‘‘7ńß¿II‰ê¤ưMăíj¢«¹Üøí;Ñd¿Fóïh ²L8Î;wï̃½;v\»ví´iÓ\Ç?₫øẵ½{;vlñâŪgü”ùß1ÉÉü%ø§³œưù†…BÛ·o úûßÿ^£F ưñ   )S¦Ô¨QcƯºuªg°²€ ǃFGG{¼¦V­Z111ÇW=#€•L8†††º~ß »Â›o¾YơŒV0áØ¢E‹ï¿ÿ~ß¾}îOöØc‡ćر™™™úă™™™£GBôéÓGơŒV0€·mÛöÉ'Ÿœ?₫#<¢ư˜₫óŸ[¶l9zôhYYYbbâ< zF+ ˜pB¼đ ӧOÏÉÉBœ:uJQ§N1cÆèwv@e¤pBtîܹsçÎ………999—/_‰‰‰R=€-øo8^¾|YQ­Z5÷§ÂĂĂT`/₫{s̀wÜѽ{wƠSà₫%&&̃ÿưª§°£ Ç .ªÀ,  á)„#¤B8@ á)₫û›c„gΜ‰×)))Bº́Ù³GơÈ–å×WNgñơœN§¢Ø ƠóF3f¨ÀŸ$%©°„±cUOà[N§Ù³+WªÏfü÷ă矮zà†8¿<?̃́ó×DËçÏ‹‹Å?₫Ájf̀¿Æo¼!̃xĂ.ß,Új”•]{EƠ[¹R<̣ˆ¼tøÿ†cll¬Úöïß?wîǛ̀̀‹/ÆÅÅ5êøƒêUAÀp½ÆM˜ „§vtàpXÿ%O«F!DF†èƯÛC;Új5æß Z5œ`1®Ơ¨RÅC;ºªÑ&«á'üú­j…6lØ0`À€ 6DFFÆÇÇïÙ³gĐ A6lP=†₫%lÂă{Öú—¿éÓUÏZùô¿(TkGo«Ñ«—êY¥ÆŒ¹öØĐIújö¸Æöÿwíq•*×}ÉújB”•©Ơ6G.\¸0a„àààôôô>úh̃¼yË–-«V­ÚäÉ“Ëøw̉¼µ£¡½½‘m1úƠĐ·£¡½½‘ ØÄë¯{nGV£"1Ñs;ºW£Ç7²QGV¬XQTTồ3Ï$$$hGî¼óÎ?ưéOùùùû÷ïW=‰¡çÎ µg5º¯FF†xúé(ªpç̃©©·Ø°5îí¸n] ªQ!‡ÓVÿÊ2dÈÖ­[ÿơ¯Ơ­[÷7üăqqqYYYª¿‘››­z Å<¾¨Ù­]<®ƠÈw b¸ÄèbÏ¿´ —]V£mÿ®÷ß›c:pà@xxxƯºuwîܹgÏóçÏ7kÖ¬[·n!!!ªGC@r:/m¶­F«A5î^]alG{V£øßuGC;r­Q ÂÑẹ̀åË?ưôS“&M^zé¥eË–¹7lØđÍ7ß¼ưöÛe₫¸¸8Ă‘µkת₫ÊÔÈËËS=‚Ÿ¸îÚɹsçrs/¨I¡ëV£¸¸87÷Œê‘ă;Å€B\¸p‹¡ú#¹¹¹ª‡Ræ̀™BDéäææú,{ôè¡züoU´iÓF:qâÄN:ư÷¿ÿưôÓOßyçúơë₫ùçå^w´íåkx¿IđVơơx«Ú#¾S X̃ªÖă­jÿÁÍ1FƠ«W×L›6­OŸ>aaauëÖ}öÙgọ̣́¾øâ Ơ"Àè_Ô&L8§{lÇß+£_nƯ®ư¶'÷=z;3Tă°a×̃ °á›³†jLK»ö…aøáhT³fÍêƠ«‡„„tîÜY¼[·nBˆC‡©Äpơđá̀÷w´6Ă=Ôóæñ¶G`gî;ï¼øâ9“ư­Í}ç=MöwDe#=ˆŒŒ¬ZµªăúoMíê«W¯ªĂÛÎ;ölGo;ïĐ€·ư½íïhm̃ökô¶¿#|€pô sçÎEEE‡Öܽ{·¢Y³fª§C`0߯ÑĐ–~í±û3Ú°3“ưmØ&û5º·#|ƒ•ö 11Q1ỉ¤sç~ù‰´ưû÷/X° 44´{÷C`p½â{» Æu‚₫C¹°P„… áư&[­`Âü{Aßvøfq}o‚Ñ·£VĂO°Í›73f̀o¼Ñ£GV­ZïØ±Ăáp¤¦¦̃zë­ª§CÀp:ÅŒf·NÛê•®°P$%‰¥KY  æß Ú₫Úÿµ§ÓĂæ¯.Z;&&ª̉NGφ±xñâ-[¶„‡‡wíÚuÔ¨Q±±±ªçB€±ç†;̃˜T#yö©Fù›̣T£^ơíÛ·oß¾ª§đüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8³g{÷O>©zD2_3Ê9M°ê€§eĂ!œNÏöî-22~yü̃{ªgU½3fˆ ̀NÀ…+°ØØkƯ/¤é«qÁƠ³V¾!C̀VĂUÈ a5ÙÙ¢I“kêkI_BØâÛ¢Ebđ`Ï«a¨F;¬à° íhĂjÔxlGªđđ3°¦́l+ùåCĂ»´vë¤E‹„âƒX À á#,ËpƯÑÅd¸îèbÏƠü6„#¬,;[Ô¬yƯ;w̉¢E"!áº#v^ Ào@8ÂÊz÷?ÿ|Ư;oX8c†Øµëº#v^ Ào@8² wĂ¸Ø³–¼í¼cÏƠü6„#¬Éưjo{ôØû=ỖöèÀá ̣¸óÉ₫Öæqç“ưđ†p„Ơ˜́×hĂv4Ù¯‘vüZ„#¬æå—¯=v¿kXßaaªg­|ăÇ›­†·=zđˆp„ƠÜu—Ø»Wï{Íhí& UÏêÚ:x[ W;²5 \„#,è®»ÊÉ ́l»T£Æ|5-¢RGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€Â¨Dª' â@eq8Dï̃fíèp‡Cơ”H#Ëwúôé„„„qăÆ©ÄU„̃ÚÑuí„c9œNç„ .^¼¨z˜Ë—¯=voG},>ñ„êYC8–cÑ¢EÛ·oW=OƠª^ÛÑP ª9„£™́́́Y³f5kÖLơ HîíøÏÖ ‹pôêêƠ«ăÇONNV= •¡Ÿ~:Êơ˜jœ`Ơø¯Ù³g}hG~ÂÑ ‚ÿ÷ €<¶£V;´£ëkôØZ5júôQ=+…p´ư/Ï3´£¾…=~Í₫k4´£¾m²T ÂÑ"<¶£ «Ñư+uµ#ƠÀ ¾ñ?~Âé¼ö.mF†¸ơVqîÜuÏÚ~5̣óE¢¤Ä¾«@…ࣥè{ÈÎƠè₫USÜ8ÂÑjÜ«ÈÎÄjPG«q߯Ñ|Gk7ÎxÄ|G`‚p´ĂƯ0“ư­Íp7ŒÆdG`p´“{¨mØ&÷PÓü6„£Ex¬FÛ¶£Çj¤¸A„£˜\k´a;\k¤¸„£|÷ƯµÇæ÷ÿđƒêY+_h΅jäç«€€B8ZAa¡ Âû^3ÚñûîÛ¶©µ̣M$^y¥üƠlÍÀ¯D8ZDaa9ätÚ¢5“&•¿T#¿á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áˆäp‡ă†N~+Xơ~ª¤¤ä£>úôÓOọ̣́n¾ùæ¦M›:´mÛ¶ªç̣k®"t8„Óù[N₫Œ+\½zuÈ!¯¾úêÙ³g[·nƯ¤I“mÛ¶ :ôw̃Q=_›;÷Úc÷Ëú#cƨüz\qôàă?̃»woBB‚ BBB„ÙÙÙ|çwºté̉¼ysƠú©§ŸBˆáĂùPYÑP¯¿®zVđëqÅуµk× !^|ñE­…±±±Ï<óLiié7ß|£z:¿öôÓ®;RXáèAnnnÍ5[¶l©?+„8ỵ¤êéü¡cb¢]©FoU{0wîÜà`ăÊdff !6l¨zº`xÏZC5èGZ´ha8²uëÖyóæƯtÓM}úô‘ùâââ G´·¿í£{w!D´₫È³ÏæææªKµ¼¼<Ơ#øVCƠ0`AôX =%«Ñ£GƠ_·¿ ËQZZºté̉3f”––¾₫úë2ÿTVV–êÁs¿«:&&-x„ÑÑÑ7₫‡X«¡Çj° z¬†ïWĂư¯u÷+D6ÁÏ8Ù¶m[Ï=SSS#"",Xđàƒª(0諱mÛÇ@À!=»|ùrjjêàÁƒOŸ>=jÔ¨5kÖ´iÓFơPÁpuzúæû;€@Á[Ơ”••;vưúơƯºu›:ujdd¤ê‰†ûÎ;¹¹fû;€B8z¾~ưúÇ|êÔ©ªg $&û5̉XoU9Î%K–Ü|óÍ&LP=K€qµ Çwôû;R"®8ưøă'Nœ IJJr611qàÀªgô_N§;Öë~ÚuGíÿ€€C8iD•””8pÀưYn‘)—ù.ßT#‹p4ºç{Ø…À?ă)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤Ö1a‚Ù³Ă†©Ï·Ú·7{vÁƠó€G‹p8ÄŒ^ÛqØ0±p¡p8TOéĂƠؼÙk;.X |̉F«@E!­ÀƠ@ÛQ«FĂ™æú=¶£VöY *áhNçµÇ†vÔW£áL«̉†vÔW£MV€ D8Z„Çv´a5º¥®v¤¸AÁª@…q:¯{ÏzͱÿuÏÚ~56oM›́lû®‚+–¢ï!;W£ûWM5păG«q¯";w«@"­Æ}¿Fóư­Í}¿Fóư€ ÂÑR wĂhLöw´6ĂƯ0“ư€9ÂÑ:Lî¡¶a;ÜCM;đÛá±mÛ«‘vàV`r­Ñ†íhr­‘vàFV`¾Ë·¡-oÎÙƠؼYơ¬ÂÑ \1äm¯™rO°’;EB«@Åă7ÇXD¹ d«HÚ¹³œlµT®8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áèƠ'Ÿ|̉¯_¿øøø¶mÛNœ8±°°PơD©GªGđ#¬†«¡Çj° z¬†«¡áèÙ¬Y³&MtôèÑ{ï½·V­Z+V¬xúé§KJJTÏ  áèAVVÖ¼yó¢¢¢Ö®];õ¼uëÖ 4hß¾}3gÎT=€2„£üqYYÙèÑ£###µ#ÉÉÉ¡¡¡kÖ¬)++S=€„£;v́¨R¥J§N\G‚‚‚:tèPPP°{÷nƠÓ¨A89Î#GÜrË-·Ür‹₫xÓ¦M…'OT= €Áªđ;ÅÅÅ¥¥¥aaa†ă¡¡¡BˆsçÎÉü!qqqª¿?Âjè±z¬†«aÀ‚è±z¬†B„£‘vëtÍ5 ÇkƠª%„¸páB¹BVV–ê/ âñVµQXX˜Ăá(..6¿xñ¢øßuG"‚ƒƒCCCƯ¯, !\÷YØ áèATTTAAV.¹¹¹ÚSª§Pƒpô k×®¥¥¥_ưµëˆÓéÜ´iSxxx||¼êéÔ =èׯ_•*Ũ~ûmíç…óæÍËÏÏïÛ·oƠªUUO †ĂétªÁ-\¸púôé 4hß¾ưñăÇ·nƯÚ¢E‹… ºoÓ`„£WŸ}öÙªU«öíÛW¯^½ûî»oôèÑÚ<öD8@ ?ă)„#¤B8@ á)„#¤B8V˜O>ù¤_¿~ñññmÛ¶8qbaa¡ê‰”)))Y´hÑĂ?|÷Ưw·oß~ذaß|óê¡üÂéӧƧz•öïßÿ́³ÏvîÜù̃{ï8pà¶mÛTO¤̀åË—çÏŸÿÈ#ÄÇÇwé̉å¹çËÎÎV=”999qqqß~û­Çgíö̉j²6|i5ÿwĂ…—V_"+ƬY³&MtôèÑ{ï½·V­Z+V¬xúé§KJJTÏ¥ÀƠ«W‡ ̣ꫯ={¶uëÖM4Ù¶mÛĐ¡CßyçƠ£)æt:'L˜àúèö´aÆlذ!222>>~Ï=ƒ Ú°aƒê¹(--úƒ3f̀ÈÊʺ뮻TOçkơêƠBèÑét?¾J•*®”´¶ÔÔÔ´´´´´´6mÚx<ÁV/­å®†­^ZË] /­JØâå©R9Î#GÜrË-·Ür‹₫xÓ¦M…'OlƠª•ê}jîܹîíeff !6l¨z:5fÏ}đàÁ… Ö®][ơ,*8p <<¼nƯº;wîܳgÏùóç›5kÖ­[7×[yøá‡/^œZ£F»ï¾»°°0---//ï±Ç³É¿'íÚµÓlܸÑưY»½´¯†°ÙKk¹«¡á¥U ÂñF—––†……‡††ë/'ØD‹- G¶nƯ:õ¼›nºÉp©É&öîƯ;₫ü¶iÓF{•·§Ë—/ÿôÓOM4y饗–-[æ:̃°aĂ7ß|óöÛoW= ¯ÅÅÅ¥§§2dÈ!®ƒœ8q¢êÑü/­¼´đ̉ª oUß(í₫¾5kתUKqáÂƠªTZZºxñâ'Ÿ|²¸¸xÚ´iª'̣µ’’’ñăÇ7lØṕرªgQ́§Ÿ~B9rdơêƠÓ§Oß¶mÛ¦M›FuêÔ©ç{ÎÚ÷ÉzTTT4mÚ´Ÿ₫¹eË–ưû÷ï̃½{HHȪU«́y¹;^ZMđ̉ÊK«B\q¼Qaaa‡£¸¸Øp\Û@ûc{Ú¶mÛß₫ö·£GÖ«Wïïÿ»ùªXƠôéÓọ̣́–-[fÏwcơªW¯®=˜6mZ—.]´ÇÏ>û́éÓ§W¬XñÅ_<ú裪gô©ñăÇïÚµ+99ù‰'Đœ>}ºÿ₫Ï?ÿ|FFFLLŒêă¥Ơ^Z/­JqÅñF‡††ºÿçoQQ‘Âu3 ­\¾|955uđàÁ§OŸ5jÔ5ḱù̉¶}ûöeË– >܆w~¸«Y³fơêƠCBB:wî¬?̃­[7!Ä¡C‡TèSgÏƯ¸qc“&M\Ơ(„¨_¿₫È‘#¯\¹²råJƠªÇK«;^Z5¼´ªÅÇ uäÈ‘¢¢"ưÏçæææjO©Î×ÊÊÊÆ»~ưúnƯºM:Ơ¯ïí·€h÷êgdddddÄÆÆ~₫ùçªgô©ÈÈÈóçÏ;ưAí‚ÁƠ«WUOçSBˆÆküñGƠú^Zơxiuá¥U-±tíÚ5++ë믿~衇´#N§sÓ¦Máááñññª§óµôôôơë×?₫øăS§NU=‹b·Ưv›ë_ Í… 6õ\¿~ưøøøºuëªĐ×:wîüÁ>|X»1V£í«b·mØ7n”ít:ơ%••%„h̉¤‰êư/­z¼´ºđ̉ªáXúơë÷î»ï¾ưöÛ;vÔ~p{̃¼yùùùO>ùdƠªUUOçSN§sÉ’%7ß|ó„ TÏ¢^»ví\›Jh2337õܪU«×^{Mơt $&&~đÁ“&Mz÷Ưwµ=Vöïß¿`Á‚ĐĐĐîƯ»«Î§BBB:tè°qăÆ·̃zkÔ¨QUªTBdgg§¥¥U«VÍđn¾mñ̉êÂK«/­j ~ưúăÆ›>}z¯^½Ú·oüøñ­[·¶lỤ̀©§R=¯ưøă'Nœ IJJr611qàÀªg„2Í›73f̀o¼Ñ£GV­ZïØ±Ăáp¤¦¦̃zë­ª§óµ”””G}4--mơêƠ-Z´(((صkWYYÙ¤I“~ÿûß«Î/đ̉êÂK+üáX1†Z§NU«V­^½º^½z=z´öŸÈ¶’——'„())9pà€û³öü9nè ><""bñâÅ[¶l ïÚµë¨Q£´ß~a7«W¯~÷Ưw7õü¯ư+<<¼cÇ#FŒ¸ă;TæGxiƠđ̉ ÿáp:ªg@`;H! …p€ÂRGH! …p€ÂRGH! …p€”`ƠÀo‘ưđĂ›Ÿ³ÿ₫jƠª©¬ƒpÀGTT”Ï>ƯæÍ›KKK;v́¨úë₫ÅË/¿üÙgŸíرCơ ́‚pÀBBB6mÚä³O÷ /}÷Ưwª¿n!„8sæ̀gŸ}¦z öB8@ ¹té̉ñăÇwîÜù₫ûïƠ®][ơDl„p€@2nܸuëÖ©€Mlá›o¾ù裾ûî» .4õü¾ûî>|xƠªU]'äçç/^¼øŸÿüç?ü „¨W¯^ûöíŸxâ íg(g̀˜±`Áí̀¸¸¸5j́Ù³gܸq‹-jƯºµ₫sµhÑ¢víÚ[·nBhçlܸñ́Ù³¯¼̣JvvöêƠ«÷»ßINå®OŸ>wß}·¢¤¤ä­·̃R½®́…p`}3gÎ|ï½÷œNg½zơ"##wîܹmÛ¶¯¿₫:--íÖ[oBäçç'%%;v,$$¤qăÆeeeÇ{ÿư÷ׯ_¿bÅđđđV­Z]½zuụ̀å—/_4hyÛ¹;xđàØ±cKJJ„eee’SyÔ¥KíÁùóç G>F8`%%%®̉ ]¹r¥öxăÆóçÏoÔ¨Ñ믿~çw !̣óó'Nœ¸iÓ¦9sæL4I±bÅcÇué̉eæ̀™5kÖB9rÇ_}ơƠ£>Ú¥K—.]ºddd\½zuâĉ¿vÎ)S¦ÜqÇ#FŒhÚ´iDD„äTàoØ@s:§<ù₫ûï]çLŸ>]ñæ›oj}&„ˆˆˆxóÍ7£¢¢>ưôÓóçÏ !®^½Ú¹sç^xA«F!DíÚµ{ö́)„8~üøÏY³fÍùóç·iÓF«FÉ©ÀßpÅ@Ó~ÖĐä„ÂÂÂÜÜܘ˜˜–-[₫Á6mÚ¬\¹̣ÀíÚµûóŸÿløüñÇ/¾ø¢¢ǽƠ«WơêƠíT <"XYNNöăââ<àº6yêÔ©ÿûß;wî??ÿ₫ư¥¥¥÷ÜsáÇ :$ó) ojùå—2•ê•G7f̀˜²²²1cÆ|đÁîƯ»»víÚ¢E‹³gÏ9r$44´nƯº—.]ºÁ©ÀqÅ€Å9iÓ¦½ơÖ[]ºtÑ~%Lttô˜1cV­Z®óúë¯ÿå/©_¿₫Î;Ïœ9Ó¡C‡U«V½øâ‹IIIAAA;v́ĐNKNNnÔ¨ÑÑ£G>,„hذá‡~Ø­[·*Uªl̃¼ùđáĂ 4˜?¾̀ơB™©Àß8Üï₫üZ?ÿüsAAAÆ ‡êY ²Â[ƠB8@ á)„#¤B8@ á)„#¤̣ÿˆƠ‚Īj¶IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/fuzzy-logic-toolkit.png000066400000000000000000000304561466512601400244050ustar00rootroot00000000000000‰PNG  IHDRȦŸ¦À´ pHYs.#.#x¥?vtEXtSoftwareAdobe ImageReadyqÉe< IDATxœí½y”\×}ßù¹¯ö}íྂ¤P²(SEb±́3ÇYY93'<‰”g Œ%’¢%G²“È:ÉLNg2˜86IKD*EZ$J$.@7v ÷®}¯÷̃?^uuUuU£«»ª»¨ÏäĂ}÷Ưzïơư¾ßïwWè̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºÜøˆµ¾.«ËÁĂƒ´ư¦D¨EU¾áq[?|öđG…µ¾¯N¥+|SŸƠb₫ByXÀ°”¼zÁ1̣ŸF[ëû[âéư;₫‘‚xAp>YNIxKJy ÉñœÆ‡ßûñh~ín³³¸érèÑÍöŒÓr«0É= <,#ÄÀ\S¾®¨Úï}óGçϮɮ€ƒ_vû¿Cˆư×Í,å´ü\êâ¸~́f̀Í&ñOléµê–]BÈ=±¸A ^f“IÁl2‘/ç’RºÔÿå‰äè÷C]µ»^>â™};~K ñÇBp:ĺyà.ü^ÓQ&¦f™˜Êdë— å4đ–⸢iÇ&̉Ú‡ÿ籋¹U|†5å†ÈSOl·Ù¹Ă$L»r·„‡b»K½ü»pĐG_8@OÈO(àC‚“œáăÑKH)đ3M/|ơÅW.~²ªÔÿË-}4ÿ‰„ßB€m›yø₫;°Û¬Uy¥”$R&§#ŒOÍ21!Î"ë”+%3ù–—B;6•ĐOßÈ‚¹¡̣û¿>’EÇ.v !ö÷!DO½¼¢àó¸è ûé è đº(R·́ñ©Ỹ8qD2 €”¤r$Î₫ñ³fM>°ưï(Rù7úv+»wƯÉæ ư”´²(RJ’© %ÁLNGH5 0̣m©s\â˜;Y8ớ $˜u+¯îÂâؼ̈́e7‚‡…»¥”;…¶zùm6 ဟ̃°Ÿ¾p€PÀ·àKz=E•wOᣑ*ḳ&ü½çÿzäă•?ƠÊxê‰í=³øc!øM À–ávﺇ½îkY•‚™˜.Y:ÓH0³Ṛ¶̣¸ÔűâlæÔw~~µÿÖù¬|cïÆ€n²Ü‹Tö Ø-¤Ø%‘}¢Î'QQ·‹¾P…uđ¸0™ê[‡fŸåͧˆ—¬ ’´”̣YGjä;keMîÛùe!ø>‚!»ÍÊĂ÷ßÁÖK²Í ¥$™Î09-»d©tY_1³H̃‘èÇuMÓ¢ÙÖ“`:R ‡Åœ÷nÛ¬"V¤²[ñĂ­ᨗßfµô{é è  ëĐêQIQUùÅ©³|xöbÙ« ư÷^ü«ÑÚöĂ5|íñ A«Ơñ"‚ß³›†úؽëN\NûªÜƒ”’T:[å’%FJ"̃AêÇ€ăE{îưïî\Át„@zb»×®(÷(&¹)ö äÀܼ!—ÓˆBzĂ~|^7f“i î&¦#¼qâ≒5Af€g£×F¾óƒw).víJyzßÖ'…búw1 ƇâS÷ƯÎöÍCmư8\JÁL”,L#Á ‰"ä;è☆~o2‰?6X-fº÷6vnî¨ÆbH)Ig²L”b˜É鉂‘È’qLÚq§ù峫(˜V¿QñÏ¿¸mƒÙ®<ˆ.÷EÙ Üxêe6›M}#.ơ=¸öu󇮇ªªüâô§Ï\¨ˆMäÛ¨Úï=÷£ó§–[îÁa2ø-„üÇs—Á¾0Ÿ~đ.Ëú°Í29åw>([‰̀ )₫ut́́ ÍZ“§÷oÿ¬"ÄAl°˜M¯»Ôï`4·º]›₫·†5áô'çç­ œDç+Ͻröư¹„Cn¶g½–?ˆ XzĂ>óĐƯø½î5¸óÎÇL¾ä’ƒ/ †‚w¥®—‚cédüƯÅSUùîßù×Bđdm&‡ƯJ8à+Ç¡€«Å¼®ƒéµbj6ÊïTX)s:̣›Îs£ßÊnƯy¯Pø!FĂ&“ÂưwîäÎ[¶t?>MP)˜‰©ăÓ³Ä\2’Hù®⸮ëG¾ưÊèÏ+O–kø×öí²yE!ÜNCưá² <.gˆitUÓxïĂQN}r]/ÿÑÎ[(Y O?tAƯÀ.M ¥$›ËW¹d±Dª`¤.%ß|₫å‘ÿm.e^ oZmÎIÀl·YÙ½ë¶ ·~O—y¦gc¼qâ"±d9MQî»c;wƯº­ûQjeÁ̀DË.Y…`BËơ}ë¯/GÊuoKd?½#è–°GÓtqñÊñd₫àºé¨[o¸œvvlÙ€Àp½‚~/_ü•غqEé~˜Ú…‹ÅLÀçax°—­›™œ‰ÎäLf̀ßûÙÙÙ$,lÅOïÛù? Á÷çf 9́Vvß'›‡—6— Ë̉(DbQf#Qñ¦344HoÇê 2́©L–Ÿ¼~’H,QJ‘G{iäKsçëÖøöø¦«Íú}ø¹´­Ù½kál´.K£¨ªDc1"‘(±Xœl:ƒIL‚‚‚ªËfŒÁ˜n7}=azĂa‚?¦5ˆy£3‰ó“Ÿ$“5æwIä_Cô·i¦́ó.fÄÓûwü]ø7óÖÄVMº,¦iÄâ "Ñ(±hŒt*eAÔ2'Z̀f3á`€̃zĂ!\Ng×’·€Ë×&9öó_RT…j$ú÷‰Ñ¯ƠÎç¹î›>x`xPHÇŸ ø̣\ÚÖMƒ́®3·ùfF×u≤!ˆXŒT"…²¡ ji$Z\N'½=aúÂaBÁK·3¶Y><{·ù1RJ$RCʯ?ỵ̈èwëå]ê§H<°ưï!•ï–WÇ°ÛØư€1ÏùfDJI"™"ÅI$ éKD-KH%&E!đÓÓÛÆëñt­Ë"èºäí÷>⣳ç’RRç>ÿÊÙ¿ltMSoókûvY…ü·•ë+m+YÛ nMŒt™r ‘ˆÇÑUmÙ‚¨e9©Ån³ÑÑ×ÓCO(ˆÍ¶üyè7Ţʱ·̃ặµÉ¹¤1‰úkÏ¿t₫äb×-ç/+îßù€ï̉ }sk-mê[FqK&›%ňÇâ¨E“mùJ·B •!đ{½ô–‚ư€ßwÓöƧ39^}ă$3‘8>ĐÔâtá̉ơ®]ö_úkûvYùïÁKÛ¶iˆƯ»nÇf]ŸÖ$ŸÏ‰Æˆ•QÈÚ&ˆZZ-Z, =¡ ½%ẁéè¼™‡í`6à'?;1×ÇDí7Ÿ{ơ||)ׯô//¾±Ç?’ˆ?[Đå°³çÁ;Ù8ØùÖ¤P,‹ÆˆÅâÄăqr™,Ê* bÁ½´Y µxÜ.z{zè ‡ k6§¿\Ÿâ¿ÿí/)K SR₫ûèØÈSÍ̀ÇiIMø_÷í* ₫L˜KÛ±yŸºÿ¶²&ªª‹Ç AÄâd̉iÖFµ¬¶@*1™LFSrɺ¸]®x'+áăÑKüüƯKĂG¤.u¾ñü+#/4[N+ß‚8¸ûï"Ä·ç&Q¹œvyà.†{[ø3KGÓtâ‰D9†H¥RIG₫ñ×R µ8öRËXáPë:jJ–ṚÎ{sú̀…¹”Œüö·^ù¯Ë)¯å5åàÛ7`V₫LÊƯơ;·là¡ûnÇÖæ Tº®“L¦J"F2™]v¤ jé$T"„ è÷—ƒ}¿ÏÛ±ïSU5¿ơ¯N ’ E‘_₫æ_¼½Ü2Ûơ¤â™}Û¾‚¢¼ÂFḷé‡îfĂ@Ư¥r—…”’T*M)%'?8ĂŸ›KÈéRüÎ ¯œư/-¼e bFájñæ™ÈÉGn ŒÑÁ^§•;†x́f63f³‚®é¨¾Ú·¶¦hºNNmëZ×k±B–é™Y.\¾Â¥+WI¤RèºƯfCYâ˜6UÓ8₫ó÷8sị̂\ÁÓºĐ÷¾đ̣èÛqß«nAŒ}>lï İɤ°oÏ­x] gĐ *ñT–D2C"•CÓolÁÜèd1„ø}^úzzŒ¦d¿¯î‘Ù\Wv’©ÙŔ-ù¤PĐöçȹÑvƯÛªO6—&ÛŸÎ-×ÿÀ-CuÅ`µé zè zJ«ƒçI$3ÄSY2Ùî¶̃7RJ¢±8ÑXœOFF±X,ô†BFßK©)9Lsôơ$S™¹k ÙßøÎ‘«‘ṽÛªZƒû¶ÿ}¡(ÿ`¨ÇËçîß¶,?´XÔH¤²ÄS©,ªº₫­ËÍlAa1›ù^×üJÿß1L,™!‘ÎÜ‘Énÿmưa»ïiU,È!P²v¾*às̃·•Ὰk^¯UƠH¤s†;–̀–çw:7›‘R; »„}nB>7~Ó"Ét¿}†|A(H'Ÿǻkí¼ÏUÈ3ûw|!^ؾ!Äî;7­ÆÏ–+îX2C*“o´üäs³Äă´̣yûܼ.,ææR§¢)^=1‚¦KDUUÿô‹?nßmÈ×l¹Û$Ío#„Ưă´±wÏ­M¿”V¡i:Étx̉ˆ]J_¢àFˆĂf-Y!Ÿ«%V/ŒExăƒ‹Hä9=§ïùöÑsS+.¸mÈSOl·9-Ê à.!àñ‡v̉èŒÊ¥”ä jY,Ét®rÜUçFˆƠb&äụn“kû³/Æ£ă¼?:{Ơ;…Ï?{́b®Ơ¿ÓÖ ƯiQ₫̉Jåwníïq€Ñön·Y°Û|ô…}hºN:'2b—\₫Æí´k%f“‰€×U#<ÎƠÙBï®mư$3yÎEđHÖcùÀ߇ֶѴíI¾±Û¯J¡a ùœ|éS;×Ơ¢ùÂ\́bX­Í=ûëÁ‚H)1™üngÉerăs; ¬Û‰¦é¼zr”©¨±½‡@₫«o½4̣/[ùmHmoù̃Ư·âs¯ßơfu]’Îæ w,™%“k}ó{§ Dđ8å¦×€×ÙQó×s•¿yë ÉLºDüîó/ư¿ZU~[rpÿ?BüÀC·sËÆÖM’ê E•D*K"™5:*[`]:I .»Ïˆ#‚^7¶ßh5Îqä­3ä‹Ú܆D_záåÑă­(»åyzÿßR„øsXYoùzÁØ`2O"™- ƒÉ×Ưïûz¬¥@́V A¯›pIN{ç,´±T&"I^;9:×Đ2«¨êo₫èüÙ•–Û̉û̀¾­æ÷lV3û¹ ‡mưLøoEU#™2Ä’Le)—ÖQ¹±˜M½®rávØnˆØ¹k³üí©̣ZpgUG^|ǻ̀JÊlÙ[9JnÿΣǿ}[ÙØ¦̣̃ơ‚ÑQ97 &K:“¯ÜÀ³v Ĥ(ø=ÎRáÆ{o¸ú̃ȧΕm@¾)Ê/~ïÇ£ùå–×2ç2{`ç׆8¶ …nzq€Ñ”́tØp:l ôøQ5T:G¼»´«£R×i'ä7k¿§³ëvrÏö’™<Ç£€ø§Eüø–ÙüÛ RƯ[neïÛÖ¬·|½ ¥$—ŸoJ&Ó̀¦–·ß½œv«1„Ăo á°­£µ¬Zªé¼zb„éX]ê‡^xyô–SỌ̈;n¶÷y¬o!¸GøâC;éí Áơ‚¦ë$ÓY¦cI¦cI©lCw ŒÑ!¯Ñ9̣¹qج7DÑ*²ù"óÖRÙ ut₫ás¯Œüy³å¬øÜ·ưÛBQ₫½›÷î\i‘]€|Q%Oqq|†H"…Ål&àu ¬öº³îº̀Ke9̣ÖY ªÈ,ºøâs¯œ}£™2Vô†¿¾Û¯*B9*Öioùz൓£ô]ܶ©¯»-ô2ŸIđÓwÏ•¬±œ̉¹ç…¿=·Ôë—ưÆÿÙ—7ûM(ÿQ L&“Â#wmî£Å$̉9ÆfŒ^¬Áê7a/Ư>\ú—èxùko.ơúe×h«nù>BlØuËĐºJ̉©œ½b4á'3yÎ\^ă»Y¿́sÇc;!ÄmV«óÿ=t;Kê ]–@9°óï"ù{Ca/;‡ĂË)¦Ë"UsWgËÿ>5:A®Đa¼\îÛ98ßơ x,»m矲»Üt[́?ÿµmĂT^B8m3¿úÀv¬–n“n«9wm–Ë“óKËjºDƠt6ôøÖđ®Ö/B6ôz™˜M’É‚û?½#”{ó́́¢A{³DX¤̣æö&|øÎ8í7o{{»R–]*§ƯBĐh6¹2C,ys®<Ù ̀&Ÿ½.‡á]IE₫ëƒvüÆb×4%¯ïÛ₫YŸ‡noy;™¦ˆ%Éq;‡Ắºũ=s­cçƠ¯œ6 Ÿ»³ 0 Ä7Ëß”@E”£ÿL®À¹k³d»3ïZÎ'%ë¡(‚í½N¶m06“`l&±–··n‘R’Hç¸:ÇbVJi,Ú¢ƠÔX,‘Ñ^ĂiÆg“ŒÏ&QA¯ßÅpŸŸ =>\nîJHç \)Å›úưåÑĐ÷îä̉D”¢ªóî'×yºÍêK@JI2“ç̣dŒË1"ÉLƠtü¿»¾©èúÍóÑü#·x_AWº0ÉdÄ“ơđíË₫²Ål"™LIÈÚV3a¿k-oµc‘R’ʽ:Ë»Ÿ\彑1Æg“̃ÔAœùGös#p|†s–]{çÑÍö^¯i·Ê¯ƒØ+‘[D¼.z} ÷ú ù_¬‹1ë/&WPñØḾ}äv,ƒÏ?ÏÉs1 Ø,&~í3w`³völ¿Ơ$•Ése*Î…ñ‘D¦fâÔ‘|,%!tíđs?:%ŒđmÉçưÑG1ïrm»ÇlR¾,̣NUjpÚ, ơxîóÓtß4Ă¯›áüX„7Kë=Ư2èæ¾Û¶T äÂ…ó\›IraÖøàƯº©‡o®WÔMC:[à̉d”K1făé*QH)¥@œAÈÿOC=́zéÂég¡©ùÑíđÄï?¹u‡n2ˆ/ ÁƒPƯkiµ˜yÙØçc ́íø9Ï«Å₫ 3ñ “àáA†$N32¥’*H!Ø÷éÛđ5X!ÿF%•-pu*Æ¥‰(3±LƠ¨ç²(ĐÿB×Äá‹?9u˜Æ.Ôơh{€đµ};‡¬ OJÉ—|A•ăl2)ôÜ ÷ùêñáZ‡ó¡[ÁL<Í~€a[û\ô÷Ôä™LLẠɤáOoèññ¹]ÛÖäW“L®À•É8—&¢LÅ̉UMƯRJ)„‘R₫7Eןs{ïđáå‹¢’U ¿±wc@*Ö/ įK)¾8×á8‡"!Ÿ³Ü"æuƯs¥—›§.r₫±ƠÅĂ;Ø­¦†Bpq¶ÈlÚđ{`;ƒaïÜw;Éä\qq<Êt,½`~ŒD’ÿ&tưÿi¥(*Y³Ú÷Ơ}N¿â9-`K½óđ¹ílèơ3Üç#èũ°ór…"ÿơØit]öX¹s£1œ¤¿¿¿J /^ “1æ­58=–G—à÷8Ø»ûVeư¿Ÿl¾È•É—&bLESơDqEJ₫‹âđ;©³¿8vŒ¶.°¼fÎÿ^Ï<à)œ&ú}f¢XF#W”H –ÊKMpúü.‡• =>†ûüôú]7Ô܈ѫ³åu7„\ï; „Àj†~Ÿ™±˜J,™eôê ;×éúcÙ|‘«S†û4M-X#ÙjV(”6I’’g^xydѾ‹V̉ѱà±›đØMl B¶¨MkDÓé‚ñb̉Ùg.Osæ̣4v«™Á°Ñ"6̣¬ëùïº.9{ÙÖî´™đ»æb°…*BT¸œ‚¯™™¤FA“¼?:Îæ@Ơ–ÚL®`ˆââD”ÉÈBQØ-&úüúƒ,fo|8Ñ ¤ö̉oSQ®N« §ƠÄP ª$Q‰¤4’9 ‰±Üäù±çÇ"˜M ư!{ư öx×Ư:\W§ă¤KK™n:æ°¨af8háÜt\AåÔù vƯ²¡í÷¼\̣µBIc l…^¿ƒÁ€ŸÛ†"ŒçLçÖn›ÔÖQv3lA¿ÏJ¿TMÍhDÓ*ñŒ&,®NŹ:G‚€‹á^?z}xœíYz¿•œ¹dŒ»2)‚₫€ÄbÚUB‚n3“ •T^ç“KÓ́îé¨çÎT®NîÓÄ́BQXÍa)n[)2ÑxÔµ«:D ónC}ÿÛH·˜½^…^¯M‡xV%’R‰eTD—’ÉHÉHwÏ\%àq”Åđ8:®E,–Ê2I0°c®«ê¹XóçʆF6†¬|4f́ọ‹3×ǿ}[Ûzß×#_T¹6à̉D”ñ™ä‚-¼­f…^¿~¿ƒ€Û¢ˆºÏV>^Ă¿[g¤ä.Ô;ÑH0f„ÜBn º”$³:‘t‘HªH^•H ‘D–H"Ëû£ăxœÆ°—}~Â>WG´øTN£ 9©Eă:QñNJn©Çn"ä63›R¹<c"’¤?èiÓ]×§PÔ¸6ç̉x”±™D]KÑă³Óçwồ»OuQs¼–©ÎÈ·$µ(BÁçTđ»̀l鱓ÎëDREfÓE2yăë•̀äùøâ_œÂa53T#Ọ̈Ô|¹W‡‚ª•û=‚n+.›yÁ³-|ÖjËQ™¶1d#VÑ%¼ûÉUÜ}kÛ-fQƠ ÷i<ÊølrÁ*÷“BÏÆ@û´P ]ªÊăµœ₫̉aiNở…¸ífÜv3ĂvrEHJe6U$™U‘@¶ 2zu–Ñ«³X̀&ÆKA₫j {9m¶\¡6„5ÏÑ b7€Í¬0è·r5Z ’ÈrîÚ,Û7´~­€¢ª•Ư§±™DQˆyKQE½=«Q)ÅĐk7#f]¬z_W£œê4‡ƠÄPĐ̀PĐFQ“DREf’Eâ™"º4₫à—&Œ)“"è ºÙØëg¨·}Ă^*§ÔÚ­&¹ ºöj›.æßSm°0´1•(RĐ$©?Đ’&đ¢ª1>“àâDŒkÓñ¢0›=^;}~;A Sƒ@{9⨸pÖï^´#y‰¢Ñ¹z¨—W`5 úư6úưv4]'V™Iˆ¦¨ºDÓ%ă3IÆg’ˆ¯̣Ă^†{}øÜ<›Áøl’DÚXp|CÈYQé>Wí3-V©L l Û̀’Í«œ>?Á};‡–uª¦3>“àÂx”±é8ÅZQ(‚°×V)L× ´«w©W±́)}߯IDAT•Ú—CG¤ô*Ú$Œúç̀&…¯•¯ ]Jâ™"3ɳÉ"UGJ˜‰g˜‰gøåÙ1|.;Ă}ós[VâßÏYEÀP°¶ç|‘F^Q¿%«̣¸×ka"V •×øøâ;†Ă¸KköU5±™—'¢\NPT«‡6™Ê¢°Z‚¥¨<®µÍ¥¤ÓLEoV×/Ç$A·• Û́‡dNe&Q`6Y S0*I<#~>Çéó“8í†KA~oĐƯÔD°T&ÏƠ©8ưGynổZ°æÎ/t¯*·ô:8u%…¦K~qfŒ_¹wKĂ²TMg|6Áå‰W§â¥ulç1)‚°ÇJo(ªà+µ,7}3oÍX‹Fù—W€¢€ÏiÁç´°µÏE¶ 1“̀3(̀=º™\‘3—g8sy«ÅÄPá^ƒaïu}₫3Wæ7<»h,ŒF1Ùââ×a&́±0“,ĂĂ£=U+îkºÎÄl’KQ.OÆëZ{NÖV¾f*{åqóV£̣¸kAD­o]>1zIé,«œFç„—ƯŒËnfcØE^Ơ™Mæ™N䉥HŒöÿ c.ŒE0)‚—á>z|Øk†½¨ÎèUC ~—£¶iwñªĐLåÜ̉ă`6UDJ8ùÉUÿÔN&gS\˜ˆ–¢fk8E@Èc£Ïg#è±a65wjße›ÅQ‘¶t†@¨ÿơ\n|±”rê§7:g”m·Ør2t¢j’ÙTéxHª€V ̣¯Nǹ:Gèơ»¹-¥a/Ç#å9vU}ơË¿´,÷ªúÙ…ƽí\™Í1ÏpøµÚ€ ÇJ¯×NÈkŬ(-©́­ÏzX#ƒf…Ñ|œ²œtDơ7LÅ,88ĐtI$U`:g&‘£¨=ù“Ñ“Ñ'?1†½̀‰Ăf6å5ç^U§×GơñpÈÁT¼@^ƠËâP„Ñ1Ùă³öX1™É)?ărƯ¨Êă•YÚ㵤c̉~ë«o-*Åuó›döxíôú́Hé#–.0Ï1È“+ùÑ%C‡{\åÉ_~{i–²^Ïúü±Ù¤pß/Wgs¨ºÄï².¹OUÖ«ƒÄQ/MƠṇÂ깋WôVÅ Óë[‹fËBpÛ¸mÜ2$IfU¦Kb)j:}~;›û܈qn©â˜;o³˜ØÖïnke_ñ”¢©UIVJGÄ`í⋹ÿ-ÅZ\·œªt×iÅë´²m@–Ήë\S¾đw[ô•o©ƠXâo–Ÿs™âzU¤c²´¸£ÙJÛ(½‘(–YÎ"ùçωé×ûƯäúÁz{+̣RÊ[z9‹ç]ô¥´™HơWu}Z‹êôf¯Y1έÜj,’§|/+G+âăxíÄ"ÑèE4+ŒëTÜ% ăúh•`‰EŒ9éóy×Î¥ZYÅ¿¾;U-µ”Hg¤Å*I3‚U‡Í£UVa9¿±”æê»TÍæ_®8?^ :H *íbç©l D±̀rÉ¿ôk–o©jówj¼Ñ—ª₫(çƠeM" Y>^²µht®‘0–YÎ"éÍ^³̣rjY_.Ở‰£kA*Xæ×vÉÂX̃×±ôFçVZNí½ QY‰ÖCólkʨ]ôa5é ,^¡Vô&…Ñ>Á4úå—ÓøËyc»TµyÖrGƈ Éʶ@̣_§œẸ/ưÖ ¯~ysyÖ̉¥ZJ•‰£®`+̃€ =SûVÚIG¤ºr4#ŒF•ó:å,’̃́5­*§:½¾å0\¬Úß^-q4c}Z+Ê÷QÔoâ¡&°Ra,ÿ«Ưø¢Ùß®/ŒêkÖ»Kµ”ă…–e­è ”¿Œ séµi\ ×W|ÑX‹Ơ‰VXÊrËo¶ÚpưRịéLơï/ëxaÅ_zkCgh,ùs7^|±´ôêó+ÇbVÁl³áëïĂ7Ø W(ˆb2£k*ÿä§D¯\ƒ Ü«Q?ÏZĐ9i`- u_óf¯Y­ø¢«u.•Àâ°ăëïÅ?8€¯¿¯$ ˜}`éK˜ƒ(© ÜqÑ+cuËYÊo.~¼Đ²Tw-HUU2₫[÷¥,OÍZ€Ơˆ/–.¾…¿Y{íR+¡ƠaÇ7ĐgbpW0€¢˜ÁKOIaPj– 2y0™Í-©øË̉ÚÑ1iüBO_xnù‚YƯø¢yK"DuëY«Ó°ÿà₫Áœ?b³ßƒµ̀aP–º‚dóVĂø÷ʬLwm^¯´‹[«ôês­J¯Gưª˜M„7o$04„°WÀP,†…°ö¢0‡Äs“½₫æ̣g±ăÚƯ§V“È<Ëû7{ÍZÇở¯‹‰Ăb·q߯íÅÓcÄ Ơ‚Xá®[RE+ª ~sáñÊ­FƯr*^‡YÊ›om^QúĂC»ÜœùôΉ/Æ|¾êy₫xËC»đômÿc`r7.d…´?̃XX^%Å›qm^h—û3®=iiîR£sÍ»W•„ªcÿàØ·´Y+¯́Í—?­{„¦é´ÎÍiOzơ¹ƠM¯<ßĐ5ÑeĂëZI3V£Q¥W—³vY[Hˆ¤̣¼w!BØk#́µc·˜X‰`:;¾XZ₫Æ4j½jo +X=—ª;Ô¤„̣O€ÏêR˜fyfy Ça&́µÓăµăuZ*ö\0:1¾Xºˆ«óƠ‡XPFK‘*ªVüf{]ªyÖP$«¿9_Ï¿4̣~UJ~(‘W¤4Z¼“Y• “)̃™áơ'9u)ÊD4KQÓ*Ü ˜«ở€é‹«ucª+zuúbçZSNưzQyΘ‚+Ú¬æyW.ă=̀—·–6dÍcç^yxưĐ£˜³̃­÷J”½e/p`-¨:ă‘,ă‘,ø]Vz|vz|v\vsÅËnÆ*T§WŸëŒôFy[6!uPc3Y¨A»]*!¹‚J,5¿l«4ߤĂƯŸ=† çO'g>±}ƒbዱģ@@—’H*O$•ç̀µ8.›™°ÏN¯ÏAÀm,Ä<Ïê f5„WÍBWG×t£2· ©Bq²gÑr¦Î.£²7›_ é’X2Ëøl’±Ù$‘D¦ÜQ(%UWZ÷×g-­×’9´oÀ™Áơi“{%<`ˆ*÷ĐbRzlôú„}v́–Æ{o´>đ^Y9óéƠiN§¥b÷ªh4ªË×W–uÏ'đo{Ü÷/¸—%!uĐ’P˜€â§‘Zt$Êå¿ 55M³•}±ăÊ2̉¹"“‘$ă³I¦¢iruáíÁŒúW{yô¯–÷€Ëc]¤’C äöo¿MJñ¤PØ<¢j‡M!Àç´̉ăwĐësàuZç}u#µùë¥7:תræÓëçw8ª‹E)‹ÔC¸{ÿ2¢ç¡8…q(L‚¢É’˜˜$>6Nb|’b&C}a4{<ÿŒª¦3Ï01›d<’"‘Î-o%Q|,ÑJ£éTüoÿôØtjé×Ö@jyê‰í=N‹̣˜Dî’Ï#D_m‡ƠDÏA¯ßIĐc/ï Øl Ọ́Ư¥Fç ÉHw85‰Q,ëV»÷éú‘¨QĂJÆA ©̉3âׯˆM‰Æ¥UDV&ˆùc $Óy&¢)Æg’̀Ä3 ¶’.ƯऔâRÑtơ§/₫è¥Ƴ:¬{ṬÔÛmN“̣ ‚½ö·Qg™AĐc§/à¤ÇçÀi›ôÛ_̀Ÿ[Zz­@âñXÙ‚Ô^SW R‚™w› “H=G.‘$>6A|lŒäÄ4j¡° ¼V×Ó±4‘“‘é\‘…È,R¼+…<.d5ưưïưxtU‡’\J 5ˆóƯ±EWä—Ê>ŸªÆaÀí´Đçw̉pásÍíâÚ₫øb±ssåØíµ‰WXăº¹ëoü1B;ö€çAP#%·i´j>GbrØƠqâcăä’IׯøÍX M׉¥rLDRL̀¦ˆ¦ruFáJ]Âà5àˆ¦‹×_|ǻ ̀,*zb»×fæs`¯âq Ă¢¦›Öf1\±¾€“°Ï‰Í2¿cm«ă‹¥”c·ÛÄ̉VÔĐæÜúùGQcl&%vuŒØµqR33HM«úÍVˆ#+25¬Ät,M¾fcP—R¼‰”GLˆ££³#‡S/cGrÓ¤’Cbθ·ß-±WÀ^÷U“$!xlô\ôœxÖ:M˜åU•ߌ0+§¾@ÔeÍ;ư>́^éÙÅlvÁùåÏßÓ\p=M3I“̀äp‘¨RÈÓÀOĐŽëÛG'WuÓ›VrS ¤–ƒnDׂ½ >‡ X›Çe·Đp̉tô8*öŸgyÂhœßf³U $‘˜Hk+~#«¡KHf̣eÀ&² ‚kÆ¥”ÇâˆÓ~úGGÏ­j_E;é ¤†¯îpMî=Rg/B<ruú\Â>ưA}[ư IÍ£^̃…I,jA–~ÜXù¢Êt,Ăd$Íd,M6¿°Od8¡ëüDèÚß\¸x₫ƒĂ±ª™V‹®@á(Ù½;nÁ$RîF{e!Àï²Ñt3tásÛË;ØÖæ+ƠI¯Ÿßj­/z¹‚ÑuI4•3¬D4M<•G¯é”RJ£Rđº8R,f^ÿΑ«‘¯í†¢+&øưdžBªĂơy!Ø+à úkó8¬fú.B.züN,æ¹@¿ù8ÅjµV $™L®À‚̀ÿV:W4¬D4ÍLùAç;…}Rđ¤â ªÙK‚ ×Á`ØĂ@Đ×eCQW sD—’h*Ït4ĂT,C<“_0àOJ)…#ÀOĐơ#ù”ú³ï»kÿSß8t²Ê<ưäæ~a¶>r¯â±F}.ƒa[CôÜå{r&ÊÄl’©x–Ùx–bư>‰(đº”úÑ¢G½/;ÿ,¬Ưf뜮@ÖCn¶gƯÊ#B˜÷OHä-µĂ_¼N¯ƒL®ÈL,Ư(¸~ä:“êÛÏ»˜[µ‡¸Áé ¤C8JáÉ­Û¥IÙ+QöÜSÛçRFrMÂO‘ú³¢½ú‡/]˜\åÛ½iè ¤CùÆ̃]X²ÉCÀ5„<ª«=‘9}́ơº¸»té̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ÚÈÿû¿€́₫)»IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/gauss2mf_101.png000066400000000000000000001414111466512601400225420ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwXWàß*̉D±HE1½€½÷K,Ø»Qc!v£Ñ5ö{ûT́½`́Q”XbŒ°ß‹s/}ÙvgvÏûäyrfvvö̀®°‡;·¨Ôj5!„BÉŒ•è!„Bˆ2PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+6¢0C¢S „BˆqEDDˆNA*Â2ÿ1OOOúè-}ô‹>z‹e±Dt«B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB fß¾}¢S bĐGo±è£'–† GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„hÅFt„B̀–§§§èÑJDD„è” GB!FDßÇD₫è/íÑ­jB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„‹æçç§R©T*UË–-EçbxưúơÓ\]áÂ…Eçb¨p$„B,——×Úµk‡ªÙ‡̣åËÏ™3'>>@÷îƯ×®][©R%Ñï±™ µª !„Kçîî̃©S'MÚ¸qăâÅ‹wîÜÙÎÎnË–-­Zµúư÷߃‚‚R?1&&¦|ụ̀üĉÛ·o÷÷÷÷÷÷ß½{÷£GD¿Íæ€ GB!$ ¬­­MđZ?~´±±±²’ÅmÀ1cÆäË—ï̉¥KNNNÆëííœfáøË/¿DFF®\¹̣Ûo¿0dȯ¿₫ú»ï¾;räHêƒăăă9ræ̀™… &&&fœFdd$€Ÿ~ú)ăúRcøđá¯_¿>{öl… 4ÏêÙ³ç̣åË÷ïß_¿~}Ñï¨Y‘Å¿QB!D&+6lذùóç;;;gϽté̉£G₫øñ£tÀœ9s|}}ííí]]]+V¬¸nƯºϽpáB™2eÊ”)£ÍñC† 9r¤£££­­mÅ÷́Ù?f̀///GGÇ€€€›7oj~÷îƯäÉ“½¼¼ræ̀Y´hÑ   'Oụ̈?|øpăÆ&MhªFöööƠ«WôèÑ»wïR¿aÆüùówíÚU³Y¼xñ6mÚ?~üßÿM}ptttưúơƒƒƒŸ={–i&±D‰Ú¤}äÈ‘5jhªF 3ø[dá¨Å‘BIfóæÍÿüóO£FÊ”)sö́Ù3f„……;vL¥RưøăÁÁÁmÚ´ùđáĂöíÛ;wî́èèØ´iSÍs>|X¿~}''§ºuëÈôøµk×Z[[7ÎÆÆæ—_~iÓ¦M¹råâăăûôésçÎo¾ùæÊ•+‚‚‚Ö¯__§NÖ­[_¿~}åʕׯ_ײC¡ö¬­­¯^½êææ&í‰ÿ믿|}}í́́Rsûöí;ªT*ig``à̉¥KÏ=›z¨»»»Z­ñƠW_eœIddd9råʵyóæ/^øøøøûûgÏ=ơ‘ñññ (_¾<¿ó₫ưûräÈaØ÷‡PáH!D„óçE¾:×4•Ú?ÿü3uêÔ1cÆh6GơóÏ?oܸ±C‡kÖ¬)Y²ä₫ưûmll4¹¹¹íÛ·O*·nƯ<~üxÍ}çL½zơª¦²±±5jÔÛ·oÏŸ?Ÿ-[6×®];uêÔ›7o¬¬¬6nÜøí·ß®X±BóÄ   ;w₫ûï¿ùóç7àcccăăă£‰W¯^¹gÏÿư÷?₫H}đÿư§V«ƯƯƯùyóæ M›bÆ"##­¬¬J”(ṇ̃åKÍ//¯5kÖ|ươשs6m¿çŋӦM³¶¶nÓ¦ß* !„ˆáï/̣ƠƠê tssûî»ï¤Í‰'†„„lÚ´©C‡çγµµƠT¢££ÄÅÅIçÏŸ_ªdz¼¿¿¿Ôö cǪ@íÚµO:çèè¨R©NŸ>}ÿ₫ư¢E‹Xºté̉¥KS'¿gÏô.­yóæÚ¿I“&M̉Ü/®[·®æESĐ\ˆ££#¿Ss[s¥úˆŒŒLLL nÓ¦M¶lÙ₫÷¿ÿ 6¬E‹ׯ_—n£§éرc½{÷ŒŒ ñđđĐ3 ’„BH2>>>ü-Q{{{OOÏ»wïpqq9sæ̀ÁƒoƯºuçÎ7nhæ|‘xzẓc\2=¿)¬©Sï`gg7wîÜï¾û®X±b>>>UªTiĐ AăÆSߺ}ûöm‹-̉»4u†s wî܉‹‹ ªT©Rxx¸¦51Ẹõ¼áwÆÄÄpuuƠóS8v́˜­­­t=z¼ÿ~À€[¶léÙ³gOyđàÁÀwíÚåááqèĐ¡ÀÀ@=s ©ÑàB!$666?~üđáCÓ¦M«W¯¾wï^ï¾û.<<ỵ$¿óĉ*•Jê(©›û÷ïï̃½;00ĐËËKÚ©iËLó¦ù®]»ºté̉®]»E‹¥¸uN ‹ ÇLÜ»w¯aÆ›6m’&V „b2^ÿíÙ³gsæ̀5j”fṣäÉ111-[¶Ồ Í—2[¶lyûömz-yY=>U«V7nÜäÉ“XYYƠªU ܽl‰·ª+V¬`ÅíÚµ“ÆJ¯Zµ @åÊ•Sß«W¯!C†́̃½»I“&>}ºeË–ºuë+VLŸÀÎÎnĈ*T8|ø°æ₫ùgÍpơ5jԨ… ¯Y³Æ4ónZ2*3±fÍÑ)B1©üùóO˜0á̀™3eÊ” ;xđ`åÊ•»víúèÑ#{{û^½zuêÔ©`Á‚aaaGÉ“'Ï©S§öîƯÛ°aĂç È̉ñ(_¾|©R¥¦OŸ~ï̃½R¥JEDD́Ư»×ƠƠµcÇ)ÔܪÖùÚƯÜÜÆ\¡B…úơë«Tªƒ;wnèĐ¡¾¾¾©ïÖ­Ụ̂åË;uê4`Àggç•+WÆÅÅe¼–`zf̀˜1}úôiÓ¦ơíÛ7õ¼ÁÁÁßÿ½‡‡GÆ ÷ïßụ̀å©S§z{{§xbxxø­[·¼¼¼ROQ̃ªU+i;1*Ó¦™›j×®]6l !„“ªX±â°aĂ~øá‡_ư5₫ü#FŒ˜Ù³gß»wïĉ>¼mÛ6ww÷ºuëN˜0Aφ½4Mœ8±xñâ , ±²²̣̣̣Ú°aççèèxüøñ‘#GnÙ²ååË—•+W^·n]Æë ¦çưû÷¯^½úđáƒfsÔ¨Q_~ùå̀™3×®]kkkëëë»wï̃ ¤~¢fèwxxxxxx‡J”(A…£a©ôù»ÄŒƠ¬Y“Ÿ‘?K·ª===#""D_ **ʿĉüÑGŸ%₫>,V¬XÙ²e·oß.:Óñóósvv>zô¨èDŒ¨cǧNzøđaêđU‰ÿ¶ ‚ZÓ6eÊÍ=k×®=sæŒèt!2ö₫ư¿«ÿüX1åîÇ7_đN6~6₫C¢M”sYD]ˆ.V>·6;ï_~QÔ/ó)Nî_~YÔÏEçWy—»PÙ Ù@!i¡Â1mƠªUÓæư!$Ëľ}Ø·7o˜ƒaĂñ ĐA3Óo§O˜#4@ÆhÓ¹sƒ˜±§OŸnܸ±`Á‚̉ןٸpáÂƯ»w5+ưQáh)ö́Û·OtRÄè4#(‰¹Ê;h=7ËI<¿Â-ÑIׇع;w¢o_X·îßʕߋNÊè6løÅ_ˆÎÂÔñ¼Ù¡C‡-Z˜_á¸lÙ²E‹(T¨P‡EEEeđh}+-Fa™ưêèf†₫ù₫₫xü˜ßWB¾³ÉI§Nùüô&L1-\¸Pt ¦vụ̀eÑ)QHHHHHH¦‡eüÛ;ơ×zê" A…#!„¤căFtHyº/Aï;›xß>5å¯ÓG×_*å̀ïùô>!›mÊIæ"ÿŒ.Q1·6;ï]xQ¼|æ}£.½,VÎE›¦̃uíÍ­₫8ˆºP/½óÿđ~øơëƒî£b¨p$„´|ơRµ1¨rüùñø1¢¢r¤n®đÉd…é°ZïỘ„º¿Os4™à7"$ưỦÎÏư8“Ù¿*₫ü₫₫:¼¹„¥¢µª !$¹ÿ…J•ºjü­å‘{®_OqÛ\ô뵟g¿†9j¨^ÀµDªâ³bE¤¿F !Ä QáH!œÁƒQ @ÊgÏB­¼=@ÚñóÏP«¡ßb¼²÷¿ÿA­ÆçEç\đ̣NËQj5ºuKvÔÎ̉!„óG…#!„|¦Rá·ß’íQ«¡V£bE~Hå·ßbÄÑ©Lb"‹₫ÀP«Ñ¯_²£T*,X :UBˆñQáH!À®])ÛÍ4·°Ö₫ứ‘•+Egkbădz¸T)Íÿ.D58DÁ‚¢S%„„‹wê5K¶çôíÚ%mñ%å¦M¢³5½I“X|ă†Ô¯³P!¨Ơà;>>~L·­ 1sT8fḅäÉÚ/TMQ˜'P½:Û̀‘j5ªT‘v¤˜t¦m[Ñ Æâäíwî`ụ̀dÇRíHˆ£Â‘bÁEÍlsøp¼O¹2JÆ,°(•*!W.¶ùûïüƒƯ»ówơª 1_T8B,ƠáĂ d›cö́‡ ̀â*U`o/:gbbXÜ»wêÇƠj¸¹±Mª 1KT8B,̉¨S‡m>y‚üùSű>}ZtεoÏâ–-S?₫̣́æe›T;b~¨p$„X}ûP¿>Û|ö îî©â‡}L,:g9ذÅ;v¤yÈÿ!_>Ñy’,̣óóS©T*•ªeZ(]¿~ư4WW¸°Å­/o T8B,Lhh²~‹ÑÑÉî°~vïî̃e›ăƉN[&V¯fqö́ịï¿ì¡NdÎËËkíÚµC‡M±¿FÁÁÁ<ñÓ§O666ªạ̈äÉ“̃ñ¯_¿îÛ·o‘"EjÔ¨qö́Ù N~ôèÑ€€€¼yóæÎ»ZµjÛ·oÏààk×®µoß>_¾|åË—Ÿ3gN||<€îƯ»¯]»¶R¥J¢ßc3AkUB,É®]Éf̃yơ NNiøå—,¾tItỤ́Ñ¥ ºvM?}¡CÉîøöÏ?(\‰Î–hÍƯƯ½S§N)v^¾|ùôéÓµk×Îà‰QQQ UªT)^¼¸´ÓÁÁ!̓cbbÊ—/ÿàÁƒ6mÚ¸¹¹mÙ²¥AƒGơóóK}phhhăÆ‹/̃¹sg;;»-[¶´jƠê÷ß J}đ½{÷jƠª•Đ²eË"E:thøđá'NœØ¾}»¿¿¿¿¿ÿîƯ»Ñ¿HƒPC+Y²¤èˆ÷îƯÉ À₫‹‰Iï¨ØXv”J•ùY-ë£bï‹K)¢́߇ññññññ¦y­>$$$ˆº̉²eËÖªUKÚüôéÓ₫ưû'Nœ¨i8üñÇ3xî={:tH›8q"€•+Wj6ï̃½ë́́æÁ¾¾¾ụ̀å{ơê•f366¶H‘"… JóàæÍ›[YY;wNÚÓ£GûöíÓlvèĐ!½çªuúâVô¿m}Đ­jBˆÅàk,]l~™äÚµcqh¨è´åæ‹/Xụ̈ẽ¿/:U+VlذaóçÏwvvÎ={é̉¥GưñăGé€9sæøúúÚÛÛ»ººV¬XqƯºu){áÂ…2eÊHg|ü!CFéèèhkk[±bÅ={öÄÇÇ3ÆËËËÑÑ1 àæÍ›ƒß½{7ỵd//¯œ9s-Z4((èÉ“'Æx¢££ëׯǘÙ³LŒŒP‚ 6äÏŸ¿ëçFëâÅ‹·iÓæøñăÿ₫ûo#?|øpăÆ&M8}¾'`oo_½zơG½{÷.ơ™9R£F *H{ ŒŸ‚”Ưª&„X¾LlÜ={fp,_,̣«T“$C†à×_“âß~Ă A¢2°Í›7ÿóÏ?5*S¦̀Ù³gg̀˜v́Ø1•Jơă?¶iÓæĂ‡Û·oïܹ³££cÓ¦M5Ï}øđaưúơœœêÖ­ Óă×®]kmm=nÜ8›_~ù¥M›6åÊ•‹ïÓ§Ï;wBBB¾ùæ›+W® Z¿~}:uZ·n}ưúơ•+W^¿~=ă>‚ºqwwW«Ơ"""¾ú꫌ŒŒ̀‘#G®\¹6õüâÅ ÿ́iơ‰‰¹}ûvÇUÜŸpK—.={ölq9ÖÖÖW¯^uăúÇÇÇÿơ×_¾¾¾vvv)Î?`À€̣åËó;ïß¿ G,è&O3d±Í×IJîW*KÏÉnRgèüyv ¿¿V§·Ä^»÷3ƒß‡ü Lÿ_¾øâ S§N•öŒ9ÀúơëƠjuñâÅK–,ùéÓ'ÍC¯^½²±±éß¿?ÿÜàà`é¾s¦ÇgÏ=<<\³9sæLeÊ”ùøñ£fOµjƠÄÄÄÄÆÆZ[[wëÖMʪgÏnnn?ÖÿĂLq«ZrëÖ-dv«ºaÆvvv...R]áååuáÂ…ÔG̃¾}À°aĂø‡°xñâ ^bƠªU&L(W®\µ%®LM77·ï¾ûNÚœ8qbHHȦM›:tèpîÜ9[[[›¤oÏèèhqqq̉Áùóç?~¼•URO°L÷÷÷—Zơt́Ø1[¶l=µk×>uêT\\œ£££J¥:}úôưû÷‹- `é̉¥K—.M|||¼¦ßa7onØ÷*22211188¸M›6Ù²eûßÿ₫7lذ-Z\¿~Ư)ùÈ3ÍU;::̣;5Çh̃–ôL4IsC¼nƯºkÏØ±cÇz÷îâááaØë%T8B̀]½z,~ư:ÓĂ£¢X¬Å—”¥Z¼}ú$Åưú!$DtB†äăăĂßlµ··÷ôô¼{÷.—3gÎ|hƠªUhhh… êƠ«×¬Y³Ê•+—+W?̉ÙÙYµ9^{ hƯºơîƯ»=ºdÉOOÏăÇ»'Ÿ¾̃ÉÉÉàƠa ¤´³^½znܸ‘b¿»»»••U7ÏŸ?P°`ÁŒ_%gΜµk×>}z‡v́ØÑ;­E/ׯ_ß§O‡Å‹÷èÑCjå%†Eo+!Ä|ñUcíÚèƠ+Óg|û-‹W¬¿̀åËiTïÓ§H§(=C†ˆÎ?}7õüôé“ÔÚ÷îƯ»đđđZµj:u*44tîܹC¸́S´ ̣²z|¢££###K–,”˜˜¸páÂAƒ-Z´H3Ç ~“Ưª¾ÿ₫îƯ»½¼¼¤FÄÔ÷”mll¼½½O<Éï¬É$11ñ矶±±Ñ *O¡W¯^C† Ù½{w“&M<}útË–-uëÖ-V¬X#+V¬`ÅíÚµ“Fa¯Zµ @åÊ•S_Ô¨Q£ .¼fÍkkk^ I GBˆ™?ÅÚ}YĂâ3Dç/Ơ«³øøqÑÙR₫üù'L˜pæ̀™2eÊ„……}Ú´i}ûöÍ›7oppđ÷ßïááѰaCggçưû÷_¾|yêÔ©̃̃̃©ŸÛ­[·åË—wêÔiÀ€ÎÎÎ+W®Œ‹‹KsIC77·qăÆW¨P¡~ưú*•êàÁƒçÎ:t¨¯¯oƒĂĂĂoƯºååå•zQ™V­ZI3Ă=¬Û Ý}b‰s²È?óÊ‚:<)K,÷£`oÙ±c©WâïĂ/¾ø¢E‹Ç¯Y³¦““ÓW_}5bĈ÷ïßk=~üx•*U¾ụ̈Ë   gÏ-]º4O<ơë×—ËŸ-KÇkæk\ºt©´GÓ¾øäɵZưđáĂ=z-Z4GEùæ›o¤y|ô”¥éx~üñGsçΕölÙ²ÅßßßÁÁÁÍÍ-00pï̃½¼Ö«W¯zơêåáááææÖ´iÓK—.¥wdbbâªU«üưư]\\4kUoذ!Í#wîÜ™^‘3ỵdÍ14¡¨Ô&́Bk!<==#""DgAˆJ}Ă…0u*ÆK­¬ Í“>~„4U°­-̉Zœ"]–ûÑGGCœ'>Mñ¸+V¬lÙ²Û·oˆéøùù9;;=zTt"FÔ±cÇS§N=|ø0ÍGuø‡ªÄÛAKB̀T5ZV éu“;7‹µX¢tT8B̀ ?’z₫|íŸÇß́¢>QY0`‹Ík6G‹̣ôéÓ7:uJt"†wáÂ…7̃Wè̉ẹ́C…#!ÄŒL›Æb•*YM“¡+WX¬ë,{–¯Îû÷4lØ0ơ¸]³wóæÍ:̀=[t"†·lÙ²:„……‰NÄLPGĂ³Ø~Är;ºÉßܘ•_n%KâΤ82_~™µ—µô>ư·~E >Ú£GBˆ¹àË—ß~Ë̉S¥ªÈrƠH’5:,:BˆQáH1 -[&Û8Pû§®_ÏâND_ˆñ]²X²B”… GBˆYرƒÅÝÓ¥ ‹×®}! ůNL !ÄX¨p$„(_É’,n̉$«ÏÖzÆ’>~åé DgC1* ! ÷àA².»veéÙÿÍâFD_‹rñÅâÔ©¢³!„ „…+Z”ÅçÏgơÙ|Á3i’èk!„y£Â‘¢d¿ÿÎbGG”/ŸƠđiG½tèÀâ«WEgC1 * !JÖ»7‹_¿eăl©›#!f GBˆbµm›v¬5¾?ä¨Q¢/GéJ”`q{B”‚ GBˆbmÙÂâM›t8up40~vBˆ9¢Â‘¢L,æ{:fß/{vÑWdøê{Ư:ÑÙmùùù©T*•JƠ2ÅDúf¡_¿~«+\¸°è\̀„:wõ°Í  =Ï÷Å¢¯È<ŒÇbêæ¨(^^^k×®:thư5jÔÎà‰Ÿ>}²±±Q%—'Oô¿víZûöíóåËçààP¾|ù9sæÄÇǧwđÑ£G̣æÍ›;wîjƠªmß¾=ƒL^¿~Ư·oß"E888Ô¨QắÙ³ưƯ»w_»vm¥J•D¿ÇfÂFt„’u+²øÁƯÎ1m‹é>µáEE‰Î€d»»{§T n^¾|ùôéÓµk×Îà‰QQQ UªT)^¼¸´ÓÁÁ!̓ïƯ»W«V­„„„–-[)RäĐ¡CÇ?qâDahhhăÆ‹/̃¹sg;;»-[¶´jƠê÷ßJëŘ˜˜̣åË?xđ M›6nnn[¶liĐ ÁÑ£Gưüüüưưưưưwï̃ưèÑ#Ño³YPC+Y²¤èˆ÷îƯ‚e¨QC $ư§Ç›µ5;è£g|}ÙÛúé“¢ÆÇÇÇÇÇ›æµ>|ø êJË–-[«V-ióÓ§Oû÷ïŸ8q¢¦áđÇ̀à¹{ö́pèĐ!m^¨yóæVVVçΓöôèÑÀ¾}ûŔëë›/_¾W¯^i6ccc‹)R¨P¡4Ï|¸qăF“&Mœœœ4{́íí«W¯₫èÑ£wï̃¥>ó† ̣çÏßµkWÍfñâÅÛ´isüøñÿư×o‘%£[Ơ„Eé×Å~~:Ÿæî]g}uk’¾fÍX<}z²eÄ•cóæÍÿüóO£FÊ”)sö́Ù3f„……;vL¥RưøăÁÁÁmÚ´ùđáĂöíÛ;wî́èèØ´iSÍs>|X¿~}''§ºuëÈôøµk×Z[[7ÎÆÆæ—_~iÓ¦M¹råâăăûôésçÎo¾ùæÊ•+‚‚‚Ö¯__§NÖ­[_¿~}åʕׯ_—ẓ»»»Z­ñƠW_e|pddd9råʵyóæ/^øøøøûûgOk¬Y||ü€Ê'Ÿ¥ÿ₫ưûräÈ‘â`kkë«W¯º¹¹ñOÿ믿|}}í́́Rsûöí;ª¸qưK—.={ö¬YøIt“§²ØækB÷+MAº ªß¯¯Ùi._Ö7)úè“á>£ ~"Ùgiêÿ2Hÿ‹/¾0uêTiÏÈ‘#¬_¿^­V/^¼dÉ’Ÿ>}̉<ôêƠ+›₫ưûóÏ –î;gz|ö́ÙĂĂĂ5›3gÎP¦L™?jöT«V @LLLll¬µµu·nƯ¤¬zö́éææöøñcư?±·ª%·nƯBf·ª6lhggçââ"Ơ^^^.\Đæu£££ưưư­­­oß¾Áa«V­0aB¹rạ̊äÉsđàÁÔܾ}À°aĂø‡°xñbÍ&Ưª6jq$„(GÇ,曳nưz—-+úº̀̀7ßà?D'¡77·ï¾ûNÚœ8qbHHȦM›:tèpîÜ9[[[›¤oÏèèhqqq̉Áùóç?~¼•URO°L÷÷÷—Zơt́Ø1[¶l=µk×>uêT\\œ£££J¥:}úôưû÷‹- `é̉¥K—.M|||¼¦ßa7onØ÷*22211188¸M›6Ù²eûßÿ₫7lذ-Z\¿~]ºËœ¦cÇơîƯ;222$$ÄĂĂ#ƒ#'M¤¹!^·nƯ¢üÚôŸĩOG~.@óê7œ„娰ŠΆ¤c̉$¥>>>üÍV{{{OOÏ»wïpqq9sæ̀ÁƒoƯºuçÎ7n¤˜MÆÓÓSªµ9¿«©Sï`gg7wîÜï¾û®X±b>>>UªTiĐ AăÆSß~ûöm‹-̉»4µZmØ÷êØ±c¶¶¶®®®Í=z¼ÿ~À€[¶léÙ³gOyđàÁÀwíÚåááqèĐ¡ÀÀÀŒ_âÎ;qqqaaaAAA•*U Ï›7oê÷đ ?E@JŒ „…hØÅ£Gës¦;Xzôhhhè’%K<==?îîîÎæäädđê0 H±§^½znܸ‘æñëׯïÓ§ƒƒĂâÅ‹{ôè!µÅf,gΜµk×>}z‡v́ØÑ›_¤pww·²²J1”çùóç ,h²·ÂBPáHQˆ}ûX̀ÏÁ˜u´̉ ÑY[g:jư$NÎ2]7õüôé“ÔÚ÷îƯ»đđđZµj:u*44tîܹC† ‘Î`₫꬟èèèÈÈÈ’%K%&&.\¸pĐ A‹-̉̀DĂŸßd·ªïß¿¿{÷îÀÀ@///i§¦©/Í{Ê»víể¥K»ví-Z”âÎr {ö́iÑ¢ÅÚµkÛ·o/íÔô¤L]ÛØØx{{Ÿ<™́_Ô‰'T*•¯—€ GBˆ2T®̀âéÓơ<Ùơë,¶¶}ifỉ$Œ+: Ư={ölΜ9£F̉lN<9&&¦eË–¤ù"iË–-oß¾M¯…/«Çg ""¢jƠªăÆ›åË—/UªÔôéÓïƯ»WªT©ˆˆˆ½{÷ºººväGŒ0₫­ê3fLŸ>}Ú´i}ûöÍ›7oppđ÷ßïááѰaCggçưû÷_¾|yêÔ©̃̃̃)~ëÖ-//¯ÔK¿´jƠJŸHĂÍÍmܸqÁÁÁ*T¨_¿¾J¥:xđà¹sç†êëë›:«nƯº-_¾¼S§N pvv^¹re\\\Æ‹%ƯĐà„Ùă¿-̉ód“'³˜îS“4U¬XñàÁƒ¯^½úơ×_>|8bĈ£GZYY)R$44´P¡B¿ưöÛœ9ś́́®]»6mÚ´˜˜˜_ư5ơy²z|²gϾwï̃o¿ưö̀™3?ưôÓ±cÇêÖ­{úôiÓ·¨½ÿ₫Ơ«W>|Đl5jË–-îîîk×®]ºt©‹‹Ë̃½{ǤƠwX32:<<|e*×®]K}üĉW­Zemm²hÑ¢́Ù³oذaΜ9ifåèèxüøñöíÛoÙ²åçŸ.Q¢ÄñăÇi}jcP™² ­…đôôŒĐc5 ¢\QQQt[Ä(¸I}¡÷¯,ƒ, }ôiđóĂ•+%K*î÷a±bÅÊ–-›æêÉæÊÏÏÏÙÙùèÑ£¢1¢;:uêáÇi>ªĂ·Å~×S‹#!D̃ø1›üt„{đüR³ÜøJƯüơ‹ =2I.y—5"sOŸ>Ư¸qcÁ‚5kƠ˜“ .ܽ{W³¶!Ñ„ăg¼ă§ăÑƠܹ,1BôƠYjذ¡få@‹róæÍ:´hÑÂü ÇeË–-Z´@¡B…Dçb¨£áYl¿BƯ ÏĐÑÁôѧ§ysÏ[·è÷!‘?êă¨=êăH‘«̉¥Ỳ¯-M”bđ`ÑB Œ GBˆ\ñótwè ÿùø;2[—BíÚ¢3 „„Yâ—øåƒœ’Ÿ8ÚÂ!DT8BdéĐ!fSΛÇbRM!: Â‘"?]»²øózÁú{đ@ôuBˆÂQáH‘Ÿ5kXê›:Å{÷ {>¾©úÑ#S_ !–† GBˆ \¹ÂâæÍ {n₫Öh·n¢¯Ô˜4£§%˰L u{Öj¨7a¿§*™"¹Ü¹wîÙ³YÜÆ„wà ±@T8BDëÛ—ÅcÆüôW¯¾@SÙ…]R¬†ºz¤yX[´å›ÿÄŸ‰H4zrühöC‡ {îáĂY¼u«Ñ/…KF…#!D´Å‹Y«I“&¶¶¶S¦L {÷îƯăÇ'L˜đèÑ£¶mÛ:::¾&B̀?Gó‚Æ~5~¢³aÅưß }×K9R̀Ï%n`|`¿~Fz‘úÜúÛ;ëR±Lf̃~—à́́œb¿““’·)̣<==׬YÓ­[·nܺ¶;w;v¬–¯ëéé™bϾ}ûD¿Äè=z$:e°;~<ßçXmg÷wT”1^åäI; éu<<⢢₫3̃‰ù英Đ/Ê/ z½…Pˆ?á_÷ÿrH4ÊÍEâ⢌óч„ xñ¤×Y·“&åU4è§̃B4hĐ@t raæ…£fè´½½}ư^¿~æ³bbb¦OŸ₫öí[Ÿ̉¥KGGGŸ:ujÇ•*Uª[·®6¯!ú̉‰ÅÓÿ$æ¯xq)T={V,ƠO¨AŒÍâ­[sæÊeÜÆÄ}0ØÙ©˜jW?€ơÔ´kÑ®—qÙØWa¼7-[6|ú”çÈQ¬@E^‘Ô_ë©[ˆ,„™ßªvvvV©Tqqq)öÇÆÆâs»cj£FºxñâèÑ£·mÛ<₫üĐĐP{{ûaÆƯ»wOô5b^ŒS5ØÄÆ #W.Ñ—ih?âG)ƒ19g]°?Œµ_~&˾ù†Å™M©«3~å˜5u)„X 3/mllœœœR·,ÆÄÄÆYó>}zôèÑ%Jtï̃]ÚY @₫ưûúôiûöí¢¯‰…«S‡Åüº.Daÿ€ô8SúønË–éBø)###ô"„X"3/¸»»GGGk*E‰¦c»{À£££|‘ª/}ñâÅ<{öLô¢p‡³˜_ƒÎhøåìCô‘â•XiÀ3Ï›Áh&%ûÀ@/]j”—ŒáÚa‡7̃ëbỲ¿p¬]»vBBÂÉ“'¥=jµúøñă...~~~©ÿâ‹/¬­­ïܹ£V«ùư₫ %J”}A„(¿^Ë̉Đvîd±ùMæ·K¤ø[x ̀/đ…Ÿ‡‘—Ë2fwđ©SYª@F9cÆŒfÍU¯^ư₫ưûgÏơññéƠ«—t̀ñăLJ æáá±{÷n“'OnÓ¦ÍÂ… CCC½½½£££/^¼˜˜˜8~üø/¿üRô¢XüÜ+F™êE²{7‹ÍlÚ~~9éu0|ñ]E¤ø̃éq¦ô±̉₫ŸP° Q^8~¹s'ÅH~‰¢ óoqĐ£GY³f+V,44ôÅ‹;w^½zuêÉ%nnn¡¡¡}úô±··?v́Ø£GjÖ¬¹iÓ¦N:eáU !)Ô¨Áâ't?eÛ Vóă  h>æKq{´7ü ˜d| €ä+?B @¥¦?Á ÍÓÓ“æq´LQQQ4£[FT*ù7ôR5j$›™ÅHLöÑßÂ-/xib_ø^ÅU#½ ́ĂRĂ–ô .ŒŒtV­‚´’C£FسÇÀç§Ÿz‹e±ßơ2mqüđáCddäÙ³g>|˜ :Bˆ̃ø©ùå„€Ÿä'(Hô…Ÿúüa¼ª¶lßZ¬5â%¥³ô«¡|Ë 5êKbd×âx̣äÉ… ^¾|YJ,[¶lƒVʈf‹ư+„PÛCFLØÜX§›óÇ4¿áLöѽ!Đd¯eoii#HmÚ`ë祼CBĐ·¯!ON?ơËb¿ëåƠâ8v́Ø   K—.ñǻ§OŸöïßß´iÓ 6ˆN¢~­ö¯¿6ö«ñ3E“#8"Å `̉•sù¡Ü†Áws¼sǨÉoÙÂâ~ưŒúR„˜?K–,Ù*ưUÈ•+—ês+EbbâO?ưtîÜ9ÑiB²®aCÓ°]™́>µÆA”⨡Ǚ̉Â÷!0æǿÙYüÏ?Æ~5B̀™\ Ç?.Y’4¥m±bÅæÏŸåÊ• .\¹r%$$D³jKBBÂÚµǼjC1œ9MöR LÚ*gtOđD]àb́—«¶8¤áGáøú²Øø…#-]Mˆ¡È¥p|úôé›7oä̀™sơêƠuëÖµ³³`kk¸zơj/^)!$‹ø9QŒßá„/B̀id ?B¥z˜æEc°WC5c½̀óçÆ¾J•X|÷®±_s&—±P¡B‰}||̣æÍ›âÑÅ3gûƠ1[2*G]¤H‘èèèÁƒÿûï¿̉₫§OŸ>üéÓ§ 0`€è4 !YÁ›7‹ÎF©£¹ÇxS¾ôâz¨gÈSó= øÅŦ[L7n˜à 1C2ÇqÀ€±±±gÏ`mm]²dI77·èèè;wî|úô @… œœœROƒû£7åô&}uivÏœ9ñö­±/$"_}•(`˜áƠôSo±,ö»̃Ft̀¡C‡¤8!!!<<<ÅçÏŸ#!$+êq T;wàùv+¾­“ècFÍD̉ÍƯñ?“ ÿ̉dàÆäéÉâÇMđ‚„˜!Ưª&„˜›£GYܬ™ ^Ó¨‘èË7HDJq ´0}30C§`!OÍß<6‰±cYú¨xç4q,bíaỏ KÎ(7Í¿ú ̉/LS}lcữcư^: Ÿz‹e±ßơt«bh+W²¸U+“½¬T5©j ¶jù¤ø6næ¤ü4àG˜æB¦MK;&„dJđ­êàà`öööRLQ¼îƯY,¢o‰•9₫EœyE§€8à _M\ơ₫Æß8iÏ92)^¶ ¦¹–‚Ù}ê[·ØÄà„Œ .;tèfLQªÄD!/ûđ!‹ù6,E[¶2–¨‰xx̉ÀjXíâÂâ?₫Àºu¦¹–àă“׫‡†đCˆy3Ç?̀ !ñĂb¶o7ÙËåÈ~Ǿè+:Rü~îøYxø¿:!“Ư<Ÿ>}º{÷îưû÷̉™Î£‘́—ƒ°Ø³„ºÉ¦Rä'ç3ưo5#}ôr˜ÁÑY•+‡Ë—?ŸÑt—9z4f|^ǵXLÑiMú©·Xû]/£•cÔjơªU«fÏưñăÇ “áHˆåêƠ‹Å-[̣•¥ªÑlÄ F+£²ètw¸ÿ‡ÿ4ñA¬‹ºú±gO ˜Ï…#ô:›Ö¦Og…ăÔ©:„XƯª̃¶mÛ´iÓ2® !²Æ¯ü±m›øOE“ĂJƒiÚ…]R܆X*¶kWÿù§)¯ÅÖ–Åwị̈• Q*µ8®^½Z­­­ƯƯƯUfó @1&¾¹±_?ÑÙÈ\̀•b´êNTâHDàŒ¹r±xËS^KXüü’âÆqë–)_œE’Qáxÿ₫}ÖÖÖ3f̀¨]»vΜ9EgDÉ6mX¼f)_™û«3Yë1’~è‚Mü ~á¢3̉QÙ²,¶Èîj„d™ŒnU/^€§§gÓ¦M©j$Dyø)M»V4_8V¬(ú}0„˸,Å]ĐEt:)-ÄB)6̀Bˆü gÓêƯ›Å¿₫** BCF…£¿¿?€7õˆN„’u‡³¸J¿¸ùµɶƒc̃á¾§àĂÂL™üâÅ,:Ô”¯Lˆ"ɨṕׯ_ñâÅ>|Èwv$„(CăÆ,̃³Gt6Ç@)9Îö²́SnŒÆzœ @̣ÂQèWÏ$$c‚û80€ßtss»wï̃”)S6lØP´hQ«´[°`¶g'„˜̀‡,vv6å+¿ÏâöíE¿£Ø̀hGqTßÓåÏÏâƠ«bÊkùßÿЬYRܸ14å‹¢0‚ ÇC‡¥¹ÿîƯ»wijB”bØ0Ojâ7¿‘1›±YÄ¢ÓIWS4•ZF7cs[´5̀yăâL}!MYœÎ—!$‰ŒnUB”jî\câç GóX€ïàÈÇró?üOÛ¡¾§Ë›WàµđÿrÍ@Jˆ2nq́ßß“ÇBº}›Å… ›₫ơOŸưZ8ÂE§ B×®˜5+)¾}%ḲÅ÷́aSÇ·n-`ƠJB”Bpá8dÈÑï!D?4,Æh¾Ä—¢SÈÄb,îƒ>¸+º®†ăZøÂqơjL,úâ!i [Ơ„ưDrk‡”.-0‘ÚµE¿†0ó¤x êq&Sè 6 âè7ë;ÿGÄÀê…lnJôèaú×'DdW8̃»woíڵϟ?đâŋѣG×®]»eË– .¤e¬ ‘_~a±ˆÅ₫øIÇÍcd̀¯`“PÅPÑéd®,ÊJq 4ăǦ¿₫ßï¦}B”AFKøă?&OœP±bE77·Aƒ]¸pAóĐÍ›7ĂÂÂV¯^M X"#ßq«†đ-6¦b~Cªïáè²föDAMÜ_à…îç²¶FB‚Àk)]ư•Ÿ;¹"S2jq¼uëÖO?ư”đù·ÆµkפªQăܹs[ùæBˆXïô^/DoÿûŸ₫ç©ÜÈ-:­@)~‰—z‹¯ư££M-|ƯÆzOjNˆY’Qá¸lÙ2µZ  jƠª...GÑ́÷ơơưé§ŸräÈ`M“@ˆ|аC;6‹à(f́àxŒ—âq§û‰øÂq~=&uÂÏ đü¹é_ŸQá L™2Ë—/wss;qâ„fÿ°aĂÚ·oàÎ;¢Ó$„|v”[/Dô eË}}Ăà;8Æ`Ñéhk&IñTè1|­Z,´đ ?é8=j`B̀•Œ ÇGđơơđüùó›7optt¬X±"€‚ ˆ3ù„´mÙÂâ&M„¤pü8‹Í£ƒăń–b'8‰N' Üà&Åÿàœṇ̃e!¯|ḍUQ?~ àøñăÛÖ5kÖ´¶¶đúơk®®®¢Ó$„ÚrëËíÚ%$ó£\30C›¡™gÏÚÅtĂdT8.\ÀéÓ§CBB~ÿưwÍÎÚµkxđàÁÑ£G¸»»‹N“"|á˜[#I2̣¥¸:ˆN'kz€Í|x —t?¿n´ Ÿ;Ø@3e×À„Œ ÇfÍxÿ₫ưܹs£¢¢dϽF/_¾lĐ ffÇêƠ«‹N“đ‹…̣ U›V|¼è÷Á ø©¿ÔÁQ̉í¥X÷ÉÀEP£‹Ă 41%!fCF…cÛ¶m5ù=ööö 9zlmm;v́(:MBÂb,Z¨è S•E§“e°A»B×®mÚ°XĐø-[²xÓ&QY"G2ÜÆÆfƯºu!!!gÏưđáCµjƠfs»¹¹-X° õ¼¢Ó$ÄâƯ¾Íâ/¾•Åơë,6ïñ^t 2sè₫çĐͶmÖhßíÚ‰~+‘ ²gÏ>dÈ!É0ẃØáééie%£öQB,ßíKÜÜf<2¦4D.ù­ÅXÜ}4qwt_Z¹s#£Ŕ×Ï&_¥4{ö́^^^T5",.-¬Äá GOO‘ï‡a.́z4ơw ½Ñ[Wb¥g©REôuÀo¿±¸OÑÙ"2ªÆ¶nƯºpáÂ… ¾x¡ÇR§„£Z´ˆÅ=zè~½ư÷Ÿè·Â ø=ÑSt:ºó‚—_ÅU]NÁ7 ïƯ+êBdñ’%¢² DvdT8¶nƯZîër ₫O t9ƒđ=xiBGB4d48F3†:_¾|‘‘‘ơêƠọ̣́rqqQIÛ>[°`èL ±Tüà̉µk&bf#c.à‚+·ƒ£d,@̉/깘;CEg¤#ooGFΆyPiVö“Oíú·GđóeÉÓÓS₫Icˆ*V¬˜è,Œ‰ÿCNè¯R¥pă†I¢çGß]¥³ÿÆßEQTôéKöOE¬BlÖ'¡pï̃ø¼æÏÇ€)0ÿŸz’‹ư®—Ñ­jBˆ¬9Ăâ Äæ"Uæ_gÅ ªFà›‘Ï˜?,†.CˆÅ’Ñ­ê₫ü"f„¹‘ÇôD¶bkk$wl†füˆ­tíñă“âƠ«áï/ú‚!IdT8‘ÁÂe„tEG³8_>‰|úÄâÏ“1(X⤸>ê‹NÇ0Z¡•ï®,?¿pa¯^ùó^Ëúơ»mƯ[· ̀…ñdz«:""bÿ₫ư6lˆưúµèŒ±l“'³øûïÅæbf#cæa›ÁÈI5T“â#8¢û‰̃¼{!:°xÛ6±¹"́ Ç­[·4kÖlđàÁ'N|ñâElll­ZµæÍ›'Ÿq<„Xœ X<}ºØ\øÂÑ &Iá§₫nˆ†¢Ó1₫ö´.-©¹s‹¾¦R% mư$Duê”fçÇOœ81pà@Máèͯ9O1¶±cYüSû¨‘̀üƒ¤Ø¢Ó1~.=Ø“…g̣MÊ2èæØ¤ ‹÷ï !‚¨ä39âóçÏ›7oÁÍhGGÇ;w(P@t¦™°Ø…ÏITTTz}-”êóœ ßRFÅá̃=ÑÙ|¦ÛGÿ#~ F̉,ca«„JY=ƒ"|À[ØjbkXgmjéó L6HK€;–<ˆ:ùñ§hÇb¿ëeÔâèææ6{ölWW×4uttœ1c†ü«FB̀¿Æ ££èl௿Xl—`‰›kƠ ØÜŸ HĐñ,GôX{Æpø»Ơ|ï_B,‡Œ G•*U:xđ`ß¾}}||ræ̀ À̃̃̃ÛÛ;((èđáĂ¢$Ä’đ_Œü Èâ˜ÙȘñ¯èLd2Ø’•£1Zt:ºsrb1?/>!–CF·ªS‹uppE–Yló51·›Ṿ»O]° ¤…¥ä‘QƯ>z’̃a¸¼À Ña\̉ÅPCë¯reœ=ûùi²øÈø“&±¸[7óú©'Z³Øïzyµ8J­K:$ú"€äƒÄhÀ±@²+### P¦L™ºuëvíÚµnƯºeÊ”çƠ+óíP ơ;~—â/ñ¥ètŒ®jHq´}?*K3̣hđ=~{÷v!&%£Âñüùó“&MâoLçÊ•K&Nœxé̉%Ñib¾ûÅ3fˆÎ& ß̃d#c>AüŒÖ&Ö Í¤x¶eùù‰‰¢¯ ¿ôfX˜­èt1)k×®P´hÑyóæ]¹råÂ… W¯^]°`¦ëñ§OŸV¯^­ÛÉ7õܶm[??¿ªU«;öåË—™>寿₫8p`@@@… :wîüçŸ~‡1•_~añ¨Q¢³I·7™Ó f<ơw ;ÁZêZ£µ¶O+THtâi¨WÅ¡¡¢³!Ä„dT8^¼x€ƯªU«êׯoggÀÖÖ¶N:kÖ¬±··páÂÎ~ü˜â¡øøø{÷îA§µª7mÚ”˜˜8tèĐ¼yójöŒ=ÚÉÉiï̃½éU[·n‰‰éÛ·ï×_­ÙăëëÛ°aĂçÏŸÿů\AˆYâç5®\Yt6i¨SGtzÛŒÍŔ'=Τ0#0B/ă²VÏñña±l G€Íæ`̀ÑÙb*2*GY¤H‘èèè!C†bL7²¸µÖ½ĐŒŸÈ FÆX²|È'Åđ(kO¾_tú̀øñ,>]t6„˜àÉĐ Ào:998räȉ'<<<ÜÜÜ?~çÎÍ ‡åË—K­€ÚP«Ơ‘‘‘®®®)–À.Y²$€‡–/_>ơ³®_¿îââ’/_¾ .\¾|ùƠ«W_}ơU:úøÉ»1K:°xËÑÙ0üj3˜‹GRUD§`j;°CZ˜»9_ÄEÑéÎÙ™Íơü9ÜÜD'Dˆñ .¥³@|||xxx111‡²¸r@\\\BB‚³³sư ơÅ‹4Öøúøñă›7oJ”(ñă?®_¿^Ú_¸pá¹sç–*UJ›×ơôôL±gß¾}Æ;‰`e±ùD~ø¥Ód5ë₫¶m,µû÷e”˜F–>ú]»đyĐQ‹g-¢bew9F•y¥g—pI›fy7wøÜƯöï7Ô9s¾ˆ$!!¶;&uÊoĐàưæÍ–²ø¸jĐ èäBùË/dH3tZ3"›§YûơëשỴ̈æÍ‘‘‘Ï=›1cF­Zµ̃¿¿eË–  2d÷îƯÚ´;Zæú•€²W­8ÅsçÊöZ䙘öYñk¨Œ̀32¹n"mÑVêåy¶ØÙè˜Éúơ“Æi}qêúô}ICÇϹ_¼h+쪀 R­§n!²‚ Ç₫ưûơüÎÎÎ*•*...Å₫ØØX|nwLÁöó`¹éÓ§~,nàÀ?̃ºuë={Ú´i#öM#ÄX,`ñ!¢³IÛW_‰Î@oGqTt ‚mÂ&Tø|“yáX¿>‹×¬‘Oá ví¸Ă‡“Z@·oO¶T'!fIpá8ÄÈ_N666NNN©[cbbHă¬yööö¶¶¶*•* €ß_§N­[·̃’Í,b„ǰpaÑÙ$ĂÏßJ#c,ƯéÓ¢3HfñâÿJ”HjhlƠ jµè„12ª6ww÷èèhM¥(ÑôªqwO{ѼyófË–M¥Rñ;5w¨ăiÂ.b®øiø1̀2ÀÏÁ¢ôÂñ=̃K1¿Ÿ¥™‡yRÜƽơdTVæÿ-JH2̣ú'îܹ®]»VªTÉ;}Y=gíÚµN<)íQ«ƠÇwqqÑ̀™Z@@@LL̀íÛ·ù¹{¾2ƒûd„¤éÚ5—ÓnffSá Ç¢EEg£Ÿßñ»[̣1ƒ0HC’ùjÖrºfÎdñđᢳ!ÄÈdT8jªÆ?ÿüóåË— éËêiÛ¶mkee5₫|M¿FK–,y₫üyëÖ­³e˦ÙóöíÛ¨¨(i\dË–-Œ?^vư×_-[¶̀ÉÉ©.¿¸=!fƒ_₫›oDg“Rt´è ‡_3¦1‹NG¤¢`ÜÅƯLæ›÷́{2#G²xÎÑÙbd2*ûí7µº‡(P`äÈ‘÷îƯkÖ¬Ùĉ»uë6gΟ^½Ø2_ÇoĐ Aß¾}5›^^^Ç¿zơjƒ ú÷ïß­[·:|üø1888wîÜ¢ß'BŒàÛoY¼nèl̉åà :½]ÇuÑ)ÈÅN°-›#³ơe¹đ „ï÷ôÏ?¢³!Ęd44Ö½M›67¶å—ƠO=̣äɳcÇĐĐĐüùówîÜyèĐ¡~ơéÓÇÍÍmơêƠgΜqqq©]»ö Aƒ<<{†̀â.]Dg£Ÿ“8)Å=ĐCt:fA®3|®\‰U«’ẫ½“-̀DˆQá¸ÿ~)¾~ưúơë×EgDˆùjÖŒÅÿûŸèl̉ÆßäoQ*?=!iÚ€ ĐA·Fë­Ø*:#BHdt«b:ül&… ‹Î&mü­HggÑÙègVIq^äµ6¿ Û̉=®ysÑ™fnû´“ơ%&Ä È¨Å±ÿ₫¢S Ä2̀˜ÁâaĂDg“.Z{ẲTDÅ?ñ§&>‰“ƠQ=ƒºtÁÎIñêỢl‹îÚ•ơt\¿ü!:!B G^K‹]†ˆ(fÉA…¬Œ&¥Y´(₫₫[t6Êô£—ô‚×MĐhÛ´=ÅSw¸kbg8¿ÄË´“₫eÔ®C‡Äæœ̃G_®.ñưÏ?áO+“›‹ư®—é­êˆˆˆưû÷oذ!666>>₫ơë×¢3"Ä\|üÈâ´ÆŸÉĵk,VúȘ£8*ÅÔÁ1üMüWx•ùøñS2#µ"ybB”Nv…ăÖ­[5k6xđà‰'¾xñ"66¶V­ZóæÍ£ÆQB €ÿă¿Üd†ïà(Ë»‘Y@#c´7c¤8Á¢ÓÑßsø¿ÿDgCˆáÈ«pœ>}úرc?~œb\\Ü‚ ‚ƒüK„¹à¦/@Sù®íÆ©öPø¼‡ë°N]á*:Y›©Rü#~Lû *UD§©•áĂY<}ºèl17nÜXùyù Ị́ƒ̉lëׯ?ÏO>Gɪ}ûX(:›Œ<}*:"ˆ́¤81iÁ7AËxUÊÙ³Y¤FÆè 1Kñ́®ˆÎ†CQáèéé Í^Œjµúܹs/.:MBkæL/:›Œđ·2"]±Qá(:eØ 6̃¿%Z¦qDÉ’¢sÔVÖ~½{EgCˆ̃dT8–.]ÀÙ³g|êÔ)Í·8qbàÀÂÑÛÛ[t„(ÓƠ«,Î[t6™¸qCtD(kXgr߃Ã&ù»Ơ‰Î†½É¨ṕÓ§››€ưû÷÷́ÙS³³G½zơ:tèGGGZ–ơàn’₫ú«èl,‘üD§ $­ĐJb`ʇù |ÏùĨcŸÅ“Qáèææ6{ölW×´'9sttœ1cFD§Iˆ2]ºÄâNDg“‘OŸXܺµèlô³́̃$up̀’­Ø*Å ° åĂE°X̃«‘|Ç!CDgCˆ~dT8¨T©̉Áƒûöíëăă“3gNööö̃̃̃AAA‡”÷´s„È×26>CæU#’—JRM#côQ¬S{F |Ë~MZ~XÚ¼y¢³!D?*9¯ăëàà :‹,³Ø…ÏITTTzÓƯI-ăyZµpüó,²O6Iz½ ́WC!#á÷FR¿öb(v÷’=œ;7^¼HÅưCṆ̃§¾hQ̀âªUEg“9~̉;¥ŒYåRL#ctfÅ}OÅ!.íƒî̃fæ.dñđᢳ!DWT8bÖø%ÏønVreNCªùµ̣²#»èt”j7vK1¿¡̉}ø :Btb#:$*•êË/¿,[¶¬¯¯o®\¹D§Cˆ¹à¿œœDg“¹-[Xœ-›èlˆ 4DC)>†cÉëÔ‰uÛ…́ÇSî̃ÍFÆ4nŒC‡D'DHÖÉ¥pT«Ơ‘‘‘‘‘‘Û¶m+Q¢D¹råÊ–-ëçç÷Å_ˆNÅâï‡M*:ËU•E§ lMĐDjwÜ‚-mĐ&é®]Yá¸z5d¿´€ïEBˆ‚sưúơ«Ÿưư÷ß©pvv.[¶¬¦ˆôơơỜ .sÛa–ÈnpŒ̉†Åđ){{+iÅêÔưvl—Íû¿!HtÊ–îé_LÅ8{Öô‰eơ§¾qc„†&Å[·¢U+íŸJäÅb¿ë·8–*UªT©R:uđúơëk×®Iuäëׯ¼zơêØ±cÇ`mmíáá±sçNÑo!JÀ2-THt6Z c1?IŸÑÈSûóOÑhe÷nX}\ĐºµR₫ #„‘Ë­jNNNƠ«W¯^½ºfó₫ưûW¯^½råÊƠ«WoƯºŸpëÖ-Ñi¢ü]±Ư»u? ™ÓÈ~H‡ CÔÛB,́¤;ÑƯÑ}VˆÎHGümB”H¾¿ÎråÊåààààà3gÎlÔI¬º}›ÅeʈÎF+«W³¸@ÑÙ9é‡~R¼+Ùơê‰N-ËæÏgqua J#£ÇÄÄÄ;wî\ºtéÊ•+—/_¾ÿ~êch¬ !ZùơW÷î-:m½}+:#¨ê¢S0¥Pê:®kâ ¸På kW8tĦMh×Nt™0?/ˆ³l–.!Y!¸pŒ‰‰Ñ”‰—/_¾víÚÛTß¶¶¶¥K—öû̀ÅÅEl„(ĂĐ¡,^¼Xt6Y–'è ô³›¥˜:8Ế)¢¸!>Ă3èÔ ;'±f" G̃̃¸yóóuíIÖ¯„™\8úûû§Ö/_>??¿råÊùùùyyyÙØÈ¨Y”Pæ̀§O³XëN¡¤̃xº¡›èt̀D‘âçxÆ éË `ÏHC±{öÄ“'¢"Dk‚k2©jÔL®iV̀Ÿ?¿J¥{₫üùO©\™fD#$C °xüxÑÙhk×.+}ß´Ë¢·Z¨%Í>ă¦`èŒtÄ÷ºúï?ÑÙ’‚çqôôồêSä?m’ÅÎíDä2£§o7/=S\ÖIR|ôéN:Hô–Æ{[¥ ›ÉÉäÿtt₫©?S>×½£GcÚ4'Nôe±ßợUMÑ?2YQ“ KU£9©Ú¢S07ùO# =¸^¤Û·‹NP[“'³xútÑÙ¢5* 1/ß~Ëâ­[Eg£ ¥[ V»Ó‚1·û¥¸>êÉ Çå˳|Fqø9§øé³‘3Á}w+§/3!ÄxÂĂYÜCᣗa™w@Ñé˜_øJñ=ÜÀVb’ÆÇØ¿¥K'Åơë#*JtB„hApáèáá!ú ÄŒ4jÄâM›Dg“|;‘̉ Ç8!:37Cçb®&ŒÉă¡˜`)”*Åâ¿ÿ !Ú¡[Ơ„˜‘½{Yܶ­èl²€/½½EgCämæHñL€jƠD'¥£áĂYüÓO¢³!D T8b.6³I§Ñ°¡èl²æÅ ÑH<⥸)NÇl9ÁIÿÁ?É©·l]̀Íâ‰EgCˆ¨p$Ä\đkf„†ÎFGnn¢3ĐÏR°ơăhdŒñ́Ă>)®úè̃=¦¨ñ1H>́áCÑÙ’* !‚]¿Îb¥wpäGÆ4C3Ñ阭J¨$Å7p#Ùc|‡ %ØÇjàd“÷"OT8bZ·fñªU¢³ÉssD§`)ú ÏÆl=Î$˜¿?‹¥¬ ‘-* 1 Û¶±¸kWÑÙd _8f}1)b¡a‘ÀÔ¬):#ƯơíËâY³DgCH†ï̃½{÷î]||<€„„„¨¨¨(ɬâ箫UKt6Yöúµè $1RÜíE§c₫²#»¿èǽá7N-kBBXÁ€øđÀÁƒ¿øâ‹7õhv†IËƠ§¥råÊbs&DÖ²g×ÿ¦tơ*‹•̃Á‘SuD§c₫ ÅÉz—8 :µ,Û·Ÿ¯¦~}\ ¾²D®¹sç~úôé… .p?%ƯºuËà)bs&D^:p‹Ú-Z¤ûy1§‘17ACL­+ºJ‹ƒOƒ1ÓD'¤+¾ÉÅ‹¢³!$}‚oU×TrwfBdïÎƠ§îç„/K” QU`sŒ*:ưđ£Ú~ûMt6„¤Cpáøư÷ßẃرH‘"9sæ´³³Ó́̀™!Ñï!r²g‹så.bcEg` OđD»£»g"º{)M¦ưÇ¢sÉ2~­ÁƒEgCH:ߪΕ+×?₫¨‰?~ạ̀åË¢ßB¢I?}*:½( :ưĐÈQàH 5qà\ö,_o¾Z–eÏ“â'O/Ÿè„IEFó8ÚÚÚÖ©S§NêQNˆNlmEge—.±Xéù‘1UPEt:„"s¥́çèđaÑyéâÈΆ´È¨ptuu]°`Á‚ 4›‰‰‰Ï=KHH!rÅ77®^-:]˜ÓȘ¿ñ·è,W?ô“â©cEg£‡ªUY.:B̉"£ÂQăíÛ·³gÏnÚ´iÙ²e«U«V¦L™&M̀œ93ÖlzBb(|Ç.]Dg£ ¾p,VLt6b å5ư*ƯB,”âqSDg£Ÿ!CX}zûöí#FŒpvvđøñăßÿ]t„È@\œè àüy+½ƒă¦\›¤¸,ÊNÇ•Fi)₫GSx;&:)Ñ"g2*¯]»ÀÎÎnơêƠ}úôñññqssóööîƠ«×Úµk5³<̉L=„É¿LBCEg£#smM« ‹7¤xØÑÙè¡dI?{&:B’“Qáxûöm₫₫₫%ù€‡‡G•*U@ë ¢ñçŸ,nØPt6:â Ç"EDgc ®p‚åú ¬KàÜ¡¢³ÑÏäÉ,îß_t6„pdT8j¤7ÿNbb"kkkÑ "Ú́Ù,î®àJ¤‰•î:X74#–¼¤øL`åJÑéhÜ8‡„ˆÎ†Œ GOOOçÏŸÿ믿R°Eú>äN‘îAîÜIq` ÔjÑ @V…c¯^½víÚơàÁƒØØØ… .\¸0Å… îƯ»·è4 £̀EƠ4̀idL,hy™‡yƒ1XwYEÎåp¥î²D–dt«ÚÎÎî—_~)ÈO`Å)P À/¿ü¢[Mˆåº{—Å*ˆÎFw|á˜Î½̣B!Ñ)  )^ÛYt6úY´ˆÅíډΆ²*”.]:44tđàÁ¾¾¾¹rå+W.__ßAƒíƯ»×××Wç3õ¼¹mÛ¶~~~U«V;v́Ë—/µîăÇ¿₫úë‘#G~{ˆÅ«R…Å ÿi6«Đ¯ÄJ)¦‘12Qư9"3~‚;8ơéĂâÍ›EgCYƯªÖ°µµ0`À€ÄÆÆ:88èÎ9sæ,Z´È̃̃¾B… ÷ïßߺuë;wV¯^­Mû¥Z­₫₫ûïi¥l" aa,9St6†‘-›è ôsÇ¥¸!”:5’™9âv-’₫aMi|e²~g«tiHăE×­C§N¢"O^-)¤jŒˆˆX²d‰»»û¾}û–,Y²ÿ₫®]»^»vmÖ¬YÚ<}åÊ•çÎưN’|Œ¯¾^öîeñÔ©¢³ÑßâXE§CÀ&y›È{¼‘î®]cqg…ßy'æAÖ…£AlÚ´)11qèĐ¡yóæỚ=z´““Ó̃½{5sCfàÎ;sæ̀ùJá_̉ÄL°øÔ)ÑÙè…Ÿ—&7&ư» ‹«¢ªèt æéSÑ‹g₫…ăùóç­¬¬jƠª%í±¶¶®Q£Fttô¥K—2xb||ü¨Q£\\\F-ú"IN¥C™víbqΜ¢³1J¨$:Â4ÎÏ&Ô¼„KzœI¼'X\Ơ|j`¢Tf^8ªƠêÈÈHWWW×ähV5|øđaÏưí·ßÂĂçM›æèè(ú:ˆÅă›ׯ I² «¤¸?¨íTNú÷̣+Ûƒ1¢̉]ơê,Œ ±x²cXqqq ÎÎÎ)ö;99xñâEzO¼råÊï¿ÿ̃¹sç*UªÜ¸q#«¯«Y‡·oß>Ño1ºGé̀ŸQ+"*Jôµêîư{đ…& Œ‹úOtFº›S`r$ÅƠ¢ªEAÁŸ‹¹qv;¿IÚé½£Œ2 °ñ~êyƒ¹üö›³&î̉%æ§Ÿ¢Mđ¢„× AÑ)È…™ï̃½`ooŸb¿fØÍëׯÓ{Ö¨Q£ .üƯwßéöº¢/ˆQ¬X1ĂŸ”?̉½»Q^„ø¥¶¿û.§¢/ç*®J±¢/Ä\y…#üó̀ ›Ïߨ-[̉̉ƠDyµ8NŸ>}́رRƠ(‰‹‹[°`App°çtwwÖT’¨¨(ÍC©¿s瀅 z~ÖªU+ÿûßÿ<==›4i¢Ơ«b(ü(ÊÓ§EgcH¹^i…€µv~C3́ÉOÿ₫6¶g;j¢¦èœtgml3Ơ4BLDF-7nÜX¹r¥&¶¶¶Nø¼$™Ôʸ~ưúÆWÈâú¼µk׈ˆ8ỵdăÆ5{ÔjơñăÇ]\\üü̉XªhÑ¢̉‘¯_¿>uêTüüụ̈åË'ú}"æăG)":}]¼Èâ~ưDg£Ÿ…X(Å¥>”I%Gí6¡ưƤ'pBŸó ·w/~^œ¨jU\¾,:!b‘dT8.Z´H­V[YY7®uëÖeË–Ớwrr7õ¨Q£̃¿¿jƠª¬mÛ¶]´hÑüùókÖ¬©³dÉ’çÏŸeû¼ØÙÛ·oŸ>}-[¶B… U«V­ZµjünܸqêÔ©̣åËÿüóÏ¢ß$baøîß,dµ–â§₫­Dª =—aÙçUÄ'c̣xŒ‘øq½W®ˆÎ†X*ƯªШQ£Î;§•R¿~ư5k¸uëVVO[ @‘#G̃»w¯Y³f'ŃÖ­Ûœ9s|||zơê%süøñ ôíÛWô{@Hr{ö°8(H÷óÈ?¶§hQÑÙÈ—øRt $Í›XÊưèLÀÑ9éeØ0%:b‘dT8FGG#ưy <<<<₫\‡3÷èÑcÖ¬YÅ }ñâEçÎW¯^zrGBäẽ<·k':’L(B¥˜¦₫–¯Ïư!<`ûÎáœè´t÷Ë/,¦{`DƯªöôô¼|ụ̀ùóçS?¤V«Ï; xñ⺼iÓ¦M›6MïÑF5J^—‘0d‹7nÔư<²ÄÏ-¢D|Ç~è÷ODgD̉R¿¾æÿ§ª±Ú±*ª~Â'Ñ™é®T)\¿:„:uD'D,ŒŒZK—. à́Ù³ƒ>uê”fçÇOœ81pà@Máèíí-:MBL‚¿Im.­ă«W³Xé#cö€}@v  _å®0·¾l<âE§£~r…ºuEgC,J-›É ?̃¼yó nF;::îܹ³@¢3Í„§§'µPZ¦¨¨(ƒ­!aoÏæÛ¸xåʉ¾8¨\gÏ&ŲùÅ£#Øœ²j¨ ùÑĂrvÆë×&Ç„IIûx‡ rz!=?£ñû÷áăÄÔ,ö»^F-nnn³gÏvuuMóQGGÇ3fÈ¿j$Ä0øYÚ̀¢jXƠ¨toñV›¢©g"Æ÷yô₫øÉlß–^vïfñ×_‹Î†X*UªtđàÁ¾}ûúøøä̀™€½½½··wPPĐáDz̀(!²S£‹W­ I‰Ÿú›FÆÈ×+¢ß¶¸đ((xL2?×đ¢³!FF·ªS‹Ờ¼¨,Û|M vÓ¿%ăŸĐ,yđ€Í¿Ó½»²×Ü.âQˆ̉Äj¨!è~%Ñ÷¥â~4ŸD}ô?ư„‰“â.]’u &¦a±ßợjq”DDD́ß¿÷îƯ±±±ñññ©›&Älñµñ«Ÿú[é#c¤ª‘(?ü¥x#~ü8Å₫¸¸¸ ‹N#[»–ÅÉ—¾Tº˜ÑÈy°¹fûAám§‚_ƯråJkXK[‘ˆœîvîdñĐ¡¢³!CF…ă7V®\©‰­­Ù¶ês÷”ơë×§9=8!æ£KŸ<):£PzW@£<;³xዸ(m} eI.XÅŸ§?&ĸdT8.Z´H­V[YYM˜0áâEöƒíää4õ<[[[«h„)1c7o²ØÎ¬æ”̃·Åư^k­À ).‚"¢Ó!Yt₫|”‘¶b ́–pî«Ơ«‹Î†Xááá5jÔ¹sg»äßơëׯY³&€[·n‰N“£á'dă¿”ÏœFÆ3° ˤ8 èÍƯ=Ùæ»w¢"@F…ctt4€ôæ5đđđÁº2„(̃û÷,ọ̈!íÚÅb{{ÑÙH%TÑZP‹£¢z ‡´uGE'§~uR œ˜€Œ GOOOiöbT«Ơµª‹/.:MBŒƒ C³kÈƠ*°̃2ÔÁQIø†î… ‘ü㉑¢óÓ]£F, ±2*K—. à́Ù³ƒ>ơ¹—ïÇOœ81pà@Máèíí-:MBŒăôió}ù•¿}Ưx¡DüȘ.è¢Ç™ˆiñëv†„X€̉Y˜%:?½LÄâ.ô¯’™Œ Ç>}ú¸¹¹Ø¿Ï=5;{ôèÑ«W¯C‡ptt́¯ô~ơ„¤‰ŸèÛ́æƠàgpTúO0? Qª·IKWDEißl–îÆg1?£!Æ £ÂÑÍÍmö́Ù®®®i>êèè8cÆŒ ˆN“#˜7ÅsæˆÎÆÀ¦Og1[“*Q"ų8+ÅÑQt~ziтŭ[‹Î†˜5*UªtđàÁ¾}ûúøøä̀™€½½½··wPPĐáÇ<öt-YÂâ5DgcxωÎÀ@nÍêàÑé,âœmƯªù¿ l¤}á/Ñ)ênûvoÛ&:bÖTr^Ç/66ÖÁÁAtYf± Ÿ“¨¨¨b:Loưy{ñϣΤëË“OŸÎFA’¦q¹ë>đ‘̉ñ£'&&ư[¬XgϸŒËåÀº?ª‘å@ù|ô¸};)̃¾=Y$1‹ư®·Ñÿ†̣ëçµ6[µjU¸paJ¬ ɽ{Y\´¨èl oü©à¡«@̣Éÿøª‘(ÏŸI}UưàÇï~…WÎpœÂĂ!­¹Ö²¥Y₫JdAF…ăÖ­[ÿûï?µjỞ„˜?sŸKăçŸY¬ô‘(^¶løô)žC8Tu4±¼₫Å¿¢³Ô‘•́́Ø$/̉´Ä(dÔDZơç½< !&ñ×§Jó[ß́œ=«ÿ9dá?ü'ÅÍĐLt:D'üß.Gh₫_µ¥}OđDtzáÿö,_^t6ÄLɨp8p`Ë–-,Z´è©¢{B¢%__›cs#/[6Ñ臟êOÑóE[´#X̀5†¯ÄJ)ö‡¿è,u—¢·ËÿéxB2 £[Ơƒ/_¾ÈÈÈzơêyyy¹¸¸¨øq€ èrvBäæƠ«d›%KNÈđrk¹ñ_ÙJÄƠPM3q\\X¼oŸ~‹o»¡›&>óY;§̀œ<‰êƠ“booDG‹Nˆ˜Y¾5̃½{wé̉%ÑbLüä ‡‹ÎÆ(¨ƒ#QI˜44q+´Ú¥NiĂ¯]úâ…èlˆ9’Ñ­jB,Ë®7•™ÎQÊçÛzç#>JquT×ăLD4~ÑêË—¥p<Øê+Û±=+g”?₫`q™2¢³!fGF-´œ ± *°xåJÑÙLPGó1b[sÖ,¬['=̉}c±&‚!¿âWѹê¨cG|óMR|íèlˆÙ‘ơà e±“‚’,Llî“~¸|å>Ϭܷo²«Ç®/ñR§9G´|f&™Kÿ§Oö–“Ëó£Ÿ9ߟ7nŒƯ»E'd,ö»nUbr­Z±x̉$ÑÙË,ÖH§øRƠH̀[#°yUÆÏzœI°Q£X¼gèlˆy‘Q‹£´rLÆ̣æÍëééYªT©́Ù³‹N9mûWѶíÁÍ́*¥†¨R(•æÆ̣lv"iëØ6$ÅQQøâ ₫Á¬6:Êö£4óç'ÅJọ—'‹ư®—QÇ… j°‡‡Ç/¿üR̉g0!f®[7÷é#:’¹°¯\êàhFŒ`…ă¬Y¬¼øÂ÷’:ÎÅÜ¡*:]ưö»²E‹¨p$£Ô[ƠwîÜé̉¥Kll¬èDÉ¢U«X¼h‘èlŒåï¿YÜ¡ƒèlôĂŒé®¢Ó!zăWâK51đU\•âa&:W½´hÁbóíCLMF…cï̃½6l¨‰sçÎƯ¼yó¾}û¶iÓ¦P¡B+V́Ơ«W‹-̣äÉàƠ«W«øï`BäoÜ8»»‹ÎƈøJŸúûî‰N˜·z7<®d;7­Đ?ˆÎ†˜ ]ºt¹~ư:€¶mÛ9rdæ̀™Ă† ›2eÊ‚‚‚üơ×_M›61cÆ*UªàÔ©S¢³&$+¦Neñe¯›1¾‡oßQ´‚((:b ơê±øơë¾Ă;)n¦¢sƠKƯº,2Et6Ä,Ȩpœ;wîÇóæÍûÓO?ÙÚÚJû­­­GŒQ¸pḸ¸ùóçÈ™3ç¨Q£üóÏ?¢³&DküŸüMˆÎ†he6H1up4ü8¾y9r#·´¹{µ;©8Àâñău?!aaa ,he•2+•JU @W¯&ơ>É•+€—/i ¢|'£]»DgcD| Nưú¢³ÑßÁq†ˆN‡H:,₫9iwâ¡ósô(¿.Ơô颳!Ê'£ÂñíÛ·®_¿~óæÍƯ»wïÚµk¤ÉƒöíÛ@ÓÙ‘fñç¾¼æÿ"VzÇ‹¸(:bd>¤̃g;°U2÷c¿è,uwø0‹ÇŒ Q>*TđéÓ§®]»Î;÷Â… <¸zơê’%K:uêôîƯ;eË–<{öl… 5!ÚùñG‡†ÎƸø[|Ë¢åDNÑ)ƒâ—ưLË<âh :]½ÔªÅâ™3EgCNF…ă¨Q£\\\¼yó&$$¤S§NuëÖm×®ỨÙ³_¼xÀÆÆ¦k×®.^™¾eË–¢³&D “'³˜ï•o¦̉jÁQ$¾ĩvJRà»9₫̣KêÇààGió‰ÎXwG²XZƯȨp,Z´hHHH̃¼yÓ|4[¶l?₫øcîoį¿₫ºQ#ew=!–bÂïWđ=¯¬̣÷~ø42ÆÜ´mËâŸÓ^]ïéXu3;£¬U¯ÎâÙ³EgC”LF…#??¿C‡3¦lÙ²NNNräÈñå—_v́ØñÀm?ÿœ—.]zàÀË—/—íªƒ„0Ó¦±¸vmÑÙÿ¤ô|#“D§CŒ&¹±áÈîGpDt¢º;q‚ÅJÿÁ$bÉh­êÔbccíííUü’·J`±ëW’´W­5§5›µ??ûVúåj¿l±l,&ñđ@ddRœÎ?ÖŸPEpBÄIDAT—xé Wi3ơ?}ôU«ầ™¤xÎ *:!…³Øïzyµ8J"""öïß¿{÷î·o߯ÇÇ¿N5A+!Ê0c‹ùêæËlæ5?‡sR<ƒD§CŒ€ïæ¸bE‡¸ÀÅv̉æq´îNŸfñ0e/¦HD’]á¸uëÖ€€€fÍ µùă—’ç›ÍÓRl­ùQPpÁ… Y¼UÁ=6‰2Z9æùóçÍ›7Ïàf´££ăÎ; ( :ÓLX́ḷ$i [*FăÏ?ÙqƯº¥7›²2äB®XÄj⌌‘(hù’†¬ǜ¦XOH¹ư”)¬N®XgÏNHi,ö»^F-nnn³gÏvuuMóQGGÇ3fÈ¿j$–îË/Y¼XÁó½e•9up”ªFBRëîRÜ ô8“`ăÆ±øÏ?EgC”CF…#€J•*>>9sæ`ooïíítøđá@‹™Ó„(”êĂܻǶùu)̀Ư¡C,.THt6zøÿHqmÔ1‰ÁƒY|à@ÆÇ.Çr)₫@É>O …i’{¢ƯªN-66ÖÁÁAtYf±Í×D#‡êăǤ={Ш‘èŒLGº×goX%7Øơ@HºÑ†°J¨¤Í³”{¿’À›7ptLưư3mû?LBR»zÅ÷ÏÚ*ø./—₫Ơ+89‰NH9,ö»^^-)(±j$–+2’U€EUK–°x²Â“HU#-«F¢x¹r±˜Ÿ ;?á')₫ÓVÙwyù{Î΢³!J`#:æƯ»w/^¼víÚ³gÏ4mnnn¾¾¾åÊ•³··!™ñđ`ñ•+¢³1)¾ƒăĐ¡¢³!D àñcí_„Ẻ’Bđ¸ƒ;¢/@Gµ“wǸq>>:XY?~\¿~ư¢E‹^¼x‘úQ;;»-Z 2ÄÅÅEt¦„¤ƒ_¤@™2¢2©gÏDg` ¡•âïđètˆ M̀æêÿùgŒ™ñá}ĐG*#ù³#»èkĐQx8¼¼’âR¥,g*¢#ñ}¯\¹2dÈ'Od|˜««kHHHÙ²eÅf« ‹í÷`ÑøBÏŸ#·­5̣̣%¤¹ªTÁéÓ¢̉C9”»ŒË8qv°Ọ́‰ÔÇÑH?ÅÙ³ăÇLßƯMÁïÓræ&y²¶FbbR¼q#ÚµX́w½à>/^¼èƠ«_5fË–­@̃̃̃ È–-dï̃½_f¶$!đÓÏx{[TƠˆä÷©•̃ÁQªh_5sĂwVN_4á7â è¼u—ÀâöíEgCäMpá¸f͘˜M\·nƯ5kÖüơ×_GƯ¾}ûÑ£G¯_¿₫ÇÔ¯__sÀëׯW¯^-6aB̉À/să†èlL_‚" @t6RED§@L®aCGEióŒ×x-Åü¢2JÄÏw7`€èlˆŒ .¥¥[·n=₫|Ëøúë¯çÍ›×îs»¹ti.æJñ œPôđê#GXlaĂüˆ¶d½r !²V¥ ‹ÿùG÷ó˜77Ñ臿O-­&G,ßÛ„oNÏ̀Vl•b+%±¦ߦuñL,ˆ,&ÿđáCXXXÆÇ¼{÷Nt„pf̀`q‰(P@tBüú+‹•~Ÿz6I±/|E§C±¶fqVfHh…VüæqWî=ëøxØ|. Z¶¤ùÀIJ²(Ÿ?̃­[7ÑY’£G³øRWÓß"Ó§èl1ˆ%©ĂóáYäÑĵPK¹7¬­­Qµ*ë…2|8~ùEtNDNÜ¢Nˆ0³XZ¦̣̀˜ÍXµ-Ø"ÅQ…ßx¬ưóÜàæ 65¢;<đßÍ™#:"3T8’u¡lEc,[&:1ΟgqíÚ¢³ÑO'° 8ÂO¢Ó!Bñ §đóÓháØƯíđC–+7ü0!_ê»A8‚oUï̃½[ÿ“bRüơ–Z5"y[̀7߈ÎF?¡Ơs„dª-ÚnÆfM\e¯àèŒt4u*¦}ÿ¯¿ZŒh.=<ơ=f̣6ü…¿¤8zœ‰˜‹1~R¼aC–fÚÚ„M*$ưmyWïà”ú5wñ"¾₫:).^œFÉ$t«¬èÚ•Åü{4.ÅE¾ªs_ô•âEX$:"¿ưÆâ¾}³ú́k¸&Å%QRôÅè®\9|ù%Ûäo^Kf)…ăæÍ›Û¶mëççWµjƠ±cǾ|ù2ăăß½{·råÊ&M”-[¶zơê={ö<ÍÏtL,Sơê,æ+HËĂ™.Rx­ug¤X¹CÄX^¿Îê3J£´'<¥Í‘)útÇ/Ÿ>]t6D,¢pœ3gÎøñăï̃½[¡B‡­[·öîƯ;ƒ‰!ăăă»uë6mÚ´§OŸV®\¹D‰₫ùg=,X úRˆ8O$j¸j•è„DâïØ7l(:=ü6s{”‘ ¾ßîÁƒY}ö-Ü’âY˜%úbôÂOYKkÉXBá±dÉww÷}ûö-Y²dÿ₫ư]»v½víÚ¬Yé₫0oÚ´éÊ•+_ươñăÇCBBV¬X±}ûvggç „‡‡‹¾ "¿œ:5?æà :ưĐ}j’6¾!=ëw«̀Æl)v„£èëÑƯ¨Q,~ñ"Ù„Ä2™á¸iÓ¦ÄÄÄ¡C‡æÍ›W³gôèÑNNN{÷îMLLLó)ûöí0nÜ8im¾}û&$$Đ k ơ7EKÉ´<ƱXé÷©wƒḾP •D§Cd#W.ß»§Ă †c¸¿Á›ưØ/ú’tÇ÷íRúÜ[Dæ_8?̃ÊʪV­Z̉kkë5jDGG_ºt)ͧDEEÙÛÛûøøđ;5À>|(ú‚ˆ'²Øâ—¥;—Å:é|ñ̃ă½FaÑ险_ŸÅ/êp‚7x#Å Đ@ôơèÎÙuê°M~¦Kb̀¼pT«Ơ‘‘‘®®®®®®ü₫’%K"ư*pñâÅ6lH±óÆ ¦oËS¨‹³8!0‘3₫>uBD§CdFï»ƠpàëÅÖh-ú’tÇ÷óÜ´I÷ó3 ‹µª'...!!ÁÙÙ9Å~'''/^¼HóỸ̃̃)öœ={vÉ’%9rähÑ¢…6¯ëéé™bæö7Q»3g̣qMŒQ]»"**½ƒ=z$:_£ûí7gÀEÿđCtTTŒèŒt·ªáäå…(Oe ½b3^_¸•Î~ÆưB,,^¬¸&̃†mw£îZ)¶½f₫|û“z|©T¸wO÷Ÿ%jĐ@ÁmƆeæ…£fè´½½}ư^k1ÏBBBºuëfΜ™0{öl777m^7""Bô¥)^œÅă‡È¤¥˜¹¯®À/\œ0‡a–9‘SÿÎ́?zKT¡‚´¶f1• _|‘æQôÛ±½%ZjâÅJ¨¡Ôù_ ÀÀlóĐ¡b½z‰ÎÉ„R­§n!²JưÓGKÎÎÎ*•*Ÿ­‹ÏíøóÏ?›6m:eÊ77·eË–5jÔHôÓâÿÄ,]™UDAø± 4¤Mï»ƠZ ßÊ8u;đ‹ôî-:"ˆ™666NNN©[cbbHă¬Sûøñă”)S¾ưöÛÇ4hï̃½U,{ ­%º}û¹×®é~*s±p!‹'*øë怵vAÑéY*WÅûu€)₫ ?é|9à»yçÈ!:"‚™ÜƯƯ£££5•¢DÓ[ÅƯƯ=ͧ$&&~÷Ưw«W¯®]»ö(ÍËC,‚ªFÀ€,¦aBÄ"đUbtïÑ»K¥XZ̀Z‰ø¿?~ÄâÅ¢"&g₫…cíÚµN<)íQ«ƠÇwqqñóóKó)kÖ¬9pàÀ7ß|³`Á‚ Z%‰9ăgâ@é̉¢"†4S¤˜oz$$%CÜ­Đ=s"§´9D_˜îøÖz¼%D©̀¿plÛ¶­••Ơüùó5ư,Y²äùóç­[·Î–-›fÏÛ·o£¢¢4ƒăÔjơÚµksåÊơư÷ß‹Îrë`›´T€Ÿ¢ï#¯Dă1^‡b¨ètˆŒƠ­Ëâơëơ9Ó[¼•âɘ,úÂôÂ/‰đù‹”X •Z­Ô^Ú[¾|ùŒ3 ,X½zơû÷ïŸ={ÖÛÛ{ụ̀å̉4=¡¡¡Ă† óđđؽ{÷Ó§O«W¯ngg÷å—_¦>UË–-;wîœñËyzz̉¨jeSq7’®_G̣©à3eÆCk!ơVú¯ ₫^¡AF¹÷Goé\\đêURœêŸ~–>úXÑ=¤Må°F̣_“  Ñ ™œÅ~×›‹#€=z̀5«X±b¡¡¡/^¼èܹóêƠ«SOiw|÷îƯơ´ü÷ߢ¯†ßÀ¨}Ơhö´˜½Jø¹¾}ǘ·zĐ }ÎÔƯs-f8ăD_›îøïưL̀E´8˜Å₫bÂĂÁOÿÅŸ3nv:xơê%Åß|ƒuëD'¤ƒ77¬?z$o^K₫kA‡̃ÿ…˜:ă>—¾VVHHĐëlc±ßơÑâHˆ¶øªñæMÑÙÈß~MzHˆVb¥+z„ơر,NLÄüù¢"&A…#!Ÿ²¸Nxy‰NHFîƯcq®\ºŸG8~̃ï₫°¼nYD7 °8 @Ï“}‹oÀ–Ÿ0›ÖúƯÆ'A…#!€ƒqôh²ṂÙÎ,ÖnÑMùâ'ßY€zœ‰X~èDZcúŸï^IñTLå7gÚ4«Ü~J´E…#!ÀzđxùRt6̣̉¢‹ÿưWt6„‘“ÍÂÈYëá0K± \D_îF†«+Û́ÚUtBÄȨp$$ùŸÉ& ÷€è ôĐ}¤xæ‰N‡(Êÿ₫Çâ¦Mơ?_  ´ù¾}…º‹fñ5øë/Ñ c¢Â‘X<~܇­m²™mỊ~K³g‹ÎF?K°„]¨CÉÚµY|ê”AN¹{¥8˰LôEêîömûúΆIJƯ½›l±ƠwïD'$;üHÉáĂu?p7pCK „ètˆ5kÆâÍ› rJ~: ‰¾BƯyx W/¶io/:!b4T8ËV‚+ ®\ܹ́Ăâ¢EEg£Ÿf`ßú»°Kt:DøabíÚê¬|C¸¢gçY®qqøñGÑ ă Â‘X°5êk=Â#)~ˆ‡üªHóß,®Q#å®DΨp$æ¥dIüû/ÛüûoÑ )Æ#ö•„zơDg£‡®è*Å£1Zt:ĬZÅb#øà'èÙƯ1PôÅë(o^8À6E'D´F…#1#Ư»ăζI“ïh_ú÷ßEg£Ÿ5X#ÅÓ0Mt:Äte«àÂc¿_;.À‚y˜'úúuT·.fÎd›4¹£RPáH̀EŸ>X¹’mRƠ˜gΰXÑă'`‚Ó<Ät&q ZES¾v‚!‹°HôơëhäHøø°Mª GbÄ’%l“ªÆ¬ø†«¯Æ+|Y¾É˜,Åë°Nt:Äbđ?9ü2ÖFĂ×ưĐo9–‹~ ttư:†g›T;ÊDù†Ç‚l“ªÆ,âG…̣í&ó;Ø]öª¨ªÇ™É:¾­/…Œ†¯{¢çZ¬ưèhöl äújRí(sT8…=sæ°Mª³h47z„ï©¥D½Ñ[Oá”ètˆ…á{󿔌‰¯» Ë&lư.èè·ßЧÛ¤ÚQΨp$JöĂ˜1ƒmRƠ˜uüûÇ Uœ`C4 £°ètˆEâç#˜;×4¯É×íÑ~vˆ~t´hºwg›T;ÊD±:vLvc•ªÆ¬ëÖŵj‰ÎF?ơQ_oBáë̃…âg@6̀d/›€)n‰–ÊL`ùrtêÄ6©v”'*‰2}ư56l`›T5ê„ob Ăj †è7EG)n2©T8}ZtN– G"c*^¼`›ëÖáömÑ9)“Ú„óÅHŒ”â‡x(:BR9xÅË– Iá-̃›è$N*·ËcÚ±Z5Œ!:'‹D…#‘¥³gS̃ˆ‹Ă7߈NKÙbbpîÛüåÑ é!R̀/QMˆ¼đ?f Ia ¦œÇy~ ª7x#ô}Ñ‘ZºuÙǽÙ(^\tN–‡ G"?>>¨\9Ùµvv¢ÓR<¾SùºŸG¸xÄ[èf1‹Îˆtđ ûÿ₫‹ë×…dQåS —q„ck´úÖèèÀ,\È6£¢ RÑhI“¢Â‘ÈŒJ…›ÜBĂô+Á RÜ(ăÿjWœlÈ&Å;°Ct:„dˆïJ\º´ÀDÔP»Ă]Ú܆m¶°˜ÎúơĂ“'ÉöXYÑ,¦C…#‘åËS̃₫í7>,:-3ÁwÍWt)b̃æPøj‰Ä́yz&kí¯*r%À'x̉}¥Íø ‚êN LI7îî)ưđlY+DGÏÉöüù'–™à ̣U«Dg£‡+¸²+¥Íwß‘©W¯X|æŒØåóB²ø=ƠQ½LIgj5¾₫m~ø• 'ONËÜQáHD»w*¢¢Ø|ù VĂß_tff¢J—+‡®]E'¤?øIq$"ơ8!¦Å·µo/6—öhŸâ®ưدĐÑÖ.`Û¶d{jÔ@E–ÁA…#ªB|ùe²=óçăßE§e>6nDXÛ¼xQtBzà¿ØaĐ—øR“brüÖ2˜ĂZ ơ â÷¨  ‚€ù&ơÔ²eÊÛÖû÷C¥Âµk¢33ST8Aö́J… ’íT«1`€è̀̀J‡,VtׯÁ̀oÎĂ<Ñ’EÀĂƒmÖ¯/:!̀Ă¼ÿđ¿g–© Râ:Lj5'û%2eàë+:-sD…#ÁÅM$ÛÓºµ²ëYâ5,îâîoøMÚ¤®D©ø% @h¨è„yƠP—F²á̃̃đ.̣¢S˲_ÅÓ§ÉöüơT*eẃ–!*‰iM™•*YWqaaزEtfæ¦^=—,‰₫ưE'¤‡(!ÅWpEt:„èáƯ;7n,:›$×píüÁ﹈‹*¨Öc½èÔ²&O¨Ơ¨T)ÙÎnƯäĐ5À|PáHLåúu¨T?>ÙÎ6m̉ø)'zÛ³'Ùjg¢̉¿Ønwt/ƒ2¢3"D¶¶˜>mʦ¢éˆj¨Ë¡¿ó|£ÄefÂÂpçNÊ*¼¼Dgf¨p$&‘3g3߾͛Egfø|‡âŒÂ¨w`°ËEgDˆ̃¾ÿùó³Í–-E'Ä\ÄŸ‘b§#½á-:µ¬)Qj5úöM¶óÖ-¨TøùgÑÉ)ÄȪTJ•²x™<j5räœyâ›0¦OW𤸓1ùg°ßñÔµ‘˜ÇY¼c‡¬fẸ́†·êèÁï G¸ ªè(:»¬ I£óü¨QP©”½́ªXT8£éß*U²É`89A­Æ¸q¢“3[|Ơ8m¾ÿ^tBºú¿NÀi“ªFbnøf͹­w° Ëâ—bçlPA53Dg—5ju­ºơëC¥J9˜†hƒ GbƒC¥BHHÊư)‡Åƒâ«Æ1c0z´è„tµ+†b¨´IU#1O|í¸`ÆP2v°SC})›æFc´âÊÇmÛ V'›LĂƯÖÖÉ  ™¢Â‘T—.P©đÛo)÷oܵ%KÎÏœñUă€˜:UtBºÚ­üm2ª‰9ăkÇiÓ’›‘‡º¨«†z&f¦Ø¯)GCI®_µ:å™ÄD/• —/‹ÎO!¨p$̉¸1T*¬]›rÿرP«Ñ®èǜ_5víl‰ e9ˆƒmĐFÚ¤ª‘˜?¾v3 N( #1R ơ7ø&Å₫˜¡‚ªúˆN0 ñDLLûË•ƒJ…#GDç'{T8ư<{WW¨Tìd«YjÊÑ)?¾jlÑBÁ³Ưøz`óOÆ F“¢|í8`ZµPÚÖajø§Ø¿KTPU@Ñ j+W.¨Ơit§P»6T*̀-:E£Â‘èjùr¨TÈ›/_¦|¨gO¨Ơ)W'FṕX²ª±vmlß.:']UGơ©`÷×áQ.ä!¦Â×Û·£hQÑ ¥ëOü©†º>R.™xTP©  …øq´Ñ·/Ôj\¼˜ÆC#F@¥B@€èe‰ G’u­ZA¥BÏi<4bÔj,]*:E‹Đ½{²ßk*àĐ!Ñ9éJƠ)œ’6oâfA!¦ơé‹<ÏÜàiÚ‡}j¨; Cꇣ± ª₫PÆrUåÊA­Æ½{°JUi₫2Oó%£Â‘h-$$ég(ÍF­:u VÓ̀ª&£RaåJ¶éë‹sçDç¤M+¿g'vzVx –ÇÆ&å •Jæ·nÖc½jOx¦~(!*¨¬a½ XQ¶X1$$àåKØØ¤ñ¨¦ƯºiÜ`³@T8’̀> 77¨Té®v|âÔêd+Üczơ*eKÄ/¿àêUÑiéd ¦è¥†º‰Î‹AÊ–M9cuëÖh&÷Ÿˆ[¸¥†z6¥~(‰mÑV•¼®áèL3á́ŒOŸ V§=#û¡CI]ú ¨PT8’tœ;‡\¹ R¡NDG§q@Ó¦P«¡V£zuѹZºuáâ’lOt4† –Nr!×,6‹£8¡&ÔjÔªÅ6wí‚J…„Ñie¢-Úª¡~‡wi’¹…[ePF•;Ü#):ÙL¬Zµ›6¥ưèÂ…P©pûv„Bÿb×$¹ 'T*T¬ˆØØ´éĐj5₫÷?ѹZ–ƒ¡R¥́ŨVĂƠUtfY§iˆûŒà»¸+:/BdăèQ¬X‘l jÔVæla{çÔP×DÍ4x§đPAå σơ­ª¶m¡VăƯ;Tª”öeʈNQ*  V'Í@ R¡cG<öa&51®_/:cË’• ơê%ÛÙµkk°ÊŸ¦ÛS>O÷qÿü :5Bd¦[·”?ä'OB¥Â?ÎL+ÇpL uzhÜÆíz¨§‚*;²!Ht¾é²µEXÔj9‚-Ă2ÍT>¥₫ß̃½ÇEQîÿÎî.·å&¢% ©€ä D…(Ä#G%““™½́g¦¯RórR,Œ.¢‘—uÔ0Nv̀+™¢¨,À rSSÑe~ ë²À€ ́çưâåkö™gg¾³»³ûơyy†ÛE»ÄY·€*-%–¥/¾ "ê×oŒØ‰‰£ùâ zî¹ÆÆÅÙ³éÚµfkNDÅÅIJôÓO¤Pˆ·!8†¤pđ`bYŒ;¸¶È  I¥gµÊ7̉F jhËê˜ËbÔ(b:rD́à„z†ùư%ö7úm5;2₫<ŸBS¸$̉Ÿü·Óv±×aölbY22º*v â@âØÓíƯK¯½Ö˜)2 Í™CçÏ·Tÿ­·û£wï&''±£7DgÏ’©)1 egk¯R©è×_ů-VĐ †˜Á4X+AœBSXb»×mÊÄF,Kóæi—ĂĐ›o_x‘×/ô K¬TQƠBÍStjMă~½zQ¯…´0̉Å8öû ×̉¥Ä0äăCƠƠÚ«vï&–%‹nr#• ªà.Ÿ|Ÿ̃×ZeGv,±ß̉·bÇĐ %$Ë’‡‡vùçŸĂ³3]¹"vˆm`Aÿ¢qă 7Óæ¾ỔÍrĐƒéăa4ŒË#mÈæÿèÿ~¥nơ?é‰c7wú4-]ú°÷™»G̉–-Ü@';»Æï –¥ß~ë²·F5k×6¾ukÖèXûâ‹Ä²4i’ØQ P@áÎ}§ëœ°-‹²nÑ-±Ăèæ²³©´TGyI =ưtă•t™]}ÆD-³hV!rIä*Z%#YËơ+¨"†̉Đ?ụ̀YM«³(ḰCéù86k×®]̃̃̃/¼đÂ’%K*DŸ0>#ƒ>úˆBB¶&2 ùùÑ5­ô>óüưiûöÆdñÖ-½ĐỴó饗ßĂw̃Ñ]‡ḰüQ́X[³¶;’#CLêÿ̉q— gr¾BWXbŸ£çÄ GèƯ›X–**tÏsèyyĂ¥eë=N]Ï{ô^ƠqIäô…Àï³tv-ó$O>•Tâ%zésúü]û˜z†íSzt¼O?ưtăÆfffC† )***,,ôôôܶm›\.oơ¹J¥2''§;ÎÉ¡Ü\:}̉ÓéôéfgRÈÑ‘f̀ °°f'¡½*((èׯ_sk÷́¡Í›iï̃V6̉¯;֥Ǘ–SùfÚ¼™6çRnË5çѼJ;̃ÎĐ̣[=X—xëW¬ ÷ßo¥“EGSt4=ơ”ÈѶ×7ôÍi:ư5}}—î>ÎvlÉÖ—|}É×ü<È£ơißvë·¾;Câ¨CNNNXXXï̃½¿ûî;{{{"‰‰Ù¶mÛôéÓ—-[ÖêÓ›ư0Ơ×Snncj˜›Kÿù©Ơtï>C73£Ơ«iÆ ²µûU4D?!—.Ñ¡C”˜H—. }ú!tö¬ØÇ Ëa:|˜'PB5U ©oLÆûi xçéÙˆ¡ ½ơçÎшtÿ¾ ÊÆÆôÆDcÇ’‘‘Ø¡·G1M_¿Oï×R­7kK¶ä0‚F¸’«+¹*I9€謉ÄZµjƠ7ß|óÁüơÏ‘jµzذa2™́ĉI+ưûUR©iCCg:nMœH“&ußÿAvwåå”™I™™ôûï”™Iÿû_›·`jJqqôúëb QåeRæïô{&e¤ƒsDMGqÍMƠÖ³u¡́:WW|ëọ́háÂöÜÜK*¥à`̣ô$//̣ô$77±¤mr)÷úaí9A':aw•DmÙƠïÙ8ê0qâļ¼¼´´4»¹-\¸pï̃½ÿ₫÷¿‡ ̉ÊóFÏI$ô·¿Ñ˜1H]íª›«ª¢ÊJª¬¤{÷.]"†¡²²‡\:¨Rés¿VV”Jƒémƒ ÔPI•÷è^%Ur GèH?êWöÈ¡”ưJ¿ªIƯ@zû C̀bZC1ú|uº¡®˜=@§èêoưĐ?ÿIès›2 LvvüPP™›“…ÅĂ¥R±Ÿ.̉Å£tôÙK{ë©^¿7̀™he¿‰†eÙË—/ÛØØØÀăĂG-Z;qâÄ#F¥§§{xx¼ªóê3Ă€ÄQ·Y³fơîƯ{÷îƯÿưïŸ|̣ÉéÓ§ÏŸ?Ÿ›‘À0!qlVhhhhh¨ØQtă‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ G½ ;̃zƒ…· G‰#‚ÄAâ‚ qA–eÅ¡§Q*•b‡+''ǴD€ÄAW5‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ ˆĹzˆ+W®„„„$''{yy5]»k×®äääË—/›5jÑ¢EÖÖÖb‡ z6ỵ䬬,­B;;»´´4±Cƒ‚SÛ0ád74ø‰×„ÄQ?¾₫úëæV}úé§7n433:thQQQJJJ^^̃¶mÛär¹ØQƒ>ËårÍB+++±ă‚‚SÛ`ád74ø‰×„Äñ±¨TªÜÜܽ{÷îܹSg…œœœ¤¤$‡ï¾ûÎ̃̃ˆbbb¶mÛ·lÙ2±Ă½Q©Twï̃ ù́³ÏÄ:Nmƒ…“Ưpà'^'Œq|,¡¡¡Ó¦Mkî#EDÉÉÉ óçÏç>RDôî»ï*ưû÷744ˆ>èMqq1iµ@@†SÛ`ád7ø‰× ‰ăc‰‰‰ILLLLLô÷÷×Yá́Ù³‰dôèÑ|‰T*9rdyyyFF†Øáƒ̃Qß¾}Å: Nmƒ…“Ưpà'^'tU?–áÇs ©©©Mײ,{ụ̀eÍrWWW"*))2dˆØGúÁư–üñÇQQQ/^455uwwŸ3gΑÔĐƯáÔ6d8Ù ~âuB‹cªªªR«ƠMGL+ "º}û¶Ø‚̃”””Q|||iié°aẮ́́RSS###“““Å ô§¶!ĂɃư@‹cª®®&"333­rsss"º{÷®Ø‚̃üñÇr¹|Á‚QQQ\ÉÉ“'ç̀™³fÍáÇ;:: èNmC†“8û=€Ä±uơơơ_~ù%ÿP*•Î=[È­¬¬†©ªª̉*¯¬¬¤?ÿSƯKs†¯¾úJ«¦¿¿ÿŒ36mÚtøđa₫zœÚ† ';p ö{‰cëêêê4§]011˜8Êd2…BÑô¿*•ˆø‹° iÓ‡ÁÇÇgÓ¦M¹¹¹bG z†S´àd7@û=€Ä±ur¹<''§}Ïupp¸|ù²J¥²´´ä ¸Ub´™Î˲ ĂH$ –J¥Ddaa!vÔ 8µ NvĐd˜ß¸8¦c3F­V?~œ/aYöرcÖÖÖ̃̃̃bGúQTTäîî₫̣Ë/k•Ÿ;wˆ”J¥Ø‚₫áÔ6L8ÙA“a~ q́X‰dƯºuÜ "JJJ*++ 722;:Đ—ÁƒŸ9sf×®]|á¹sç¶lÙâèè8~üx±ưĂ©m˜p²ƒ&Ăü@WuÇrtt\´hQlĺĉGŒQTT”îááñꫯèỌ́åË£££ß{ï½;vôïßÿÚµk¿ưö›©©é|ĐƒïXjÈpj,œ́À3̀ïéÊ•+Å¡'8zôè… """xâ ­Ũ̃̃...7õ>~äÈ‘ñññỒÇúúú;vDFF>|Đ A&LX´h‘V¦æ6ËÊÊ.\èëë;f̀ÿ¤¤¤v—æU*Ơ‡~îíí=ỉ¤7Ö××·c×Í\°`æHÄ?₫X©Ṭ¹ø̀™3•JeuuµÎ8ù̃ệ̣̣́́l¾¼ººú́Ù³Ụ̈‹/¾È—744üøă3f̀8p`@@ÀŒ3¾ÿ₫{Í#jùƠh!r^YYYLL̀Ô©S½½½ƒ‚‚æÍ›w₫üùÇü¤@—%;è6v́ØÁ-(×_]kíèÑ£GUZZJD999...Z–.]úư÷ß·°ưÚÚÚiÓ¦eff̣%yyyyyy{÷î]¾|ùßÿ₫w­ú•••‘‘‘ÅÅÅÜĂ{÷î}üñÇ………kÖ¬iߪTª©S§æççs/]ºté̉¥‹/r™n‡îZ+++???n€ă±cÇø.éôôt®ÉÓÉÉÉĂĂƒ¯¿`Á‚ưû÷ó¯_¿~ưúơ3gΤ¦¦&$$è%¤ôôô·ß~»¬¬Œ{XUUURRrèĐ¡™3g¾ûî»÷R€XĐâBeddp ăÆ355mZ!))i÷îƯ»wï?~¼Öª́́́–³F"Ú°a—5öêƠk̀˜13f̀đ̣̣""–eW¯^}åÊ­úéééÅÅŶ¶¶C‡åăIIIáûmÛề™3ùùù^^^&&&\áO?ư”••ƠA»>tè\.çÆÆÆ:t¨W¯^ÍƠæ4/Bâ8jöSïß¿ŸË†ñóó 0`·êÀéééí{‰4UVV¾ơÖ[\Öèçç7õ¼ &H$–e·nƯ’’̣ø»€®- H}}=ß°äääÔ֧߸qă™g™3g³³³Î:|63gξEsÖ¬YiiijµúäÉ“ưû÷×zJ@@@BB‚±±qiiiTTTAA%&&1¢}‡¹lÙ²éÓ§Ñ•+WÂÂÂräÈÀÀ@OOϦơ]]]Ÿ|̣Iͧs ,Ë–””<ó̀3m R«µO¡Pđ́è] ̀M]₫óÏ?‡……ñưÔ—Åđ!©TªăÇggg_¸p!++ë₫ưûzŒ„kd%¢èèh •JeǽĐùĐâ‚Y[[sËM[à8÷îƯ»sçÎ;w^̀?·o¾ùæ´iÓ¸f<"bYöüùó6lˆˆˆ˜6mZÓlƠÎÎNó¡\.·°°à–ù^ơ6Ọu>́Đ] 7v́X®IëÁççtÔˆ§®®îĂ?ôóó[°`Á–-[̉ÓÓƠj5×µ­•••üÅàÍ©¨¨èĐ—:GÊÛÛ›[HMMƠ9¥Kpp°¯¯¯¯¯/ư5¯…$Œ'“É–/_₫ÙgŸ…††ZZẒ«~ươצw̉+//×|XSSĂ÷§÷éÓ§C_ wmkkËơ¡«TªS§Nqñ¸¸¸hµímذaëÖ­jµÚÉÉiåÊ•?üđCFFF@@€¾Â077ç¡·lÙrH— &tèK‰#Åe»~ưúÎ;µÖ¦¦¦̣mÜ8¼6©­­-+++++«­­ ‰‹‹KOOߺu+ßIÍOUÈËËËăfÿáœ>>yyyü˜ËW^y…¿ºz ´8@¸ººnƯºUóúè >ḱÓ§ÏçŸ̃æF"’H$ëׯç:7ËÊÊvíÚµiÓ¦ưû÷s]±>>>ÿøÇ?´2tèPGGÇ̉̉̉S§Nq©7KN‡^Ô,p×ùË_¸åêêꌌŒ‚‚'''¾•NkkܹsçÖ®]+¤ƯQsr¢¦ưÔ ĂŒ=ßûÑ£G9âàààëëËrMÅ: Ü̉̉266–k >sæ̀ºuë8ÀÍø9õ¼~ ó!q€¶y₫ùç<¸dÉ[[[ccă~ưú.Y²ä§Ÿ~5jT»·û́̀™3wï̃Ä­Ư·oß Ư”đÈ÷́Ùááá!—ËœœÆûÍ7߬\¹RÈQ@·Ă4Ÿ  +‹OLL$¢   ơë×Ȯۡ¾¾>55•éåhŒqè™d2RFĐ/tU€ H@$ .AĐâ‚ qA8€ H@$ Èÿ\Ïœ%6iIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/gaussmf_101.png000066400000000000000000001344521466512601400224670ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwX×đw+ˆ(b‡¨X£Ä̃Á’Ø£Fc/±Ç=¶h®±Ä$j́Æ$Æ{½D%b7¶Ä‚ {Ç‚À̃?g}aË™Ư}O{¿fÏ|3û1sN¯×ƒˆˆˆˆ(-N² """"ÛÀ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒâ";; ;"""²¬°°0Ù)HÀÂÑ"ó›ÉrxI͈×Ó́xIÍ—Ô¼x=ÍÎaoñQ5……#……#……#……#……#Ù€­[·ÊNÁ®đz/©Ùñ’¯'™ G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2‹́ˆˆˆ̉- @v dWÂÂÂd§`X8‘ àÇ<™ÿ1U‘QX8‘QX8‘QX8‘QX8‘QX8‘QX8‘QX8‘QX8‘QX8‘ùêt:NײeKY9|üñdž ,(ûzØ DDDd%K–\¾|ùàÁƒ /Ÿ>>;v4Ä‘‘‘+V¼víZëÖ­½½½×­[×°aĂƯ»w&}cxxxlllơêƠưưư•nnnÉ%•–+W®\¹rå7̃¸qCöŰ,‰ˆˆ¬'66€³³³íâââ䤉§‹ß~ûíÅ‹—,ỶµkWƒ ªP¡ÂĐ¡CwíÚ•tç‹/øâ‹/êƠ«g̃–ÉDøf"""²o~~~Ÿ~úéœ9s<==3gÎ\¶lÙQ£FEGG+;̀˜1ăí·ßvuuợ̣ªR¥Ê+½÷èÑ£åÊ•+W®œ1û4høđáîîîY³f­R¥Ê¦M›bbb>û́³’%Kº»»Ÿ9sưó‹/&MT²dÉ́Ù³.\¸gÏwîܱÄXµj•¯¯o—.] /ưưư[·nrûöí¤; Ç¢E‹½e2 G"""kX»víÀk×®=räÈܹsO›6­Aƒz½À„ † ’;wî‘#G~üñÇOŸ>íÔ©Ó† ”÷^¿~ư½÷̃{úô©¡»^û/_¾üçŸ3f̀ĉ/_¾Üºuë:uếÚµ«OŸ>;w éĐ¡ƒaÏ={?¾`Á‚C† \²dI‹-̀~î‘‘‘çÏŸÖétÊÆºuëÆÅÅ%ÛÓñâÅ‹Y²dÉ‘#ÇÚµk.\*Ù¦´L&â£j""²#GÈzôȰ¥dÉ’Ë–-«P¡‚‰-“‰X8‘©\YæÑơúT¾èíí=tèPååçŸ>₫ü5kÖ´k×îđáĂY³f5T"""DEE);ûúú*U#€4÷¯\¹²¡j  }ûö†ª@½zơBCC£¢¢ÜƯƯu:Ư¾}û®^½Z¸pa‹/^¼xq̉äcbb6mÚ”̉©½ÿ₫û©_CnîîîâF%ùD.^¼7qâÄÖ­[gÊ”éÏ?ÿüôÓO[´hñßÿ̃•á–ÉD,‰ˆˆ¬¡té̉™3gV^ººº\ºt @Μ9÷ïß¿cÇsçÎ]¸páôéÓ111â{Ä1.iîïíí­Ä†z1éÙ²e›9sæĐ¡CưüüJ—.]½zơ† 6ỉD̀Óàùóç©<ÂÖ§Z1+Gúô©¸122€——W̉ư÷́Ù“5kVåKƯ»wụ̀eÿ₫ư×­[×£GSZ&±#‘...ÑÑѯ^½jÖ¬Y­Zµ¶lÙR¬X±¡C‡={6Ñ}5OOO%6făơïßÿÊ•+‹-zûí·7õܪU«·ß~ûîƯ»‰vóđđЧ,Í£øøø899%zvüàÁùóçOº¾|ù•}ï¾û.€Ó§O›Ø2™ˆw‰ˆÈ\»&;ƒ9sæơë×ÊƯ¾/^œ={6(((44tóæÍ3gÎ4h²s¢;ˆ¢ôˆˆ‹//^¼gÏ={öŒ‹‹›7õÀ,Xđù矋{ø¨ÚÅÅ¥T©R{÷î7₫ư÷ß:®té̉‰v¾zơêÆëÖ­[²dIe£á&¢áyz†[&Ó±pLĂåË—5j´fÍe""̉. ¯,wÿ₫ư3fŒ1Âđr̉¤I‘‘‘-[¶4̀M-IëÖ­{₫üyJẉ̉»*ÂÂÂjÔ¨1f̀˜I“&prr ‚đ,[aâ£j½zơ4hĐÆ›6m à̃½{ëÖ­kĐ ŸŸ_¢=³eË6lذJ•*ươ×_†Lâââ¦OŸîâẩ ASZ&Ó±pLĂ²eËd§@DDöÀ××wܸqû÷ï/W®Üv́ØQ­Zµ.]ºÜ¸qĂƠƠµW¯^;v̀Ÿ?ÿvíÚ•;wîĐĐĐ-[¶4jÔ(Q;ÁÁÁéÚ?+V,S¦̀Ô©S/_¾\¦L™°°°-[¶xyyµoß>цGƠ¦œ~·nƯ~üñÇ;öïßßÓÓsÉ’%QQQ'N4|uÚ´iS§N2eJß¾}óäÉ3qâÄ‘#G+V¬Q£FÛ¶m;~üøäÉ“K•*•̃–ɼØÇ1y‘‘‘GưüóÏùåÙ¹‘=¨R¥Ê;?~}zÑ¢ECBB”U¤_¾|ùøñăW¯^^1bƯºu>>>Ë—/_¼xqΜ9·lÙ¢̀d”®–ɼt&₫a¯êÔ©#NŸ®GƠaaa²ÏÀ®„‡‡ó‰ƒñz/©Ù¥~Imñ׬ŸŸ_ụ̀åûí7Ù‰XO`` §§çîƯ»e'‚öíÛ‡††^¿~=¥2đe‹ß„fÁGƠÉụ̂Ë/ ÷,_¾|ÿ₫ư²Ó!"ízˆ‡K<– Çp7¸ÉÎ…ˆÈ²ø¨:y5kÖ¬W¯^½zơ8˜ŸˆDĂ1\ø_.äúÂë‹È‘hûL‘,‘d÷îƯ[½zuhh¨¬=ºzơê«W¯Ê¾öƒw-" Ñ–­[·ÊNʆ†’¹đz¦×©,§¾ôụ́HÖô­e7£Gc4€úQơÇ<Søuát½ƯÁÙßwi£F)"; k;sæL»víZ´hQ³fM) üđĂ ,P @Ô÷ Oå« 6”’¿±p´Ḉ÷`Q́@f^¼F…QÓ0ÍÄFvfß¹3ûNßá»(ûœl†}—Λ7Ov ÖvüøqÙ)`₫üùóçÏ7fÏÔ¿ß’~¬'½Cä X8%ă|2³ÓØétiÄñÀB.—¯9@àqG± ©´ù >™†i#0Böùeû8%Đ=uĐ%_5^+„6k¡Ó₫+_fùÎ;ôß½úơ|ưÔÏN¶=ç[î롯ê‰Ú×A7 £dŸ:‘±X8‘£{ŒÇ:è~Å¯âÆ®èª‡~ Ö B\\üv́ª0\Ư¯@Ô¯cƨŸ>üi½̣êđa û°O}}Ô4 Óx둈l G"rh=Ñ3'r[‚¬‡~ –^‡ơ«¯__­¾×¢âjƯZ|ơÍ7øăøxvè¡ÏsÄê 3}ø6‘¥±p$"ÇU%ơhüÿ́Â.ååôéâ#hèơ€N¸;¸`Aâ?úHK•‰Q_µh‘ ½«°J|ë(Œjƒ6²/ QjX8¦ả¤IaaaÆ/TMD¶B]Ô¹ÙÊ£¼úwđ¸ÏaÚœÈÈ$Môé“xË?ªñÙ³ÎÎ×é J°o[´ƠCŸÙ•-ë°®̉˜¦˜ˆH"Däˆu+܉Ǒx²âáBWÆJ•#°q£ºé›o’oºA5~ü8(ÙƠÊëÖ%̃ư9ÏÀ ååMÜd—G"̉,DäXîá^¢ÊL}=ÔKº§Ø•ñđaÀœ9ê¦₫ư“?ÀÈ‘júhụ̀åU«V•}r…#Ù¿+¸"—^ƒ5Ă1<•ư·nUăiẾÆtp40@·o7üÿ=ê¶ R{÷Ïø¹7z+/Ùß‘l—OÇëˆ6Çß·o_êoŒŒŒ¬X±âO?ưT«V­=z\ºt©aÆÇP¹rå;)RDöÉ9(Ddç"é?ååQM}ºÄ ÔX“ p¬U+µC…ă›nZ·V7§^y.ÄÂEX¤¼díhObccccc­s¬èèè8eƠ#Ùbbb¶oß>a„÷̃{/ͬ¾ưöÛ‹/.Z´hųfÍÚ»w¯N§:t΅“ Ddï<à¡Ä;°£*¤¾ÿ±cjœàsê‘ÑƯ Å•ªÿüS ×®U7§4DFÑ ½ÄµdX;Ú:??¿O?ưtΜ9™3g.[¶́¨Q£¢££•f̀˜ñöÛo»ººzyyU©Reʼñ{ôèÑråÊ)ó §¾ÿ Aƒ†îîî5kÖ*UªlÚ´)&&æ³Ï>+Y²¤»»{ppđ™7o_¼x1ỉ¤’%KfϽpáÂ={ö¼ó¦o®yEDD¼÷̃{'N¼ÿ~;¯ZµÊ××·K—øn₫₫₫­[· ¹}û¶µÿå(!DdÏÄzk5V'Z':)±·½8>&‘ơë§Æm̉Z&fFŒ„:¹kG[·víÚÖ®]{äÈ‘¹sç6mZƒ ôz=€ & 2$wîÜ#GüøăŸ>}Ú©S§ 6(ï½~ưú{ï½÷ôéSCß¾4÷_¾|ùÏ?ÿ}:wî̉¡CĂ={ö?~|Á‚‡ ¸dÉ’-ZXâô}||ôz½^¯?wî\ê{FFF?>88X',ÔT·nƯ¸¸8¥§#I£'s+^¼¸́́ÍåË—e§`WçzBå¿úiîÿè‘đ†D¿7lP¿đơ׉̃˜̀%mÑBƯÿÑ£Y¥tˆôÖ÷ODöEµ’Ô¿KSù5+^^ëÿ— CŸ¼É“'+[†`åÊ•z½̃ßß¿xñâ¯_¿6|éñăÇ...ưúơß;qâÄØØXĂ–4÷Ïœ9óÙ³g /¿úê+åÊ•‹6l©Y³&€ÈÈÈgÏ9;;wëÖMɪG̃̃̃·nƯ2ư±|ụ̀AAAI· Ç &¤ôÆóçÏøôÓOÅ;wî°páBĂËvíÚ(PÀô$ 2đÁí°Ÿơ.² W""‹ïÏMÆä>è“æ[7Wă3~M誘  cJ Àï¿ÇÇsæ`́Xå+AAê@™Q£0uj--ćx¸ë”óJiîỈ8ooo±—̃çŸ>₫ü5kÖ´k×îđáĂY³fuq‰ÿPˆˆ¥́́ëë;v́X'§øç„iî_¹rå%Jâàà`íÛ·Ï”)“aK½zơBCC£¢¢ÜƯƯu:Ư¾}û®^½Z¸pa‹/^¼xq̉äcbb6mÚ”̉©½ÿ₫ûf¼P†qww7zxx(gJ±p$";” ¹”¸&j~†ÏŒy×̃½jœx₫q uJS‹M.»wCy₫6mZÚ…#€µX›Ù_à…áå»xw;¶[ă:’Y•.]:sæ̀ÊKWW×€€€K—.È™3ç₫ưûẃØqîܹ .œ>}:&&F|o@@€R5³¿···êŤ[dË–mæ̀™C‡ơóó+]ºtơêƠ6lؤI1OƒçÏŸ§̣[¯7ç3†TŸ>}*nŒŒŒàåÅ ª$cáHDö¦3:?ÄCåå^́5æ]«V©±™»x%j;7”á×¯Ă˜iŒ£¥ÜCƯ³0k™ùÂÙ…™3eg...ÏŸ?ơêU«V­6õ\©R¥wß}·yóæƠªU{çwÄ====•ؘư׿ÿ>ø`ăÆ»wï̃¼yó¢E‹BBB|||ÄƯ<<<̀[¦ÂÇÇÇÉÉ)ÑÈŸ?¿ur ”°p$"»² «–c¹̣̉ø§ºíÛ«ño¿%üøöá‡Æ¦’/n%¿2ÍÆ¨R%>nÚ'OƠz¥vŒÁMÑô-¼e‘‹hËi¸œ>sæ̀ëׯ•»}/^¼8{ölPPPhhèæÍ›gΜ9HÈ>ÑDQz÷OEDDÄÅ‹‹/̃³gÏ={ÆÅÅÍ›7oàÀ ,øüóÏÅ=­ù¨ÚÅÅ¥T©R{÷&ø“ïï¿ÿÖét¥K—6ă(X8‘ưx§í¡€fë (ÎàhLGeÏÑ£ăăíÛñî»ÊW*WV÷:u*‰œÀ‰̣(oˆ‹¢(;;Ú–û÷ïϘ1cěň&MÙ²eË7n()¬h¾nƯºçÏŸ§t‡/½û§",,¬FcÆŒ™4i''§   ϲÖ|T  W¯^ƒ Ú¸qcÓ¦MÜ»woƯºu 4đóó3¹m2 G"²îP{ÓoĂ6ăߨµ«/\˜äËÆOư- Ç9sÄÂÑpÄŸ-Bï̃F5Yå¾Ä—c0Æđ’el‹¯¯ï¸qăöïß_®\¹́ر£Zµj]ºt¹qㆫ«k¯^½:v́˜?₫́Úµ+wîÜ¡¡¡[¶li$®€ N×₫©¨X±b™2e¦Nzụ̀å2eÊ„……mÙ²ÅËË«½x€uUèÖ­Û?₫رcÇ₫ưû{zz.Y²$***ÍU É 8#Ù qơ zïÿ^qÊÆdj¸‡oJ%N.L°g°d‰÷I{À·j4FWGuåenä6墑5U©ReÇ?5kÖơëׇ ¶{÷n''§B… m̃¼¹@³gÏ1cF¶lÙN:5eÊ”ÈÈÈY³f%m'½û§"sæ̀[¶léÚµë₫ưû¿øâ‹={ö4hĐ`ß¾}̉ó¹»»‡„„´mÛvƯºuÓ§O/Z´hHH×§Ö5ÿ€paaa²³°+ááá̉‹Ù»¼âõˆ_˜Å¾·pËø÷>¬ö8|ûíäz*£ ‹Axx̉R¼¤ÂôÅḤË6Ơ/¦A¬’¿Æ×CaoK±¥₫]j‹¿fưüüÊ—/ÿ[â₫³ö,00ĐÓÓs÷îƯ–h¼}ûö¡¡¡×¯_7Kkø²ÅoB³àG"²yÿà¥j®ª@Ó¦j¼qc’/‹R_a:)±OØălj¾hÊ8nñ ơ0 Kÿ5#"ÊDdó*¢¢‡#<½oÇL'33NÆFÆ$Ư_lж­ÿñGºÏz5V+1W#$mºwï̃êƠ«CCCÍØæÑ£GW¯^}ơêUÙ'ç X8‘mË́JÜ}‹ Hº̃.ö¶92¹=Ä©¿³fM_r‰¦OBi³cGúÚ₫¾uê¾ ¥ïưd]5ªV­́,¬í̀™3íÚµûæ›òØæ?üĐ®]»È>9Å>æç°ư,Ç.ûäIdO×s"&NÀåe†§ƯÑĐˆ®ˆ©]̉Tß ø8sf¼z•î+ ̃k܌͵Zf}IËØÇÑx¼ăHD¶ê%^X5>x ÆnnÉí!>ÆnÓ&#YæË—ÊÅÅx££3̉üs‹³kD¼hÖÙBR–d*Gq™äGva ÔVøÀˆ,„…#Ù˜÷ñ¾×Fí(‘±vöíSă·̃Jkị̈å-wF]º¨ñW_e°‘®èêlA_âKË%LD‹…#Ù’Û¸ư'₫T^† $cí9DdÄ‘°Á”¦Ä©Å¾»wÏü§‘r1Ú«—o0éüÀ)ÁI u:N§kÙ²¥›ưøă Í,XPö):"Dd₫µ`>äk¦&4†©SƠ¸[7ëI S9‹Ô(&b¢ør,~›“(Y%K–\¾|ùàÁƒ /O:Ơ¶mÛ¼y󺹹U¬XqÆŒ111)½÷É“'}ûö-T¨››[íÚµưôÓ9sæxzzfΜ¹lÙ²£FVv˜1cÆÛo¿íêêêååU¥J•+V$zïÑ£GË•+W®\9cö4hĐđáĂƯƯƯ³fÍZ¥J•M›6ÅÄÄ|öÙg%K–tww>s&₫ÇêÅ‹“&M*Y²dö́Ù .ܳgÏ;â_Mæ³k×®ÚµkWîß0À’î¼jƠ*__ß.o&Ç÷÷÷oƯºuHHÈíÛ·%ưR<D¤i₫đWâc8fzƒÆ̃G±˜>ƒ·3̣(ZTͲ ¢8+\Mh‰̀`íÚµ¬]»öÈ‘#sçÎ=mÚ´ èơz&L2dHîܹGùñÇ?}ú´S§N„ARׯ_ï½÷>}jèÛ—æ₫Ë—/ÿùçŸÇŒ3qâÄË—/·nƯºN:»víêÓ§OçÎCBB:tè`سgÏăÇ/X°à!C—,Ỷ¢E ³Ÿ{LLLÿ₫ư$ü{èêƠ«²dÉ’hçÈÈÈóçÏë„uÜëÖ­§ôt$iôdnÅ‹—‚½¹|ù²́́ ]ÏÉúÉĐĂđ_~}~ÓܸñMsĐ÷è‘ê®9sª»¦Å¨Kª´Ö¼y*{•,©îøđ¡®!Ôöđ—₫/3´h©_̉T~ÍçkưÿRɹH‘"&O¬l>|8€•+WêơzÿâÅ‹¿~ưÚđ¥Ç»¸¸ôë×O|ïĉccc [̉Ü?sæ̀gÏ5¼üꫯ”+W.::Ú°¥fÍ"##Ÿ={ǽ́Ü­[7%«=zx{{ߺuËôẠ̈åË¥ôƠˆˆˆÊ•+;;;Ÿ?>їΟ?àÓO?7îܹÀÂ… /ÛµkW @Ó“4ÈÀ·Ă~Ösp i×hŒVâ0CGxñ~Gjñ ᢄæ•êôsæ ^=5[áñc=ÄC/xâz¨ÇQ2y{{‹½ô>ÿüóùóç¯Y³¦]»v‡Î5«‹Kü‡rDD€¨¨(eg__ß±cÇ:9Å?'LsÿÊ•+—(¿Œ{pp0€öíÛgʔɰ¥^½z¡¡¡QQQîîî:nß¾}W¯^-\¸0€Å‹/^¼8ị111›6mJéỖÿ}¤Ç={z÷î}ñâÅùóç+V,ÑW 'âîî.nôđđPΔ$báHDUå•x†˜¥Í+WÔ8kÖ 7c¡[[Ruëªñ/¿˜¡p̀‰œ5PCY±ú,ÄBIgîèJ—.Y<ïêêpé̉%9sæÜ¿ÿ;Î;wáÂ…Ó§O'§& @©ÙßÛÛ[‰ ơb̉-²eË6sæ̀¡C‡úùù•.]ºzơê 6l̉¤‰˜§ÁóçÏSy„­×ûɵk× °aÆbÅíܹ³®øŸ0ù§OŸ###xyyYé_‹RÀ‘ˆ´(¡'¡+₫ߘ̃æÿ©qưúF¿ÍôéäêÊlPeđEXdß…cMÔ”B:¸¸¸<₫üƠ«W­ZµÚ¼ys¥J•̃}÷ƯæÍ›W«Víw̃÷ôôôTbcö7^ÿ₫ư?øàƒ7î̃½{óæÍ‹-  ñññwóđđ0¾:LÉÊ•+ûôéăææ¶páÂîƯ»+wLñññqrrºÿ¾¸ñÁƒ̣çÏo¡ 2 G"̉¢Z¨¥Ä‡qØ,m6j¤Æs禺ëơëjlújƒ °c‡1;Ιƒ̃,ÊƯ¦ Ö®5ĂÁ¿ĂwŸàĆ ïx`“̉½Ø+;…9sæơë×ÊƯ¾/^œ={6(((44tóæÍ3gÎ4h²s*3c§wÿTDDD\¼x±xñâ={ö́Ù³g\\ܼyó¸`Á‚Ï?ÿ\ÜÓôGƠ6lèܹó‡~¸`Á‚D¡qqq)UªỖ½ ₫)ÿ₫ûoNWºtiT,‰Hs–c¹ë «ó̀¿-Î\¼xª»ƯÍU86l¨çÎáMÿ³¤ºuS Çuë̀sđ¨ˆ¸ˆ‹EQÔ´&)Ưîß¿?cÆŒ#F^N4)22²eË–†‰¬K–,©́¹nƯºçÏŸ§t‡/½û§",,¬FcÆŒ™4i''§   ϲ&>ªÖëơ#FŒ(X°à²eËœÓL¬W¯^ƒ Ú¸qcÓ¦MÜ»woƯºu 4đóó3ß?e G"̉œÎè¬Äq0ÿôÅÙ²¥µ‡8cNåÊæ9ê{ïA±m[*…£…œÀ ¥Ûh1ă(ëóơơ7nÜ₫ưûË•+wàÀ;vT«V­K—.7nÜpuuíƠ«WÇóçÏàÀ]»våÎ;44tË–-Ä[å€àààtíŸ+–)SfêÔ©—/_.S¦LXXØ–-[¼¼¼Ú·oŸhOUŸ={öܹs%K–́Ù³g¢/µjƠªY³f‰6vëÖíḈرcÿ₫ư===—,Y51µ)ûÉJ8#iËP¨ĂNŵOLôóÏjœö§Ï6 ,î,>bK«}ñÎÎ… æ9~9”Ë u@ĐZ˜ă8¥G•*Uv́ØñøñăY³f]¿~}ذa»wïvrr*T¨ĐæÍ› (0{ö́3fdË–íÔ©SS¦L‰ŒŒœ5kV̉v̉»*2gμeË–®]»îß¿ÿ‹/¾Ø³gOƒ öíÛgö{/^pö́Ù%Iœ:u*é₫îîî!!!mÛ¶]·nƯôéÓ‹-Âơ©µ@gz_WJ$ ,,Lvv%<<œ'̀Hă×SÆÀŒwÅÁƠ«oM³UaÚa#ö6ú’*Íêt©OD~ễ¬‚̀0¶ZMÁ2—×́R¿¤¶økÖÏϯ|ụ̀É®Ël¯===wï̃mzSIµoß>44ôºØÙø²ÅoB³àG"̉ºPçæøŸ±e¥jÔ„´Ñ·ßVă_~1ç‘«¡‹Ódƒ…#iˆ¸¼̣·øÖ\ÍuZÙ²éygP9Oψ1–¶û•x ¦ÈN‡́ܽ{÷V¯^j–4ß8zôèêƠ«¯jëoA‘ˆ´"'r*ñR,5cËâ¼"iwp¼tIÍ5¤:ư­ +Œ¤¾ÖLºơC?%n„t ¤ S4jÔ¨Zµj¦·c[Μ9Ó®]»o¾1Ă<¬~ø¡]»v}r}ÍÏaû=XÆûäÙm^Ï0„•€:ĐØ¼Ưï̉×eq̃<ôï?̣åÓlߨK:{6>‰Ÿ§N¥~óóùs¸¹ÅÇ•+ăĐ!3^èéh}IËØÇÑx¼ăHD Vÿá?Z2™8äÙˆª1Ä;i ¬vuUăĂæ™]ơ=¾Wâ¼ÈkæÖ‰È~±p$"ùVcµ»Âµ4̀¹8„8MÊ ̀û`X$N;nÄŒ?ỵX*‘Pç̉»‹»×pÍRG""û‘ˆäk‡vJü Ï̀Ûxú:8ˆ¶Æ9ïÜ™æ.b¶i¬‘˜~¿A¦0 [㔉Èö±p$"Éæc¾—B)³·¿r¥‹ÓÜh_ß¾jœpƯ`3hâË8!ût‰È°p$"ÉÄA¾§qZv:‚ ̀ßfÖ¬{_D„ùs¹uüx Í"²;,‰H¦/ñ¥×DM³·/öW'¸Iѹsjܰ¡ùO8óûˆó·DF9ø;CẒ/üe₫ó%"û‘ˆd‹±J¼{Í̃~º;8cV̀;‰£XŒ;–æîbÎfZ à(q}Ô7ÿˆÈ¾¸ÈN€ˆ× Qâæhn‰CˆÙˆܤH¼EYÚœƒ»ă%‘çwRß]|Z>s&f̀0s:đ̀ƒ<÷pÏđr-Ö¶AóŸµÈNȱp$"if@­ƒ₫À=–±SÛ1KIÄI­·mĂgŸYöpF¸‹»Ê|àâCmΈcN¼l mNûO¶ˆª‰Hnè¦Äá#KBœÂƨçÔ0faó 1f¯ÎƠøøq‹$"ξ¾ ­wˆÈÖ°p$"9~ÆÏJü#~´Ä!ÄNâÔ6FqvNç,Å̉ƯœÅY%î‹ô^)"r ,‰H‚&h¢ÄCàhçŒ0i K ©6È‘#]»‹7l°TRƠQ]‰‡a˜¥CD6…#I°›•øk|m‰C<|¨Æâ¤6©ùCègY©’¥N¾BKµl‚}اÄßàÙé‘F±p$"kkŒÆJ\ơ,t”9sÔ¸eKẵó@›m,6¸¸m[5̉NY³fjlÄR…”ê¢ÿá–: Ù2Ddm[°E‰wÂRuĐôéj<|¸qïÙ¿_K™ñĂxƠƠ‡Â ˜²eËÔøk‹ÜŸ€»¸«Äă1̃R‡!"[ÆÂ‘ˆ¬J\"y ÆXî@Ï¥ÿ=Æ•q¦̀>pÀ˜wxx¨±Eç ª‹ºJ< Ó¬q5ˆÈ¦°p$"«çkœ„IV8b ñ‹0‹ë Z‡uJU£‰«Â(Ù鑿°p$"ëi µ{ßpùü8#¾ûN‡iyˆđ¿ÿ¹cÿ₫jüÏ?̀¨j)±8C;X8‘5­Á%₫ _Yî@bGÀ̉ÿ₫L™¬xUŒ"–¿–ëæàoü­ÄâDD`áHDVÓê(ƒ0ȢǺ~Ư´÷;ơ)¢Æ«VYöXUPE‰çb® -‘½aáHDV²Ë•x&fZç b½•†èh5>[‚¥Û7ÍATâ ;"̉Dd =ĐC‰?ÆÇ=–8y±ñ á8kqqF¾I|æ~ù²e „:¤hYö`Dd;¥p\»vm›6mkÔ¨1zôèG¥¾ttô÷ßߪU«ÀÀÀºuë4è‚qóôQ²ÄƠ¨çaE%ÎàØ¯ŸÑo“U87#¬ØÍÀ1Sâ>ècÙƒ‘ípˆÂqÆŒcǽtéR¥J•ÜÜÜÖ¯_ß»wï/^¤´lll×®]¿₫úëGƠªU+₫üÛ¶m{ÿư÷9"ûTˆlRi”VbñÖ£…=R9!±€Ë•˲)}(‘GœWh₫|Ë&ˆ„ÿj=ÑÓâÇ#"[`ÿ…cXXØ¢E‹|||¶nƯºhÑ¢mÛ¶ué̉åÔ©S_§üûêƠ«;Ö¨Q£;v|÷ƯwË–-ûé§ŸŒ;VöÙÙ¤38£Ä‹±ØjÇçÍN›5§T̀›WÎqÓă?ü§Ä?àÙé‘&Øá¸f͸¸¸ÁƒçÉ¿ ë¨Q£<<<¶lÙ—B×¢cÇèÚµ«‹‹‹aKµjƠJ–,yåÊ•‡Ê>!"3•¸5Z[úp7ªq::8ơÓ±Q#5N«Ç@%̃­Ö¼*D¤Mö_89rÄÉÉ)((HÙấ́\»v툈C˜”¯¯/±FÔëơ?vrrRJI"2̉LPâµXkéĂed‰j¹îƯ3~_kvspêR:ĐÈ„–ˆÈNØyá¨×ë/^¼èååååå%n/^¼8€ë)LơÖ´iÓ¬Y³~ùå—xñâÅ­[·ÆwăÆ6mÚ¸»»Ë>'"["È­k̀Aó·:}52gÎPùó[!ÏŒ©«.% D¶W¸: §pJö "É́ü₫YTTTll¬§§g¢íHxOQ°lÙ²nƯºuëÖMÙØ©S§Ñ£GyÜ€€€D[¶nåSŒ»qă†́́5¯g?u@ị̂đåá·ü1ư”(<<‡S̃ö¼\¹{éy#2tI y{;?x<•L_¿Nï3bg¦u Ä—«åPîr¸…çzƒ?ơæÅëi¢† ÊNA+́¼p4 vuuM´ƯÍÍ À“'O’}WddäÔ©SŸ?^ºté²eËFDD„††₫₫ûïU«VmĐ 1Ç “}êöÆÏÏÏôFHaë¹jC?øYá ¡¡júHÙ˜/_¾~ưú½~ưú·7wˆ(uÿà%΂,™‘±₫†éóÇj́ă“wC›+W¶Bª›ÊÀ¨±º9¨ƒ:Jk’ˆ´ÊÎ G>>>†JQaèä“ÜKDD€"I¸ơ÷÷pÿ₫}Ù'Dd*¢¢[çv£I¬?™¢xÇ1£GOÏ€l“¬ÄJ%~o[é¨D¤=ö_8Ö«W/66vï̃½Ê½^’3gÎ@q†7)ấ́|á½^/n7ôo(Z´΅"²·q[|YE¬pĐÓ§Ơ¸Gz—§±₫ºP:§³p,^ÜÚɶC;%₫[™‡ˆ́ưmÚ´qrr3g¡_#€E‹=xđàƒ>È”)“aËóçÏĂĂĂ ƒÎ²eËV»ví«W¯~÷ƯwÊ á.\˜7o^æ̀™ƒƒƒeŸ‘ €Úm|?¬t3Óđ'ÎwhŒ^®Ú@́æøƒµ–tùß(ñ{xÏJG%"Ñ%º¯f—~üñÇiÓ¦åÏŸ¿V­ZW¯^=xđ`©R¥~üñGeÍ›7úé§ÅÛ¸q#€´nƯúöíÛE)UªTDDÄ?ÿü7v́Ø;¦y¸€€ª6¯đđp4#+\OÔÛizXé—Œx /Ư¿ØLzsF/© Ũ93^½J÷‘3Æÿ¬ü©7/^O³sØÏzû¿ă {÷î_ưµŸŸßæÍ›>|Ø©S§¥K—&ÜQáíí½yóæ>}ú¸ººîÙ³çÆuêÔY³f1U#•C9%‹¹²ÓI§w̃‘AúDG[ïXMÑT‰û¢¯́S'" ⣕9́_!–Ă¿•ÍË̉×SÊíÆ¨((¶6j„͛ӛô›œ À́Ùé=z/i¹r8ơf-–t₫*vwÇÓ§{«I¬öËŸzóâơ4;‡ư¬wˆ;Dd5â(ÿáV;®X́ ˜Î7ÿ£Îd¥I ÄỷIćJ|Ç­yh“FÆhÄ¥Ké}‡x¦bO+8ˆƒJ,ξDDv…#™ÁøO‰³ ‹•₫çŸj́îñvàáaå̀MѤ‰[s| €*¨¢ÄñPö• "ëaáHDf ̃vûÀÙkÎÅc=»Y±₫Ăöñ£×B-kˆ$aáHD¦C\â”—âBƠVđP¸áƠªUúßÿø±[s.ÓJƠܹ­¯â#|¤Ä¡•–Y G"2•8ZâWüj壋OiÅÙ %J±₫GñˆÏ¥÷Ưb7Ç]»¬ûp Wâ(aíĂ‘ ,‰ÈTÏñ\‰[¢¥•.ÁÁé¿v Çô¬–5 ¸ÁWøJ‰Ăàˆk¯9 MÑÑÑQQQ²³ ¢ÔtEW%n… <*6UD„iï˵lÙ¬½X8¦*Çœ9Ơø÷ß­;€2(£Ä ±PBDd].²HÆ… æÍ›wâĉ;wîÄÅÅåÍ›·L™2,Q‚Bˆ4g)–*ñz¬—˜I×|‘;óvj,krü‹uĐâ¾èÛ}dgDD–¥¹;‹/ñ¼ùæÍ›oƯº•)S¦́ٳ߹sgçÎ-[¶ü₫ûïegGD ̀Å\%n¦ÖO`Ă5ÎHGXwî́Ôe¨plÑBÅq>Vă/%>†c2 "+̉VáxàÀo¾ùF§Óué̉eçÎ'O<~üxHHHÏ=œœ¾ưöÛ¶³*‘#µXÛ€ &´”AâÄ×¶:ơ·"ưƒc »›#€£8ªÄQQBDdEÚ*ùå—¸¸¸áÇ3¦`Á‚:@̃¼y‡>zô踸¸eË–ÉΑˆâÁ%΃>>ÎÎÎÉ$êääëë«×óÏY"-*ˆ‚Ö?èÍ›jÜ¡C†&‘‘U8|Ü‚®}â2å‡pHr6DdI*u:]ö́Ù¯_¿₫8¹̃‘‘‘W®\)[¶¬́4‰*¡’¯Ă:)9˜¡ƒ£ÜI“÷̣å 4 û¦MrNb(†ªùÀÖ{›Q4T8:;;·jƠ*..näÈ‘¯^½¿=jÔ(N×£GÙiđÙôø@JâXª{@*·+S&CM˜L\ç0C«ÅÂQJ7G_ăk5HJ‚ˆ,O[ó8vèĐáôéÓ{ö́©_¿₫|àçç§ÓéÂĂĂươ×;wî4nÜøÙ³g{ö́Qö÷÷÷/T΅¬‰N?ôSâ!+çÏMnB S'&ȧS§ô65«oƯ*툃²Ó1ŸR×Ê{ûmœ:e®Æîß—y*ó0O;ƠÍÿÄŸ2³!"s“\8~ñÅ&Nœh( /SÇ‘H¢ûP«’̣(/+GÔ¸M›Œ¶ræŒWª”ÑV̀¡R%Ó Ç¼yqç̀“0ø+…£”åˉȢ$ Lë=lØ0Ù„ˆRÔ­•x&fJ̀dÁ5îÛ7£­Q×Ú–_8₫đ¦çhxxÆ!́Û&ÄÇ¡¡¨YSÚÙ´C»Uˆïqù ¾ç'"[§­éx́ƒĂÑ·N$a^¾™…@á¸víM&NdÀ̀kr+€éߢǡB…øxơj|øaÚ¸{yóÆÇ;bùrSNÈT¦«đ§̃¼x=ÍÎa?ë98†ˆŒ2ê:-­ĐJn2JƠhñ£\ï¼czV>>jlDwqẸ̈…¯‹‹ ‘­ÓÖt<¶nƯúË/¿\»v-¥[¡!!!²s$rDŸà%^ơ²Ó‰çáa›µS8ÚC™u ˆ!®ª1ˆ‘™‡¶ ÇíÛ·4HvD”Ø)¨C7r!—Üd₫ùG3̃ÁR—XI… ålØ·Ov₫€Â(¬Ä±ˆ•™¶ Çü@çÎ{ơêå#>w!"©45 yFÆh– +p÷í«?ÿŒ®]eÇR,í‚.†¸êư…¿dfCDf¢­>/^̀—/ßèÑ£Y5i²€¢¼ÔçâÅj\¤ˆ9Z´—A:©±X^KÑ•Xâ CDd^Ú*=<<)â䤭¬ˆ\C4TâÅXlBKZ%wöosÿµ|P³³÷@%₫iOÓKDÚ§­íí·ß>₫Çç²Ó!"3ĐVáØ¥K—GÍ™3Gv"Do¦)ñ‡ÈÈü‚æµf›ÔÁQ;³'Í!**ĂÍt颯·nÉ>) ̣)ñ^́•™J̣à˜$Ú̉±cÇ9sæàHG"»"¹pl̃¼¹́+@D)ªJPÙé˜•ÖæÙööVc3ÍL~ÿ¾́“,Ç̣Nˆï]ơwb§́Œˆ(ă$Ó§O—}ˆ(Eâ,<₫đ—?VăÖ­MkëömÙg“2Ó G__m\GtT GÎæHdë´58&)½^ÿ×_ưüóÏÇ7½5"2^ ´Pâ=+ ! ûú[nÊ»Å+³WĂQ”™À‘p¸ÙÍ»vízÿư÷gÏmx9v́Ø~ưúM<¹]»v&LàL=DVó₫Pâ>è#; aáX¯™Í–Möi™™X8JŸÜàgü¬Äâp+"²9Ú*9̉¯_¿sçÎÅÅÅ8sæ̀ºuë<<<:tèP @•+WîÚÅ刬a.æ*ñø@v:ñ®^µ@£ZRm Ó™¥™ÿüó~øA§Óư¢ß‚Dvm(ñ:¬“NbækK;…£v2±qp•8èˆl‹¶ ÇóçÏçÍ›·K—.™2epèĐ¡̀™3תU @‘"Ẽzë­Ë—/ËΑÈ₫Çy%βӉ÷Ï?jljG±Ï´vÊ5óeR³¦́sIB\%º""Û¢­ÂññăÇ̃o椈‰‰9sæL™2e”9À³gÏ₫àÁÙ9Ù¿Pë}Ø';x棵ٿ Ä%³Ï3¥%ñú,Y"û¼̃‡X‰C¯ˆÈ†h«p̀—/ß7bcc;v́åË—UªT1|)..îÆ¹sç–#‘ư»uÀ²(+;x‹ƠuQ¤ˆim‰…£¿üi†â%Ü;ª±FÆÇ á+qèÙm•*Uzüøñ́Ù³õ¼iX]»vmĂ—~üñLJ-ZTvDv®Ê)ñ×øZv:–¡µÙ¿ J—Vc3ÍàĐ!Ùç%Zu@ÙéQºi«ṕƯ»·««ëüùóëÖ­{øđá²eËøđĂ S…wï̃]vDvîN)ñP •N2|L_ÄîÄ Ù'‘ó"´Z‰•²Ó!¢tÓVá˜?₫Ơ«WåÍ›·fÍ3gÎÔétuêÔªU«ÊΑÈ-Çr%.²ÓQưú«Oœ(;+0¹ṕÜYï̃•}:‚¬ÈªÄ—ÁñD6F̣’ƒI+VláÂ…‰6.[¶̀×××ÉI[e.‘ưé µÜ8‹³²ÓQ-Z¤Æ½{ËÎÆ bcMl wo,[/Z„qădŸÑp †¸jƯÄMÙQ:h«»qăÆµk×’nÏŸ??«F"K‹@„́R´m››il@@€́3³qF±́–®<Ê+ñ-Ü’¥¶ª±Æ7hĐ€sîIQ µ”x7vËNÇ*´3Aá–hơÆ Ùç•Đ—øR‰{¢§́tˆ(´U8+V ÀùóçMn‰ˆ̉M|6„ Ùé¨bbÔ¸qc“›»%Üå̉ZáhÖ|̀¹¾YÆh%₫?ÈN‡ˆ̉A[…ă¸qă²eË6₫ü—/_Ê΅ȱ Ă0%á²ÓIÀ̀µ9ûw̉|=2±1ñZ<)ûÔWü¿ĐY•¶ÇäÉ“ç›o¾?~|óæÍ›7o^¨P!ww÷DûÉN“È}ƒo”ø+|%;ÄÂñư÷MnNœÄQË…ă‘#x÷]SëƯÓ§ÇÇ‹aî\Ùg'Ø‹½Noî\|€ôĐËΈˆŒ¢­Â188ØjæÙ ÷í“}v)h†fJü~¥H[…cÛ¶mu:ƯĐ¡COŸ>-n?}úôàÁƒ´hÑBvDvBüx…Q²ÓICs­ƒxö¬́SIí—¹f̣'₫TbñO"̉m5jÔèÙ³çµk×ZµjƠ¨Q#;wîlÚ´iëÖ­¯\¹̉²eË÷̃{OvDö@| X5d§“¼Ơر¦₫V?n–f>üP?–}R)p>ÄND¤)Ú* 6lÁ‚~~~—/_póæÍ .äÊ•kÊ”)S¦8̀Ó4" ‡ hsX yÍsÓø4àâ÷a-Ô’%O[kU?zôẹ̀åËÑÑÑ₫₫₫>>>²“"²1ºñ¥“ö₫€4ذA³d1wëo¿-ûü¬§^=5^´#FÈN(9âï ¸ ;"JF?0ä̀™³D‰*T`ƠHd^m}Û*ñøCv:’hs.ƒâÅ-×ö¥K²Ï.eb_ÛI^“d§CDÉĐbáxêÔ©>}úÔ¬Yów̃)W®\ưúơGŒaâ k×®mÓ¦M```5Fm̀²×ÿ₫ûƒƒ+UªÔ©S§C‡ɾ0Dæq<‹Ús®9ËN'mơ뛩¡đp5ÖráhǛËÖÄÑư?zü(;"J†æ ÇY³fµiÓfÏ=÷ïßÏ’%KÖ¬Y¯_¿₫Ç4nÜxåÊ•ksÆŒcǽtéR¥J•ÜÜÜÖ¯_ß»wïÔ—½̃µkWûöíwíÚ•'OÀÀÀăÇwé̉e×®]²/‘©¾Ä—JÜ ½d§“¢Å‹ƠØlµ?ûw̉Ünß6K“â5 “}‚)çư ÉN‡ˆ’ĐkIHHH@@@É’%'MtíÚµ¸¸8½^ëÖ­iÓ¦•*UªT©RÇOo›çÎ+Q¢D­Zµî̃½kØ2ỉ¤âÅ‹ñÅ)½åñăÇ+V,W®ÜÑ£G [NÙ餿Ÿ,ĐèÚµ²OË8åË«ṇ̃åfiRœÓLMZ„6×L'"…¶ ÇÓ§OgÉ’¥k×®I¿Ô©S§lÙ²%»¨Lê9âää¤lqvv®]»vDDıcÇ’}Ëßÿ­ÓéM6₫ƠW_………•+WNöE"Ê8qqêMØ$;«»_vÆÉ]Ÿ>5{óÏÉ>ÁTÍÁ%~œ»—H[´U8È›7¯‹K2“999åÏŸ?***]­éơú‹/zyyyyy‰Û‹/àúơëɾë¿ÿ₫Ë™3g̃¼y=úư÷ßOŸ>}Æ ©÷‰$² ‘ˆTậ(/;Ư»§Æ:™¯ƯçÏeŸYú™oñó,ömyưÑ_‰·c»́tˆ(mÍă¸}ûöÈÈHww÷D_z₫üyxxxƠªUÓƠ`TTTll¬§§g¢í>|˜ô-ÑÑÑOŸ>-Z´è„ Äá8 œ9sfă> H´eëÖ­R.©}¸qă†́́Á Üƒà‹nRs–4g'Ó7kv;<ü¥Yơâđps¾Ù¿EƠT#"̀•j›6_UW­º]¥y®ª%4ËÓlƒkü4"&t́jZ{Äߢ¦jذ¡́´B[…c›6m¶mÛöÙgŸÍ5K¼ï;zôèØØØzâ<¶F0Ü&tuuM´ƯÍÍ À“'O’¾åéÓ§.^¼xÿ₫ưiÓ¦½|ùrƯºusçÎ4hĐÆ³eË–æqĂ´Ử‡¨W¯^XXØ̃½{›4ibØ¢×ëCBBræ̀˜́[‚ƒƒ₫ùçóçÏVŒ5̀ƯS¢D ¹WŒ(ÄYxv`‡́t̉°h‘;ná(̃=r•+›¥Ỡ½ƠÂqÍ|ø¡́ÓLƠøb<Æâ¾è» dgDDÚ›ḈÚ´iăää4gΜgoæ.[´hу>øàƒL™2¶†l+ƒÎZ¶l `́رʰëÿư÷‡~đđđhĐ ́"J·SP'@­s-ül)bá(üíf2q½ÁܹeŸeZÄ̉Ö|3̣tï®ÆâuÖ¦q§Ä ±Pv:DH¿ă˜¬‡̃¸qC¯×'ûƠôNÁ/_¾áÇO›6­yóæµjƠºzơêÁƒK—.Ư«—ºJoHHȧŸ~Z¬X±7(Y²ä!C¾ưöÛ† V¬X1**êÈ‘#:îË/¿̀•KĂ#Q‰’3£•x0ËN'mÑÑ–i×|å—5,hé̀ÿ²…… « Ê!Äß#ƯˆMÑTvFDN[…ă£G†ºoß¾TöÉÀL7Ư»wÏ;÷ï¿ÿ¾yóf__ßN: <Ø0#OJúôéăíí½té̉ưû÷ç̀™³^½z,V¬˜́+D”nS0E‰g`†́t̉Á̀?p—.É>¡Œ²­’׬B’ñ3]4C3=ô¦µGD¦̉VáøÍ7ß́Û·ÏÙÙ¹L™29sæÔ™©?8€fÍ5kÖ,¥¯6nܸqăÆ‰6~đÁ|đ́KBd’ưدÄÅ`ù́z`³ƒ£M;sÆŒ5o?ÿŒ_¾Ä›ùÇ4* ²ÈNˆĐVáh¨—/_₫Î;ïÈÎ…ÈÔDM%₫ËN'm–Coôî­‹á“Od'”–ơXÿâÿ†/çÀ9шd̉Öà˜§OŸ–/_U#‘¹ˆọ̈"¯́t̉¶n'YyÔL´?‰£%½™^°…ñ1Z¡•‡‹rI¦­Â±T©RIWy!¢Œiµ{Æb,–fh.ƒ2e,}„Ó§eŸ£qºC .öÙ%"ëÓVáøî»ï;w.ơÁ1Dd¤Ø¨Ä=ĐCv:éS³¦émΟWc[¹ăh+®åư€”Xœ%€ˆ¬O[};v́xæ̀™¾}ûvé̉¥bÅ®®®I÷©l¦‰p‰́Û|̀WbñaŸ–-_®Æfîàh[³+y₫ôS||í 2WĂ½{«©¯^Eá²ÏÔy‘÷îâ“8Yé›—ˆ̀E[…ăăÇ/^¼½xñâÅ‹“²–éxˆP?ôSâơX/;£ˆ]î:w6kÓbáX¶¬́5N¢9À-S8.Z„/¿”}¦FØ‹½Ê´µP+‘²3"rPÚ*gΜỵäI—w̃y'gΜ²Ó!²UWqU‰³!›́tŒµw¯Å—±‰V4ß́`*¨ñÂ…¶Q8EQ%~§²Ó!r\Ú*>œ9sæƠ«W—*UJv.D6¬j)±M̀Âcq¶>‡¶Ạ̊ˆ}jF›…Yƒ0È·C»UX%;#"G¤¡Á1111áááåÊ•cƠHd¢ë¸®ÄacA"…g­[›»uK­ch-æ.}|dŸQú}uÎÉƠX-;"¥¡Â1...S¦LO<‘‘m닾Jü¾±8ơwjùá¬x…’}vFkˆ†J¼Ke§Cäˆ4T8fΜ¹Y³fçÏŸßµk—́\ˆlØB,Tâq';c‰…cƒ;L²OTÄÂÑ&¦7Ø‚-JÜ]e§C䈴ƠDZ{÷îçÏŸ0`@Û¶mS'((HvDÚơ'₫T⪨*;t¸pÁ*‡±•¹x rçÆưû–hX¬Ÿü?üñ¦$z€̃đ–‘cÑVáØäÍbX¿ụ̈Ë/¿ü’́>œ‡(ïă}%̃ ËR¶ ̀™ÍƯ¢Ø}̉¶ DZe‹éÍØ“„ÔAC\ µÎâ¬́Œˆ‹¶ ÇæÍ›ËNȆ½À ñ¥‹Æ~ÀS±{·›¿ƒ£-Î₫­d«¯^!K3¶]®N”}‚éWµ•øÎÉN‡Èáhëseúôé²S ²aARâ?đ‡́t̉a£º8"̀ßE,me½AƒDs€›uÆ€µpüưw´h!ûd6gc¶!₫ŸÎÀ Ù9 =~ü844tíÚµ†u« gg5̃¶Mö™¦S •XjMD–¦­Âñơë×ưúơ[¶l™»»{Ë–-•íỵäÙ½{w»ví^¼xaBóDöl&)ñ̀‘N½ơ–½~Ưô6ä³Ự×öaŸ7FcÙé9m .Óôë‡~J<ăe§Cä´U8–*UêöíÛ§NJú¥³gÏ̃¼y³dÉ’²s$̉œØ©ÄĐIv:W¿¾ưï?5¶ÅÂÑÂOuNqk›‹¹Jü?üOv:DA[…cÛ¶mu:ƯĐ¡COŸ>-n?}úôàÁƒ´°¡9j‰¬b:Ôió;£³́t̉M|Bj‘‘1âô‡¶X89_¼höæÅkđ÷®m(¢Jls½{‰l‘¶ Ç5jốÙóÚµk­ZµjÔ¨€;w6mÚ´uëÖW®\iÙ²å{ï½';G"mJ¼¶7í€8&ĂüS#á,6²O7ư-cnbáhsƯ‘p^Z¨%;"û§­ÂÀ°aĂ,Xàççwụ̀e7õ¼páB®\¹¦L™2eÊÙÙiËI¨‹ ûÀÇ„–¤9q°ơéË•Scs/ D 5¶ÅÂÑæ†‚Ù:-NNüèѣ˗/GGGûûûûøØä'"‘¥U‚z;Ïé’gë…£Ï%&Fö fÈ2,S:iFá«àäD¤¹;œ9sV¨P¡Zµj¬‰Ṛ¯•X́́e+ÂĂƠ¸W/ÙÙhŸe G[s(»†k²Ó!²s’ï8~óÍ7é}ËĐ¡CåæL¤Í¡®ûÑ=d§“cg^¾´D«}ú`đàøxăF4m*û4Ó¯*ªÄAC<“Gc´́Œˆ́–N¯×K<|@úûª‡……ILØÈ“̉~’¶%<<ÜÏÏOv£ƒN‰ơHDzv®§‡"#ßœ‚…~é̃\%\ºd¡±́%Ơ©ÿĐ–¸L¯^!kÖø¸IlÜh©óH—ô^̉ ÿ88íüÔÛ ‡ư¬×DG''§ *T©RÅ… ‚gf(q[´•N)U£5XxBD Ê—·nY®yq*ÇM›dŸlF‰½à@5T“‘}’\¨µoß~Ç<8räÈ… êׯ߰aĂjƠª±‚$JƯ QâUX%;S.l™v|ˆ\¹âăiÓ0b„I­¥@ùç(UJkf́’rˆLJ4̣SoOö³^₫Çd•-[vøđá;wîüí·ßúöí›;wî 6 0 jƠª²S#’¬!*ñøAv:Úf³{yYóŒÎœ‘}¾&èu:Đ ˜ ;";¤ÑÂQQªT©O>ùdܸqåË—đâÅ ÙI¶ Û”¸;ºËNÇ ‚‚,Öô;²OÎÜ,°ê ³³́S3‡EX¤Ä1Qv:DvH»ƒ—ccc8°eË–;v‰ư­ZÉ>k Æà™˜iˆ‡`È·øVvFDvB}ăââ®^½*; "Moœ|ˆe§c±p,_̃b‡ÿ-`Ă7h„…ï* P ǹsm»pœJá83X8™‹äÂqăÆ²¯‘ ơIë` –©¬´²O0lF‘"j|đ …îÓkùˆ+‰Û¨*¨rñƯÄ^Dd É…c±bÅd_"03’m8’×ü®]“}~–aO±%ÄAeÂñ!çå!2 C!̉ºµX«ÄUPEv:¦Z-ôÏ´`G;&-2·ƠøæMÙgjV×q]v Dö€…#‘Ö‰=í`ˆ¨ØÁ±O«̉ÍMöIÛ ±”Wæ·]Ê£j•QYv:Dö€…#‘¦Ùßm’ĐP«̉Ö‡TdÍj…ƒT­ªÆb‰o£Äbñ́nár"X8iøÉ'̃>¡4DE©±}V? +Î8nAÊØj­`Ëʼn´…#‘¦‰·ÍàYÛ•+jüÑG–<’8‚D¼f»ÄÂ1:ÚrDZ³!‹ƒ0H‰Ăo²Ó!²y,‰´K¼A"̃8±]b·¹₫ư-y${ưÛ@,-9°ZüwùưwÙgmmÑV‰§cº́tˆl›äÂ1((èeÂY 00pút₫TÅoˆ7Nl—ØmÎ2“X¿!–V²ÏÛẠ̈÷ ÇHÙÙø«°J‰G`„́tˆl›äÂñÙ³g¼ùfÖ‡¨¨¨×V˜Hë¦bª·C;Ùé˜ÇË—Ö:’ưMvèím³svVă;eŸµ™B!%Aˆ́tˆl˜ä À«W¯¾mÛ¶ºuëfÏƯ°eÅk×®Må-Ç—›3‘u|†Ï”x%VÊNÇ̀J•²đ>”}–de±…mÇö(aˆƒÄÉÀ‰2ḶÇÏ?ÿ¼I“&¹sç–}ˆ´e ¶(qq—y¬[§Æ–íàh÷îƯ³hó:¨ñíÛ²OÖ ¾|‚'²3"²U’ï8æÊ•ëÛoƠµç:v́8zôhÉW…H¶Æh¬ÄÇa'wÙÅưúYë¨yóÊ>oÛÓ¿?~ù%>3_~);!sØ ĐÀ"đ2,¸‘ÓÖ¨ê=zTµ‰3ˆLp ṇdGvÙ™Gˆ”®eö1¤Ú@́æhIƠ««±}ŒPơ•8á²Ó!²U’ï8&2bDüx·;wîœ={öêƠ«¯_¿ö÷÷/Y²d¾|ùdgGd%Tâ}Ø';$>ɵ§Â±Z5lØ`åc>±£‡º_ăëafˆ[¡Ơ¯øUvFD¶G[…#€GÍ={ƠªU±±±ÊFggç¶mÛ<ØĂĂCv‚Dww•¸:ª›Đ’†\–Ń̉ų¿Ù¿•sQ LJáåe¹C½ơ.]’}¾æ6C•‘“eŒ¶UÇÆÆ~üñÇ+V¬pqqyï½÷z÷îưñÇ7jÔ(S¦L¿ụ̈KŸ>}Äj’È.5DC%‡y²Ó1±ƒ£8S Eˆ…£ƯqLö-@½ô矲OÜ|:¡“/d§Cd{´U8.Y²äøñăåË—ß¹sçwß}7tèĐÁƒÏœ9sçÎÇ_²d‰́‰,k¶)ñÇøXv:f#v•«TÉÂçÇvÑÜs•Œ³Öà°ÇiÀ –a™Ïe§Cd{´U8îƯ»W§ÓÍœ93O<âöܹsÏ5ËÉÉéï¿ÿ–#‘Â(%î̃²Ó1§çÏ­x0{æ0kV«c¦Lj¼}»́7«²(«ÄàÙéÙmçÎ+\¸°¯¯ỏ/ùøø¼ơÖ[gÏ•#‘MĂ4%^ˆ…²Ó±ˆ€ÓÛHKt´́³´< ßq´cÇpL‰[ …́tˆlŒ¶ Ç,Y²¼xñ"¥¯¾xñ"[¶l²s$²qy˜*¨";súU½jñẬ·pÛ ë\̃½›ñv´Æ%á¨Đ«¸*;#"[¢­Â±dÉ’wï̃MvQÁÿ₫ûïÆ%J”#‘¥t€º^ÇAØƠư¤=ƠتkÆ+&ûÔm˜ø/Ơºµ́l̀ê(*±üd§CdK´U86õÀ'Ÿ|’¨/chhè€4kÖLvDq'e§`A©±NgÅÛÓ\<EXíP5kªñq;Y½(^TPb®[M”.Úoظqăßÿ½W¯^¾¾¾EpơêƠ[·nhÖ¬YÓ¦MeçHdåQ^‰/à‚́tlÙea)9{‹G9£+W¬X«m²¥XÚñVA•C8$;#"Û ­;¦N:eÊŸÛ·o8pàÀ·nƯÊ;÷äÉ“¿úê+ÙÙYÄs$øX.¢²32§ÿUă¾}-<{ÄÑ@¼‡zí¥V¶¬émhTgtVâĂ8,;"›¡­;t:]«V­Zµjuï̃½+W®èơú"EøøøÈ΋ȂÄùA¶`‹́t̀lÆ 5₫ôSËO,Ë——}öæ–h*ÇB…,z´O?E÷îññ? GÙ§oVă1^™¼#:®À ÙÙÍƯqTäÉ“§råÊUªTaƠHv/áJ,®c~úI‹·üñ́{q̣tËOWùÑGj,₫`&b¢ÿ‚_d§Cd´[89ˆwñ®ÏÆlÙ騾₫‘µXwóÓ§eŸ¯ˆSp!"c°p$’lv(ñØÛ$‡OŸªq£F²³±3‡¬1#GÙ§iIâăi.]Md G)×®]Û¦M›ÀÀÀ5jŒ=ú‘8;HZnƯºU¡B…áÇË> ²Cư¡Î•÷ >‘ù}û­[£ƒ#™›ø¯ö×_²³±€Ê¨¬ÄâJÖD”,‡(g̀˜1v́ØK—.UªTÉÍÍmưúơ½{÷Ne‰‘^¯9rä³gÏdŸÙ§y˜§Ä³0Kv:æ'vŒkĐÀºÇ ”}öö`È5¶¿nĉx” zˆ(%ö_8†……-Z´ÈÇÇgëÖ­‹-Ú¶m[—.]N:ơơ×_óö%K–>̀™È"f@ưnŒÆ²Ó±ˆ'OäÛ₫fÿ6(SÆGóđPăM›dŸ»exÁK‰Àª=G‰lF ÇLJ††®]»vß¾}û́³?₫øcé̉¥}úô1¾Á¨¨¨ØØXOOÏDÛ=<<<|ø0¥78qâûï¿ïÔ©SơêƠO§ú²€€€D[¶nƯ*çÚ…7nÈNÁ̀₫Ị́¯r#³>óÍ+7­yt«]Ï“'ư”8<<Ü„–ŒUàï¿3Y÷ˆVưÍU¹¬O·ol麻ˆ?æ¼y6̀ÖÊ?ơQđÍ)â!Zó›Ç:́ï·¨•5lhoK3d˜¶ ÇÇ;;;O<9{ö́âvggçñăÇïØ±cÛ¶mé* w(]]]mwssđ$…~û/^¼1bDÁ‚‡± ă“3óóó3½íđ‡¿Ÿ×/́WØÊ XùzfÏn­# Ÿ÷V>G)ߢ9NŸÎaơăZíL­|IWcu[´5ÄMüœ5ºX“ưµ²¤ëIï9m=ª>{ö¬ŸŸŸ··w̉/¹¹¹ùûû_½z5] zzzêtº¨¨¨DÛ ÓëxˆĂÓ¦M»qăÆW_}•-[6Ù—„́Đu$è#QÖ®­cÏ5æ –̣ßÖ9N:j#û¬-ăC|¨ÄgqVv:D¥­ÂÑĂĂăùóç)}ơÑ£G9̉¹ˆ‹‹‹‡‡G̉;‹‘‘‘”qÖ¢Ă‡¯\¹²OŸ>åÊ•“}=È>@ư;UœCÎΈá$.Úzœbë¡›#Î¥Zue§C¤EÚ*K•*uûöíS§N%ửÙ³gõ¼Y2ưSzøøøDDD*E…¡ÿỎư/\¸`̃¼yo´jƠ ÀŸ₫Đ´iSÙ‰l[4¢_@ă%®Zag₫üSså²úáíuHµ$￯Æv\8«7íÆnÙéi‘¶ ǶmÛêtº¡C‡&rúôéÁƒhÑ¢EzÛ¬W¯^lĺ̃½{•-z½>$$$gΜÉ-,Q¸pá& Ơ¬Y@¾|ù4iR»vmÙ‰l›x»ñOüiBK”„83«}R§r¼}[öé[̉hŒVâöh/;"ÍÑÖÓœ5jốÙóûï¿oƠª•¿¿?€;wîß¿ÿ̉¥Kqqq-[¶|ï½÷̉Ûf›6m,X0gΜ:uêÆÄ,Z´èÁƒ={ö̀”)~üåóçÏïƯ»—)S¦ Ô¬YÓP)*NŸ>Z±bÅéӧ˾Bdó®à7C3ÙéX8&µS'kUœ‹Ç¾gÉ®ZƠ:ñˆÁ•+²OỤ̈¾Ä—“1ٯª•X);#"mÑÖGÆ [°`ŸŸßåË—ܼyóÂ… ¹rå2eÊ”)S2Đ`¾|ù†~ụ̀åæÍ›₫ùçƯºu›1cFé̉¥{ ÓÊ…„„4lذoß¾²Ḯ\U¨Ờ÷ø^v:$§ƒ£#̀₫ố±Î1ÅÇ5kd_KêJ<ƒe§C¤-Úºăhüèѣ˗/GGGûûû'ÛÑxƯ»wÏ;÷ï¿ÿ¾yóf__ßN: <Øp÷‘ÈÄ¡0=ÑSv:4{¶¿óµ*̃q̀›Wö5°$ñ~ê¨TÉ Çüä Ϙ?4©5-[ŒÅ?àC< ³fb¦́Œˆ4D‹…#€ÇŸ>}úöíÛụ̀åóññyđàA²sô¯Y³fÍ¥øX°qăÆ7Né«¥K—漌dº÷¡/˜„I²Ó±Gbáhß JpÖŸ|’ñ¦2ÄêÏÉ­­ (ËÇOÅÔQà³Dñ4÷¨Ú́kUi„8f ÆÈNÇ‚Ä1*µjYñÀ·nÉ>u¶m“ÚˆJü>“‘†h«p4ûZƠDÑ]•¸:ÈNDz¦NUcûîj¨ Vü‹Źu ̀TaŸÄ™ù`́tˆ´B[…£²VơÖ­[§ >kÖ¬yÿư÷¯\¹²téRÙ9eÄR¨ßº+°Bv:–%Ó¦ÉÈÀ×Wö5°O[¶¨q†+Úq„ñ±́tˆ´B[…cêkUgÏ}Ê ê uÀ~/ô2¡%Ûđô©́ ‚‚dg`yùó[ÿ˜âb[bi¯Ê ŒÿŒŸe§C¤ Ú*;V5‘,ÄB%^„E²Ó±,½^­2Ø÷ qÅ©à`Ù—Ạ́áeûÿ*q7t“‘&h«p4ûZƠD̉‰óÀuFgÙéXœøó3k*Ø-,çE•xÇ[í°âlÿ-û"X^QUâƠX-;"ù´U8Zb­j"¹fa–‹=í•X8 #Ü,O,‹Íx;¶B|¿Ûz«*‹ ˆYíƠ\Pâvh';"ù´U8Zb­j"‰ÄéßÚ ́t¬áÙ3Ĩ³Gö©[—¿¿”sÏ[¡›#€( ÄàÙéI¦­ À-±V5‘DÓ *^»^¦ @Â+W¶î±Ÿ<‘}ọ̈Xñ£º‚+.o>+[ …zÓÚ#²mÚºă ¬UM$ËLPâfh–ñ†l‡ø3:kmXuoó¢ÆĐÍÑÎ̃P‡ln'÷ ‡¦Óë5úÇ“ת¶²€€.Qh^ááá~~~²³H7tJ¬©»–»9r¨5Œµµè̃\í·ßÆÉ“Ö=¶¤oQú fÍË}ÿ¾:/OÆ–z`­©Ÿúçxî7奦~œ¤©ëiö³^[woܸqíÚ5Cœ3gÎ *T«VͶªF"ƒ&h¢Ä Đ@v:V"­ƒcl¬;Â$åËK9¬ØÍqëVÙÁ*\á*s1WvFD̉h«plܸqƒ AÓ‰lÓhŒVâÆh,;ëIyƠ'ËÛ¿_öÙË ®¤eƯ;⺰̉Í€<¼àơ /7`ƒƒ̀–@$̉VáüæÉ˃fḮ>9ˆ‰lȨw̃6a“́t¬DR¥́lĐÁƒ²3p·q; ²âæhn‹Ă«‰L¤­Â±yóæ²S 2ɧP—̣mÖ²Ó±­̀à褭î7vlèP|óM|‚:ud'd™‘9?̣ßÄMĂË5Xó!>”‘UiwGÛå°s;Y Í@¦Ù¹E–¸nnê£j ¿T” ëƠĂN £¤}‹fΌׯăcë^÷Ôyỹ{Ïü¬µüSo?æ‰hùzÚ(‡ư¬ç_çDfÓ}•¸3:ËNǪdvp¼sGgHµ́ó»9ns°µT¢¨/ÁÙéY•¶UŸLy½''§9rxxx¸»»;;;ËΔ( ±P‰—b©́t¬GrGq@±£ Âö7³„̃¼‰üùe'ä.à‚rÓñ#|Ô ƯdgDd=Ú*?ü0íÎ"Ù²e«_¿~Ë–-kÔ¨!;_"UtQẫè-;«’9ƒ#(v´_ ‰¦ŕØÑ»9îÙăXE{Y”ưÿâù˜ÿ1>–‘•hëQuíÚµK—.mˆƯƯƯK—.]¶lYOOO:®bÅ%J”È”)Ó† ºwï¾hÑ"Ùù©–a™‹·X8¾ÿ¾ƠoƯ) µ¥jU‰×Á1gs48…SJÜưd§Cd=Ú*ÿ÷¿ÿƯ¼yÓÇÇgîܹ‡₫ơ×_×­[wèĐ¡… úúúfË–mưúơœ?~9fΜyóæMÙ)@+´RâÁ,;k‹’zø d_m°zá˜+—;Z7GU vËø _ÉN‡ÈJ´U8Î;÷ñăÇóæÍ«_¿¾N§[ ?~hhèܹsëÖ­ûùçŸÇÆÆ₫ơ×_²S&€ßđ›ÏÀ ÙéXUD„W¯.;Gvù²ơ)üv8¡Î9#e§Cd%Ú*;V @2eÊ$ưR‰% *ôÛoñÏUªTÀ;¤•PI‰ÅÙ¿Äøñjüå—RSññ‘|-Ï_¨ñÊ•²³±º÷¡ö̀ˆ²Ó!²m÷ïßO}^É'Oœ„’´à(*ñ(HœüZyóÔX̣đG›‹Ç _>‰;VÇËx;6êwü®Äs0Gv:DÖ ­Â±\¹r7õ<}út̉/?₫ÚµkÊĐ™#G(P €́”ÉÑåE^%^å²Óq<ÿ₫«ÆY8jæ¬/]’ 0@‰[ …́tˆ,N[…c³fÍ 0`ÿ₫ưâöÇüñÇz½¾iÓ¦z½~ß¾}ăÇwrrªU«–́”É¡=Àƒ»¸«¼́«N†¢{÷ªqŸ>22päI“ơ‰Ö?₫›?ç)‹É6³•øü!;"‹ÓÖ<Í›7?v́ØÊ•+?úè£|ụ̀.\X§Ó]»víÆ7nÜ®]»»wïvï̃@çι€É•¹•xöÈNG±ƒ£ØƯÍzÄI‹—|9¤H4•cụ̀V>₫ÿ₫‡Vo&7“&ɾ V7 Ó”Á1Páü#;#" ̉âZƠ[·n1cÆ•+W”-ỵäÅ+ ùƠ«mëzÚ‡ư¬×ÖGƒ† 6lØ0""âÊ•+ÑÑÑo½ơVÎÿ₫';đô©”Ă‹Å₫÷Ÿ́‹ C{¨OÀîă> G²c+#""&MÔ£G±cdž„„hÙ²eß¾}=z$;;¢xÍÑ\‰Ÿà‰́tä;8~̣‰́l’›ÿ•¬Ć̃*~W8”½PGù€S’ỬVáøúơë~ưú-[¶̀ƯƯ½eË–Êözô(G²s$‡µ3×tL—ĂÛ·OvÚ N†$>¾—äüyÙHƠ­•¸ ºÈN‡È̀´U8–*UêöíÛ§NJú¥³gÏ̃¼y³dÉ’²s$ÇơÏCưH{::Ô¸{wÙÙHü·±®%dŸ»6¬ÅZ%^†e²Ó!23mmÛ¶ƠétC‡=}ú´¸ưôéÓƒĐ¢E Ù9’ăÊ…\J¼ »d§#“8å&fp—.!IÄIyÄ.h ¦(qi”6¡%"ÍÑVáX£F={^»v­U«V5°sçΦM›¶nƯúÊ•+-[¶|ï½÷dçHjvˆ/ƒáÀcx;Ơ8_>ÙÙÀ±‡T¸È_¬M58Qv6RÂ(%>ƒ3O!gbv"KĐVá`ذa ,đóó»|ù2€›7o^¸p!W®\S¦L™2eÉÍeĐ»xW‰#iBKv%áüÖu÷®;̣j^MÚíJ́Y+r™Ÿü?R“ ~ôèÑåË—£££ưưư}|8 ?ÉÔM”¸Jå€C̉êÑCŧ“Ö&æÇà`ơ>đ͛ȟ_J­Zá×_ăăíÛñî»&µfÓ ør6fÄ@ÙI™æî8DGGç̀™³B… ƠªUcƠH̉mÆf%>Ó&´d~ÿ]‡•—Ç/¿¨qÍoÇ>xzªñÚµnÆDÇ«ñ́Ù/‡&D B‰?ôE9‰̀C+wcccÿüóÏ={öܸqăúơëO<ñđđ(X°`Á‚ƒ‚‚5kǽ́,;GrPbwÆÆh,;ù>”Á̃½¦·a?úơCÿ₫ññîƯ}:€’W¹páBzßR¬˜Ö:́ḷ–c5́u˜¤2p=5´`Œæ²4µ,‡rqq́˜FrAúÿ¡4tI-@́àx7­0+¸}_O)ö³^̣£jíWä8¸NŒ1$/CÆ;ÎÚuª¡!Îüvüg*Ùùª‰´ )ñø€ëĈ4´`L"yó̃YΠAjü믲³Ñ’ª¨ZêaŸăsÙ‹ŸDx§[±Uy¹ëdg¤-Z0ÀË—j̀‘1I•,);•øg'åIä:ԹѿÀ²Ó!2 G"¸Ă]‰·a›́t(UR:ñÈ\́ăxíÜ\´èøŸgAÙé……#9º ˜ ÄîpïÊÎH[æ̀QăZ*Î (f íÑ̉Àjj̀^—‰ŒÅX%Fô&l’QÚX8’£›ˆ‰JüOd§£9ªqh΅l ‰bHÓªWWc \«₫QăîƯeg£=âh*;¢´±p$‡&N1³e§CFˆŒ”íØ¼Yvđ÷Wă'dg£=îpç/̣²3"J Gr\s1W|9dg¤9ß}éAbl8åIDAT§ÆcÇf¼rdÁÁj,̃€$ƒŸñ³ŸÄÉĂ8,;#¢Ô°p$Ç%VœG-Yât*ÿû_ÆÛ±ˆfÍdg Ub¿B øñG5æÓêd]ƒ:t¨ ªÈN‡(5,ÉAyÂS‰Çƒ ¢Ù±—%‡T§DcW¦H5='EA§’m€²3"J GrDk°F́“.!…8 ŸVÖæ\<ÆĐØÀjơê©ñ‘#²³Ñ¤ÍP;¤îÄÎp„ËΈ(y,ɵE[%æCê” ¢Æ5RZ‹eP<²³Ñ*í?ư¤Æ}$;­újPø›Đ‘±p$‡#₫F₫ËN‡̉#,Lv¶ S&5ÖFáX° Ÿ>-;­zïTDE奸÷-‘v8Já¸víÚ6mÚÖ¨QcôèÑ=J}ÿ/^,Y²¤iÓ¦åË—¯U«V=öíÛ'û$È Vcµø hæÉÎH£¾ùFµr»‘2à₫}ÙÄ{W˜YÿàAÙÙhƠ¨̣×`Íe\–QbQ8Θ1ćر—.]ªT©’››Ûúơë{÷îưâÅ‹”ö‰‰éÖ­Û”)SîƯ»W­Zµ¢E‹:t¨{÷îsçÎMÏaI‹Ú¡ó!u*† Sc­tpU¬hzdM[m¤c8¦Äoá-Ùé%fÿ…cXXØ¢E‹|||¶nƯºhÑ¢mÛ¶ué̉åÔ©S_ưuJoY³f͉'*T¨2₫üŸ~úé·ß~óôôœ;wîÙ³geŸeœ3œ•X\́‹lĂ¥Kj̀‘1©{Ws+gæÏ¯Æü=@¾‡÷”—UQUvFD Øá¸f͸¸¸ÁƒçyÓ•~Ô¨Q[¶l‰‹‹Kö-[·n0f̀˜lÙ²¶+V¬oß¾±±±|`m»¾ÂWqPÿÅÿ­MK¨!Ó§«±†¦o»ëqÇÔ‰…µf†17l¨Æû÷ËÎFöb«¡ƯØ-;#"•ưGqrr R¶8;;×®];""âØ±cɾ%<<ÜƠƠµté̉âÆbŸ~ưº́¢ ‰‘J̀‡Ô©1B5´`ŒX8–//;mÓ̃ÀjđiuzD B‰ë¢®́tˆTv^8êơú‹/zyyyyy‰Û‹/”«À… ®Zµ*ÑÆÓ§O(($Û!®I½‹e§C²ǵ l‡ø›J3…£¯¯s||ê¼àƠ½•—¾đ5¡1"sr‘€eEEEÅÆÆz&Y€ËĂĂÀÇ“}W©R¥m9xđà¢E‹²dÉ̉¢E ch‹áñ7è7Lyû¸\ăà{ÅzƠ½V×Á'×Mưz.XàÄÿ¡5lØ£đđDzóç'ÄááÚú4ñ[ÔÔËuê”v.WPÏ=Ù ñÚµ·+V|™̉¼¤V6 £ù-2ÄwpgBÄ„®‘]3ܯ§‰=-›†¡Ó®®®‰¶»¹¹x̣äI-ÄÆÆ®X±â«¯¾ưæ›o¼½½9nÿ67??¿Œ½ñ­À åe„s2Ø’]Iåz~ơ•OŸÈ);Ù$̣çÏđ÷ƒåh0% æ¶z5||âă}££m#mYôĐ+OK&æ8!×SZăơ4Ẻơ¤wˆ„?ªöôôÔétQQQ‰¶?{ö oî;¦âĐ¡CÍ5ụ̂Ë/½½½øá‡ÆË>!J7/¨½v`‡́t(£. Ú( ;[°FˆËư¼~-;[đ%¾Tb±Ë ‘,v^8º¸¸xxx$½³ OÊK–EGGùå—]»v½uëÖÀ·lÙR½zuÙgCéVE•¸1×G}Ùi]§Nj,.'ß?¨ñüù²³±â¼í›7g¼sëÙSçq₫´ŒÆho¨Oº: ƒ́ŒÈÑÙyáÀÇÇ'""ÂP)* =~|”G& ÅÅÅ :té̉¥ơêƠÛ¾}û€”yyȆ̀ÇüKPg₫Û„M²3²+Ô§úèÖMv6"±p ”-èÑCÅ«'Û÷ß«qÿ₫²³±÷¡.ÿ³+Å%­‰¬Ï₫ ÇzơêÅÆÆîƯ»WÙ¢×ëCBBræ̀˜ÂÇϲe˶oß̃¡C‡¹sç¦rW’4®ú)1çß1Æ?ÂçÑÛoËÎ&‘»weg`kÄ?wưUv6dq<Ÿ¸5‘ơÙáØ¦M''§9sæú5X´hу>øàƒL™2¶<₫<<<Ü0èL¯×/_¾ª@¾|ù†>mÚ´æÍ›×ªUëêƠ«,]ºt¯^½”}BBB>ưôÓbÅmܸñ₫ưû×®]Ë–-[Ç“¶Ö²eËNb/0̉¤:¨£ÄåQ¾3:ËÎÈ6ܺ¥ÆEÈÎF$.Q'>¥ÔU©‚C‡d'‘Œ ü~]»Vv66b6fÏÁC¬‡~8†OÇtÓ$Êû/tï̃=wîÜ¿ÿ₫ûæÍ›}}};uê4xđ`ĂŒ5~đ@v6¶£:ªB!å%gv$ëcáHö£J(q%TúZY¢Wû̃_ûMv6©à,vdØ05±p$ăµKTnä₫¿ÈÎÈV?¯ÆuëÊÎ&Y{÷ª1;8BœöF“ÆUăŸ–ͺ€ J|(;#²C,É–ôGÿ§xª¼¼‡{²3²Uâe-¦6;äqHµ)Ä«§Én «Ÿ,^,;›%<?á'#J G²s0gæ)/9ŒÚâ"Ú¾Q¼ơ”'́llY«Vj¬ƠÂqË5îƠKv6¶LüƯØƯâ ́ŒÈ®°p$Ûđ₫ˆÊKV¦X·.‡k{?²€dg"775¾x1“́tlØ ÜPâj¨öOdgDöƒ…#Ù€»ÎwÅÉÉă±́ŒlÛˆ̃Jl뼕*%;²qN¨–-óÉNdžåG₫Ø©¼ô„§́ŒÈ~°p$P­P5%>€đ‘ » öGÖ¬²³IÅNơcÍ E 5~ơJv6Éÿ@x₫œO&©‡z³1[yéïç/;#²üÉ$­'ßù?VEUÙÙ6qNúm vĂdáh:[`áB5®WOv66nôC?å%'w$³Đéớ+ffaaa²³°âoºá₫¾’‘ÍÓ Ÿ₫é·™D <<ÜÏÏOviQ.i¶lˆ’MÚiÂ₫åm@]ÔƯ uqv7‡ư¬çG̉.±jlŒÆ¬M Æ;ËΆdyñBv©)^\»t‘íÛ…]âô·¼ïH&báH%₫v«Uw6ÉÎȈ“~/]*;›T>¬Æ]»ÊÎÆ^¼ơ–́ Œ"̃ÄY¶Lv6vá äÍ­¼t‹́ŒÈ†±p$-«Æ`/¾Ëé€ÍÀ_è¿b…́lR'Î-)®FG¦¯¤¶¯ê@uê-´o/;»pèÚ¡ˆŸ‡+±bHÆ>æç°ừE¬+¡̉a¶dgK]Çl)WÀVú8–.¬ídj ߢÎpCœa‹/|oá–́¼l˜Ă~Öó#i‹X5–B©Ă8lBc¤*XPç̀±¥5=cYPêœƠ­[ËÎÆ^Ä"V‰oăv&p–uJ7¤!bƠX…Oă´́Œ́Dl,n¨ I qăç²3J•8¶Ÿ¨Ú÷ßWc±Ç«öŒóP‰×¯—GUÇ &²ÉΈl G̉ ±jÔAwWdgd?̣ kpüö›́l̉4nœ&;û"ââuÖ¤‘#ƠX¬xÉDbíø/9Î̉……#i‚ø›Ë₫J/2ƯË—¸'<Ѩ[́we1e˪ñ5²³IĂÔ©jü矲³±/‰fsdíHÆcáḤ‰¿³*£̣%\’‘]o7nÜ(;›4=£Wª$;’ĺX5n̉Dv6öE}fdV^²v$#±p$™=%i‚&‡ åUđlÏÓ§xôH}i½âóÓ/¾=k±_•MÄGë›7ËÎÆî¼Â«|Pÿ²díHÆ`áH̉„"T́—Ư]7Bû7ÄlLnủ_lß.;c̀˜¡Æ ÊÎÆ‰å¸æ»9˜8QkÖ”Ư¹‰›åPNy©ƒî ˜ĐÙ?$ÇL̀¬…ZÊË¡ºKd'eoö́Á«WêË d'DZ NxæŒ́l̉&N¿o^¾”Ư9ơQ_yé Ï]Ø%;)̉.$A'túŸ*/'bâ×øZvRv(8X<1Tă>’ư*VLvé#öÍÍÆÙc,`v´†:[f=Ôû _ÉN4…#Y[I”\uÁ»Ø8ăMh’7`€W©‚\¹d'd ®4hⵟkU¢¾¹Ë—ËNÈ­ÅÚ©PDZÄÈñ¡́¤H‹¸ä ù9́2DÆHÔùúîøÀ'ÍwÙ̀znZ’ÊmÚ½6»̀œv/iJ4©“^Rͧ¬iF~‹îÄÎP;µ8Ă91²s×(‡ư¬çG²’'x’¨jÔCoLƠH7¯OŸ.;› È]v¤9| Æ60©mªú NÄ‹Xµ¦DX8’5üˆ=á)nI4ư,™Ñ?ÿàî]ơ¥Í¬½²x±ó9µ¥µl©ÆçÎÉÎÆ(ëÖ©ñÈÎÆ~yÂ3éôàœ(,Éâ IôP^æAVU±¢‡‡ËÎÆxâÔ0C†ÈÎÆ̃ÙÔÚƒ•+ƠXÇa–”è·tUT²“"M`áH–¥ƒn3Ôy{?ÆÇwqׄö( Ÿ}¦Æ¥J¡HÙ ïÎÙ8’̉¥ƠX¼•§míÚ%xÉû¥‡¾6j+/§cú[xKvR$ G²”“8™¨s̀Ńœ‡y²ó²sậ¾§OËÎÆxOŸªq•*²³!ízưZÙÓÑ̉B2 ³”——qYƯKp.M‡ÆÂ‘,¢º•Gyq‹úz¨';/;'Nq7̃¶æ8êÜY¹̉ uˆß"_Ù̀¤}..x÷]ơeṔ„́Ư'øänˆ[²!ÛL‘IĂ‘̀OƯÏøYÜÂNV0mZ‚E5laz>øĐQ¬ ÈrÄo‘‘#eg“Û¶©qHvï–½Ëü‰~‡Æè<È#;/’ƒ…#™Ó_ø+Ñăé₫èϪÑ:FRc›åN\E»v팷Céåâ¢ÆÏÉÎ&>Tăºuegă=5ºû:èƯŒ$GÀ‘̀¦<Ê‹ ¸ˆ‹s0Gv^AaºbEÆÛ‘C\dÓ&ÙÙ8q-¿D˳h[Μ4H}Éy?­c'vnÄFqKA×*$GÀ‘̀àé ;‰“Ê–È¡‡Cđ¬Cœ¹X1tè ;¡ô–¦ps“#yï=5₫ûoÙÙ¤Ï̀™jüâ¦M“ch‚&‰"­ÇztˆY G2UuT¯ªâ–ñ‰HÙy9S§đë¯êËóçe'”^â#~ø[ßûï«ñêƠ²³I±K†ØUƒ,M};$˜É̃]ÑUv^d ,)ă~Ăo:èà€¸1a[ă2l[¹rjl{U#€ï¾SăœaØê~ÿ]M“h ÄœÜVbåa·,ÅRt·q[vjdY,)ƒüà× ­Ä-mĐF½¼d§æ@²dQăQ¬˜́„̉+,L – ÙP¼¸ú̉ß_vB¤*é¡O4óZ>äằkö…#¥ÛdLÖAwWÄ×q} ÖÈNͱ †èhơạ̊å²Ê‹Ñ‚… Ơ¸KÙÙ¤›ø×Gxx‚e É ăøn$˜ivé […U²S#‹`áHéđtĐÁqc5TÓC_dgçX₫üß|£¾´±ùw—.©±¸YSï̃j¼l™́l2âÂ5îĐ7oÊNÈÁ!H½Œlkö‰fg#ûÀ‘Œ•¹s#w¢Wqu?öËNÍá<~œ`HƒxßÑ–|û­÷ë';ÇV¾¼<(;›t+Z„¾Öøg¬ Oñ4Ñ­G:è‚$;52'”¶衃îˆÇ`ŒúB($;;G”3§ï܉L™d'”1C‡ªñܹ²³qlâ„M›ÊÎ&#ªVM0(Ÿe¤0ÜzlöâÆ„è û\JÔN°p¤ỒÇ|t?âGqcäÑC? “dgç ÄOÄñăQÏF»¡‹Ë#’tùó«q„­NÈ7bD‚N³¬eù¿$]0́s|®ƒn36ËÎLÅ‘’·tĐơCâˆÓ1ư.îÊÎÎq‰7ƒ‚lmAj‡ÅhÍèÑj‘#¥†…£ăZơ‰¶xÂ3 aOđÄ®²³#DE%¨u:Û¯ªñÅ‹²³¡ä¬X¡Æ™m₫¯Gñ§æêUÎÑ£ĐCÿ ~Iú¥Ù˜-;;J GÇU Å”¸*ªê¡„GÅQ\v^óçĂU¨̃sæD\œ́œL'.S° ̃zKvB”œÔøơḱÛ';!S%ú‹K§CHˆ́œĐíơĐ?Æcq-‰X ;/J GÇuçtC7=ôpÀäöÈlªUK¼ßDzs2 q©˜k×dgC)»sGkÖ”$ªƒ‚tæ$¹<àqWơĐ7@}ĐGvF”MưOøIv”€N—`­àví́â 5.d×­›́l(U>>(YR}ù…=,§×'óă6»V§ưÚíI—œ!­aáH¤&$e V®”–¹ˆËĂüÄ?W4ï̀5₫üsÙ٘ljøæơeL t:¬]+;-"›Â‘H¾—/¡Ó%^?P¯GƲ33±"^ºTv6dœ₫ưƠ¸X±Œ·£%C†à₫ư[>ü·‰̉…#‘d-["[¶[³—ÇÓ‰&AéÜYvBdœ9sÔøâE´j%;!óđöNüóe¸ơ(vÁ%¢”°p$’fâDètøư÷ÇĂùó²33£¦Mqơªú̉®*b ₫{ưö&L9ϬcÇ[¾ư6™ŸG"J„…#‘«VA§Kü)́á½̃>Æ!¼ñÙg º6²j´Eâ¿ÚĉX¿>ăMị̀åÉ|K¶l ¡¡²“#̉*DVµ|9t:´oŸxû¦M VT±¿ü‚©SƠ—¬m—øo׺µ}Ư‡^ÙI&œ®U :ö́‘‘ö°p$²’̃½¡Ó%ÓÁ¯AèơhÜXv~æ5~‚¬mƯ¿ÿªq@€­ú3`ôzx{'̃ ß}';?"-aáHdY‡ÁÛ:¾ÿ>ñ— †^íÛe§hvo¿`sûºAå Ê”Á/ÂêpÅ¡ukÙ9™Ùưû¸yÎΉ·¥JáÊÙ)i G"‹¸o½U«"""ñWßz z½=~ưû/tºw§Ö¯·›™\]ûöǿ3ơåúơĐéđê•́´̀)_>ÄÄàî]dÉ’øKgÏÂÏ:*T@l¬́D‰äaáHdN;w¢lYètÈ“—/'³ƒ³3ôz;{Đ÷F“&xûí[>ùÄnæp!˜<9ñä¢Y³âÓOe§efỵàåËd₫̃38v ..ĐéP§“+‘Ơ±pLÑÚµkÛ´iX£FÑ£G?zôHvF¤QG cGètĐéĐ ₫û/ùƯÆŒ^˜ÙéZ°aĐé°ys‚QQ˜5Kvfdn[¶àĉ[f΄N‡o¿•™™yyA¯‡^=“ßáï¿Q¡Bü₫ÇăÜ9ÙY Çä͘1ćر—.]ªT©’››Ûúơë{÷îưâÅ Ùy‘&ܸo¿…›[ügFåÊ z%̣öÛ¸~z=&M’·Ù]¸€Â…¡Ó%XÇ @Ë–ĐëOkNv£\9èơ(]:ÁÆ¡Că"#eçgfß½GÂÇ'Å},@É’ñ¿¼¼°p!>”7‘e°pLFXXØ¢E‹|||¶nƯºhÑ¢mÛ¶ué̉åÔ©S_ưµ́ÔH‚₫Á×_£T©øO bèP<Ú»̃y!!Đëq̣$ }æơߨX:ǵk‰¿†_•"ỸÿaÆÄ‡Gü½wqâwÛW¡îÜ^ß~K¼R"¡o_äÊÿëÂÅM›bîÜ«Ù.Ù hÑ5kâââœ'OĂ–Q£FưñÇ[¶l3fŒ“«m{ßÇë×8~'NàÄ DGg°©>ÂŒđđ}Jæơü9&MÂ=8x0µỰåĂÍ›²s%+jÚz=²gG̉§1;wªåƠ»ï"8Ç'3bÙµh- <Ÿ~?₫HcÿØXlÚ”`"|77”/ÿŸ—êÖµ»ßd§X8&ăÈ‘#NNNAAAÊggçÚµkoØ°áØ±c+V” Å‹‰Á‹xñaapwGd$>Ed$.]‚³3""ÔÿAæ̀xö̀ü989ađ` „B…d_Œ‰ÅăÇ8t±±Ç•+¸r{÷âÁƒt4̣Ùg˜Æ̣óS×'<}3gbñât¼ưÙ3„†µD‡^¾DåÊÈ•+₫?øû#G¸»#GäÈgÏP¬²eCö́àÍ ²(‰éơú‹/zyyyyy‰Û‹/àúơëvS8ÚÎïg~¦7‘ᛈ‰Äơ6Xû!ÖTÁ!ˆ¾lj`€®¦AîÜØ¹3ñHjrL?₫ˆÄx÷]£ö?s&ơg·fû.µ̉À÷€2Uën¯Á‡kđáCx™̉¬Á“'°w¯‰ÍØ̀UuÏ”A²³ ±pL,***66ÖÓÓ3ÑvëđhËÖ­[eŸYR6ó{D–¸ŒƯ†ÿà́t´"²S§ÈnƯ^ûûÇ¿—‘|7nÜ‚6-j˜†*Ë¿ÿº/YâöÛo²’ĂđKc>>V¶œC‰Ư6ü÷̃&´mÿ^¾z®½ß* MDåÀX8&f:íêêh»››€'†?ử&û<( :èËádQ\T₫óCx!\3½e{S«Vüo~oº̉ ??₫%&đóCóæññóçØ±¡¡Ø»‡ËÎL8Wç>Æü¤_:À‡đºˆ¢Êÿ¡Œ́|eÊ%‹’~¬'½Cä X8&æéé©Óé¢ ½vÏ=Ă›ûöÁß%q‘t=&_A—[â=t:è₫÷ZL¾Â™n)/\}¯H¦›:è ÿ=ËææÿtĐ_ˆ.\<ó'Äé wBœN‡kÑyư3ßpBœ“N«¯|ßÊrƯEëŒXg]œ3bD•®ézÜ1™t1.ˆqÑÅ>x•£HÖ;™u¯³è¢³è¢÷?.ƠĐëp6ƯKĂÙu/Îß÷ª‘÷b§ç9tÏÜeƠ¿HÜÍçÆÄc›myú9rER{Ë£GÈ™S}yç̣æMă(ÑÑÈœ9i¼~L™âcCg‚ë×wŸ¼yùó«c¼=‚—t:89ÅÿïÅ‹(QÎÎpq‹ œq÷.üư‘% ²fE–,¯ǸOOơ¿ Đ¼9I-‘Y¸ºª#J’•+øóOàñcå¿ç/ºz{ăƠ+¼|‰W¯pđ ̃~11ˆEL bb¿S\\üŒ‹±±ñ?5†—ׯ£`ÁǺv-~‹añô/O•ô'ô₫}äέ¾|đ ñÖIß…́ÙSÛ!á–@ưCèƠĂ%`›‘oÁ³gps‹̉g{ççöTï¶ïÎ[Ås?z¡Ïªüwîi₫|®O^é3¿̉gÖgúûi`·°×z—¸Äècàú<°RöÓ±pÑ;ÇÂ9Vïô,6[Vç×qpÓëbáüß«b%³\ÓëôĐé¡‹ƒÓùè"Å2_ƠCg¸~Ñú̀.º=t û\yßđaØàúë¼\î([Çæđt~*ỶÏ/3<̃' bᘘ‹‹‹‡‡G̉;‹‘‘‘”qÖvà̉ëdGs¤9Ä£p’-i₫iX"É–Ü _L²C>ñExx¸Ÿ_³„;4_4°àu²C·ÂĂ5ø=9΅ÙQªJ•J´ù¿KÓ’È&—|'­ĂĂĂưü:$Ùœ/­÷•M²%ÍÛlE’lIô©‘3É…R}IÚÂÁWÉđññ‰ˆˆˆL8­¡Ë…O*3ÀÙ5ɨW¯^lĺ^a ›^¯ É™3g`` ́́ˆˆˆˆä`ᘌ6mÚ899Í™3çÙ›yÿ-ZôàÁƒ>ø “̉ÿŒˆˆˆÈÁ°c2̣åË7|øđiÓ¦5õ¼V­ZW¯^=xđ`é̉¥{ơê%;5""""iX8&¯{÷î¹sç₫ư÷ß7ṍëëÛ©S§Áƒfä!"""rL,SÔ¬Y³fÍ™̃‘}`G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G"""¢ÿ·wïq1åÿÀ?ÓH7ºTº¸5“¦(K]fm¥,́J¹lhƯÂ#̣Hícv—Ü/H6Ê¥ˆ=»¹¡ËCY¡¤¢VíĐe†̀å÷Çù}ç1©́)§=}=ÿ2Ÿù̀9ïsç¼|Î|Î-@ ‚#Đ‚à´ 8-@ ‚#Đ‚à´ 8-@ ‚#Đ‚à´ 8- ¼½½Ù.á“‚ưÉ8́RÆa—2 û˜‚à´ 8-@ ‚#Đ‚à´p Û5|jø|>Û%@×*--e» 8-¸U ´ 8-@ ‚#Đ‚à´ 8-@ ‚#Đ‚à´ 8-@ ‚#Đ‚à´ 8-@ ‚#óîƯ»·|ùrWW×   ÜÜ\¶+útÔÖÖ5*<<œíB4›D"9r䈟Ÿßˆ#Æ¿`Á‚œœ¶‹̉H§N9s¦³³ó¸qă"##E"Ûi6™]'O¦àÏ]¿~=Û5|R®\¹²páÂÁƒ80///--M  4ˆí̉4B¡X¶lYee%ŸÏŸ4iÛåh*©T:wîÜÓ§OËd²Ñ£Gæåå={VKKkôèÑlW§IvîÜÛÔÔäêê*‘HnƯº•——çïﯭ­Ívi Gf×ÁÉ“)¸ÄBˆ˜óúơk—áÇP-wï̃utttss“ÉdlW§ñy<Ç[³f Ûµh°ăÇóx¼€€±XLµ|ø011ÑĐĐíZ4^|||êÿđïß¿O±¶¶f»:Í P(?~ܧOŸ>}ú¨¶óx?99™å]öÁ]1cÆŒö:H$’áÇóùü¼¼<Ë çóù×®]c{ă@#!8“üüü¢££sssŸ?®££S]]““åçç÷êƠ+¶ ́^nܸ‘••Ỡ»₫₫₫„{÷îUUUµÙ!;;ûíÛ·ưúơsqqa{Sà?ÁSVV\[[ëè蘘˜˜ŸŸŸŸŸ_TT´{÷n[[ÛĐĐP©Túá…xxxÄÄÄŒ=í­ù7¬Y³fÉ’%í½kkkëääD¹páB›.^¼HñññÑ̉ÂÉ₫ 8×3 Exxxss³··÷‰'Æ×»woBˆ··wRRRß¾} ÏŸ?ÿáå‚Y³fÙÙÙ±½AƯ5èØæN{ÿ₫ưƠ«W !¾¾¾l— ÿÀŒË—/?|øP__?&&FGGGí] ‹€€̉₫à#d2Ù?h̉_Ôû÷ïÿµƠµÇ××—Ëå–””TTT¨½uóæÍ¦¦&KKË#Fti JÀ jTlö́ÙÆÆÆmv˜={ö={¾ùæê%5K£¶¶¶¨¨húôéNNNÏ=#„$$$¨M©©©‰öơơ1b„»»{HHH~~¾̣]j9ååå7ntqqîîî¡¡¡·nƯêè&P‹zö́ÙÁƒÇëèèèââ2kÖ¬K—.utuT·Ö5888Œ3†ËçóE"‘L&ăóùÎÎÎm–djjJơo=蘙™Iñññáp8ÊÆººº;vøúú9räÈ‘“'Õ¼yóË—/?¼É¨S)''gÅB¡ĐƠƠuîܹûöíûÇ` ŸG`ƃ!®®®íuèÛ·ïW_}åáá¡ÚøđáĂùóç¿{÷N.—·₫TYY™¿¿jjj}}ư!C EVVÖœ9s®\¹¢Ú-**êØ±coß¾µµµ‰D™™™ÁÁÁ‡êĆÄÇÇoß¾][[{́رFFF………Ë–-S(ưøƠ¹¸¸̀›7OGG‡Ăá̀›7oö́ÙíơlónµL&»|ù2!ḍäÉÊÆºººÀÀÀøøøÚÚZ++«êêêLjD¢ø»%Û¶m[°`Áü!•JÍ̀̀ öîƯT__ÿ1‹ƒà̀x₫ü9!ÄÊʪCŸúñÇ?û́³Ă‡çääØØØ´î°mÛ¶æææ%K–ܼy3---+++**J¡Ṕ̃½[µ[aa¡»»û­[·233ïܹÁáp¶oß^VVÖÑ 9ỵdHHÈơë×9rñâÅùóçBÔÙóñ«óôôŒŒŒÔ×××̉̉ŒŒ o¯ç¤I“tttÊËË=z¤l,((‰D666@Ù˜––öäÉOOÏœœœôôôŒŒŒ7n¸ººÖÔÔP)³s®^½`mm}êÔ©k×®;w.;;{âĉEEEû÷ïïôb@!8̃¾}K133ëĐ ÜÜÜLMMÛ́PRRB™9s&—Ë¥Z–.]* U»™™™íÙ³‡ºKÎår¿ûî»ÀÀ@¹\×ÑmqrrZ½z55OYKKké̉¥„'OtÑêè́"j˜öܹsÊFê>µÚ´©Têáá±fͪÅĐа|úôi§ زe !d×®]ÔoBˆ©©é®]»ú÷ïúôéׯ_3¾ÉĐm!8z÷î­­­Méè“§L™¢««ûC‡%„DDDäååQ3Q´µµW®\ªÚmúôéj3ræÎK)**êè¶øøø¨¾422âr¹ …¢‹VGs/•»Ơ …‚zZp\¶lÙ† ¢lyơê•jǗ‘HTYY9xđ`Ơ¡MBˆ¾¾¾›››D")..îM€î©ÛÀ§€ĂáXXXTUUUUU©5'NœJ¥“&M277§ZÚ¼=­*&&fƠªUyyysæ̀ÑƠƠuppøüóÏ'Mäàà ÚmĐ Aj´²²̉ÑÑyñâEKKKÏ=éo »í ® &VUUƯ¿_ ܽ{÷åË—C† áóùj=kjj²³³ ª«««ªª>̣«„j6wEEEëuQ¨¯(À‚#0ƒÇăUUUåçç«MQzúôiLL ‡Ă¡nR ?¼X++«S§Nfggçææß¹sgÿ₫ư3f̀Ø´i“rB±ềbe —Ë}÷îT*íP’£Ó¹s«“Édj#—4ikk{{{Ÿ}ÚÓÓÓËË‹êSYY©ö©/^ˆÅbsss}}}Æ7¶s««­­msæ8₫₫₫'O¼páBxxx›_pljjÚ¸qcÏ=ăăă¿øâ ƠÂ:º.Ơ:LÑ×׌Œd|7€ÆÁw€¾¾¾”H$?üđƒX,V{÷Ơ«WÔ ÜừIMM§§§̣Ñ„={zyyQÏ ¡ûH9sæ 56¦tôèQBˆ££cWl,ÍƠ©Ư)¦F ;ÇƠƠƠÜܼ¶¶655µªªỄ̃tJ÷îƯ“Éd#GTM䳋>́uöïß¿_¿~ååå÷ïßWí#“ɦOŸ>~üøººº®ØĂĐ=!83¸\nll¬ÎƠ«Wg̀˜‘••ơæÍBˆD"¹råÊ·ß~ÛĐĐ .\H™wï̃=tèr ́É“'ÙÙÙ„å$_BÈ‹/V­ZƠĐĐ@‘ËåÇ?r䈖––Ú¦üăê¨ïn=zT™¡oß¾ƯæĂkäryëœƯ‡Ăñóó#„lƯº•´•¿û÷ïO)))Q&9™L–źØ1êo¡ÍÅ̉©3,,L.—‡……=|øjijjZ·n]qq±@ ho:<|’p«3|øđøøø5kÖ”——‡„„Búôé#‰¨/̀9::îØ±£Gœv¨gFDDlƯºơ×_µ²²‹Åååå …" @ơ×V|}}333ÇŒ3pàÀçÏŸ‹Åb--­°°0{{û®Ø̉\ƯÔ©S“’’îܹăåååààđ×_=~üØÈÈÈÜÜüƯ»wÊå‹D¢€€›½{÷~x¥~~~‡jnn&­¦~B́ååuụ̀å/¿ürÔ¨Q …¢´´T$&''Ÿ9s¦±±‘z°*:uN›6-//ḯÙ³S§N0`€‰‰IEE…X,8pà/¿ü̉»º-Œ8“Æ{₫üùÈÈÈ‘#G™™5774ÈÓÓsÓ¦M§N²µµíè§M›–””4qâD==½’’±XOÅñ‘*TY|³ÛF"¾ª&""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p¤R`ûöí¢S°)|ă#U©²ø}D碼7ß|SwwU«V‹MaáHDDd§êÖ­»nƯº‰'ê>FGG¿ổK+VtwwoÚ´éüùó³³³¥ïß¿?jÔ¨jƠª¹»»·mÛöÀ†\"++«eË–­Zµ2dç¶mÛΜ93߯â¯[Ô·¯½öÚºuëZ¶l)úÛDDDvÊßßđàÁíڵ߾}ûíÛ·wíÚụäÉÎÎΓ'O0`€nÏ”””¦M›₫đĂmÚ´yươ×ăââºvíźر/1}úôÿư×d;¶wï̃|‹¿n1ß6õ|đàÁ5jÔưŒm G"""½œœœœœë\ëÑ£G¹¹¹¢ïø±É“'ß¿çΫV­úøă÷íÛ7|øđß~û-""ÀW_}»lÙ²üñ›o¾ùçŸ4Í[o½Uü9ẃØ1wî\''§böÉÎÎ₫믿>úè£.]º|Å_×´¬È,‰ˆˆ8ỉ¤… zyy9;;7hĐ`êÔ©=’v˜?~Æ ƯÜÜ|||Z´hñă?æ;öđáĂ5jÔ¨‘!ûO˜0áw̃ñđđpqqiѢş₫™ữ{ïƠ­[×ĂĂ£C‡gΜÑ휙™9kÖ¬ºuë–+W®zơêaaa7nܰÄصkWÛ¶m›5k&m;v,€ưû÷øù矆ªûªfÍưû÷ŒŒ¼~ưzQ'¼yóæ+¯¼V¥J•b®›œœÜ¥K—™3g̃¾}»à·Å_ׄ¬ÈL,‰ˆˆ`Ó¦MăÆkÛ¶í»ï¾ëçç7gΜÎ;kµZ}ôÑäÉ“ưüü̃}÷Ư7ß|355uÈ!üñ‡tlbbb—.]RSSuêJÜƯºu«W¯~ÿư÷gΜß¿ÿvíÚíÚµkäÈ‘¯¼̣JddäË/¿¬Û3,,́Ă?¬ZµêäÉ“CCCW­ZƠ»woÅï=;;{̀˜1ºJQré̉%eË–MII9₫|‡4ômÇsss‹êé¨Ơj‡êííươ×_i­V«ƠjÏ;—ï«â¯kBVd>'óOADDd„C‡D^]Ö¢–ÏƠ«W?û́³÷̃{O÷qÊ”)sçÎƯ°aĂÀ×®][»v툈Ư[×)S¦øúúnß¾½gϺ·lÙ2sæ̀éÓ§;88(qÿ´´´'NÔ©S€““Ó”)S̉ÓÓ:T¦LÑÑÑQQQ©©©6lxơƠWøáƯaaa¿ÿ₫ûơë×|*NNNŸ₫¹|Ë;w>ÿüsGGÇ₫ưûß¼yS«ƠúûûËw¨P¡€B› ̀;722̣ÀåÊ•39«â¯kBVd>DDd]Í›‹¼ºV[Ô7¾¾¾̣îq3f̀X²dÉÆxđàA©¯^rr2€ŒŒ i瀀©jPâ₫Í›7×U:tè`Đ Aºª@§N¢¢¢222<<<4Í̃½{/]ºT½zuË—/_¾|yÁä³³³ÿüóÏ¢ní…^0ê!ưư÷ßo¼ñFlĺ’%K‚‚‚Nœ8ÀĂĂC¾§§§tkù—/_;v́ü´sçÎ;J¹¥¦¦Ê÷LIIàăă“ï )))ƒ êܹóøñăÍüÿHñ×5*+R û8ÎÉÉéÑ£G>́Ù³g›6m¶mÛôÖ[o={Vײ%ṇ̣̃’bCö7ܘ1c.^¼¸lÙ²† †‡‡÷íÛ·aÆ7õ̀·›§§§¶h^kưúơơë×?|øđwß}wæ̀]ƠÀßßßÁÁ!ßûߤ¤$•+WÎw’ï¾û.>>¾N:_|ñÅœ9sæ̀™sÿ₫ư«W¯Î™3gưúơFƯ{ñ×5*+R [‰ˆÈº._AáΜ9“••%µöeff={¶}ûöQQQááá_ươ„ ¤óµ Ê»1’““ccck×®–››»xñâqăÆ-]ºtÆŒ̣=ÍUưǼ̣Ê+/¾øẩ¥Kó½ÿurrªW¯̃?ÿü#߸gÏF’ï<º¡è_}ơ•|ăƯ»w§NÚ¾}ûAƒ~ûÅ_ר¬H),Kß­[·7J3,‘YÔºÜíÛ·çÏŸ?eÊƯÇY³f¥¤¤ôéÓçÊ•+êÖ­+í¹yóæôôô¢ẒŒƯ¿111O?ưôûï¿?kÖ,íÛ·‡́]¶Ä̀WƠZ­vÊ”)U«V]»v­££cÁFŒ1a„­[·>ÿüónƯºµyóæÎ;æÛóư÷ßÿư÷å[+V¬¨›ÖÇXÅ_×đ¬H),K°víZÑ)‘5|đÁûöíkÔ¨Ñ₫ưûẃØÑªU«¡C‡^¹rÅÍÍmĈƒ®\¹̣₫ưûwíÚåççµmÛ¶nƯºå;O‡ŒÚ¿M›6­_¿₫́Ù³ăăăëׯ³mÛ6Ÿ‚ívºWƠ&ßûÙ³gÏ;W·nƯ°°°|_ơíÛ·gÏÆ [¹råàÁƒÇŒăååµjƠªŒŒŒ‚Ë*®øëÊʱcáRRR>OÅñ‘Tê~6nÜø×_ˆơ„††zyyí̃½[t"4hĐ ¨¨¨ÄÄÄâw3áǵÔư„+…¯ª ÷é§Ÿ>|øÀºuëöíÛ':¢âää 3-'ăFÊ•£·}ª–»øïÍ€PÏcNƠª[)Só@®F{èÊ©§ªÖ9|åLÓ*ơöœ;Ô¶N39¹9NNG.Ÿk^5äè¥ó-ªÖ¿w£q`mw{N–¶¬‡óíø´íªääÀ·éSø‘Í`áX¸gyFØöŸbT¤§cơj|ÿ=øƯÆuøä¸¥Ăđ<`€î‡·cÑçjƒÏ‹úª}̣̃>·*`WG¬u† Ăo U+цˆLuëÖ­ 6T®\YúWÏf>|8..N·j")ˆ…£EçÛ²}ûvÑI•bº!vkôè Û·»=₫°÷i´Ô^á₫Œ??₫x¥Êª~_Ơú)<8eæLû]ªÁÎDmC·nƯjÔ¨!: k;sæ̀À{÷îm{…ă+–.]  J•*†́ŸP̀·]»v}CjÁÂÑ"́³ßƒEÙg²6m=†£O‰N'¯*Wp¤ D=“ÛæŸµk=Ö®ơX¿NLûüµ%‹/‚µ;vLt ´dÉ’%K–¾ñÿ üg½` ‘`áH¤FÇá)]¡Øzö>mÈ!5oÖºïÖưF÷˜œ„^ºŸº÷¬ûÓÎ9eÊ Œs®óÁ«§[Vjpđêé•êÿ{¤M­&²µ9ư×£›U ‰J:ê_w烨F僯º^}óà–ëÍ¿Ÿˆ„kỌ̈Å6%>­w|đḌ A˜5 §N‰~|DDd,‰TgÀl̃ ¸XƠ ï Ó(;ä[§%mĐF¿ÉàWø9ûây½Ñ@ĂÀ:̣¿­{£€₫èàU·¨C*RßÀ‘i^wOÍÿÏh5¾̣ô¯i4¸u ~~ ""Ăy‰Ôå­·°y3Đà$´‚UăgÓ MKƠB{ÜéTªÑ*Ê£üz¬¿æ¢…6~è3…Ô´+‡ăd*ˆz~DDdA,‰TdÚ4|ơ°âuD7”o×h‘­ïºwwÑi@à.ÖvÖj0:_ǰú§ ƠÀ1G£")…#‘ZôîÏ?₫¯†¯”o?S¹¨qhÑƠª‰NSæáC‹Æ@«Ñ¶~,Û kG""Ă‘HNœÀï¿çê ç̉ÆÑ­Ơ îÙÿ>8 :ͦLÑưßơƒ mP?ÏWZ jƳv$"²%,‰T¡qc ¾&‚ơ3>\À…Eøè÷xñEÑ9fÎ}|ê”ZÿǃtqOÂïöر¢“$""…°p,Á¬Y³bbb _¨ÈeËÛ»"P?ư¬ÚZ¨…Y³ô;mØ :Í"ôꥷo¿31S¿åV…E‹đË/¢“$""%p:"Áv́À£Øj¨(mÑB+:)cüô“~¼ÎË/ăÎñá5\ûßưw?~­¶TƯ-D‚=·|cáUăđáú~üQtEssÓÇwïê₫ïR,}ïê·k5ë։Γˆˆ̀ÆÂ‘H¤~6¼$}̀ÓÖøĂúøå—EgZ¬7ßÔÇ+Vè₫ïl̀ö†·´ù•†́ïADTê±p$iøkúQÇ+!›…çÄ }\©’è4K"_ä7,L ïà~{Ăè ‹E'JDz¡¡¡F£ÑôéÓGt.Ê{óÍ7uwWµjUѹØDÂÔ¼ª_ú¥ü©V¯á5ưẉ7»Ÿ|":SÓÉÛPcḱåQ·nƯuëÖMœ8Q÷q÷îƯ:t¨P¡ÂO<ñ̀3Ïüúë¯̣ïß¿?jÔ¨jƠª¹»»·mÛö@±„ª¢´mÛvæ̀™ù6Ư¢¾}íµ×Ö­[ײeKÑÏØÖ°p$ă,Î&T’>¦Ôß—çë%Kô±¼³£jÉÇVgdÈ¿qù~œkÀy‰TÄßßđàÁíÚµ̃±cÇË—/2dÔ¨Q·oßîÛ·ị̈åËu{¦¤¤4mÚô‡~hÓ¦Í믿×µk×cÇzÚâOU”cÇíƯ»7߯â¯[̀·Í›7>^t ʃ̉ÿ” =]àkÙ÷J³Èó ×'ÆÅÅyyyuèĐ¡Đ3ª|²²²"""f̀˜áççà£>’[üuK̀jàÀE]W΄×̉ûn&¶8 Đ½ơö>½ka½"w­YSt²†éÖMË›K2e‡\éă;xGt®D… œ4ỉÂ… ½¼¼œ4h0uêÔGI;̀Ÿ?¿aÆnnn>>>-Z´øQ6×îØĂ‡7jÔH÷·øư'L˜đÎ;ïxxx¸¸¸´hÑâÏ?ÿ̀ÎÎ~ï½÷êÖ­ëááÑ¡C‡3gÎèvÎ̀̀œ5kVƯºuË•+W½zơ°°°7n(~û><}úôóÏ?ïéé©ÛâææÖ¦M›+W®dfføù矆ªû¶fÍưû÷ŒŒ¼~ưº±§Ê'99¹K—.3gμ}ûvÁo‹¿®áY‘RX8 đ;~×x&ªuë¼_GDècù€å̉"66߆5k€?”>ÖG}ăNHd›6m7n\Û¶mß}÷]??¿9sætîÜY«Ơøè£&Óçç÷î»ï¾ù曩©©C† ùăư¡‰‰‰]ºtIMMƠuª+qÿuëÖ­^½úư÷ߟ9sf|||ÿ₫ưÛµk·k×®‘#G¾̣Ê+‘‘‘/ÿ7—BXX؇~XµjƠÉ“'‡††®Zµªwï̃ß»££ă‰'fÉÈÎÎ>ỵdÆ ]]]SRRΟ?ß¡ClÑ;ææǽéXü© ^Úßß_×”uîܹ|_]£²"¥pp"k @€₫Ă›K Y‘oéR}‹O¢F̉K—æ™Üر₫₫ÏÊ·„#¼;º‹NH/$$ÄÙÙYúèææÀÛÛ{ß¾};v́8wîÜ… NŸ>-?688Xª Ùß××WuơbÁ-\]]¿₫úë·̃z+000$$¤uëÖ]»víÑ£‡|¸ƒƒC¾÷¿III*W®lÔ©̃xă ĂÓđ÷÷/æºÅ«Ô£ |X8YOkÈFÁT¾ `Ê”;•̉xúíƯ[åPîñ »(D=ƒgDçEÖ6a‚è pæ̀™¬¬,©µ/33ó́Ù³íÛ· ÿúë¯'ÈRÏׂ(ǵ₫ÅHNN­]»vXXXXXXnnîâŋǷtéRƯL4̣ó›óªúÏ?ÿ́Ư»÷ºuë^zI¿ª··7­VëääT¯^½₫ùG~È={4ÔÑÀSuûÅ_ר¬H)UMd%шÎóùZ ¾ư¶>.uë€ư×g«P› kÆK[Ú  ˆTăöíÛóçÏ—>Î5+%%¥OŸ>W®\P·n]é«Í›7§§§U»1bbbZ¶l9õ<ƯG‡öíÛCö.[¢{U]”/Ô¢E ?üđƒ<ÉƠ«WhƠª€#F\¼xqëÖ­º¯nƯºµyóæÎ;{*£]Ă³"¥°Å‘ÈJ¡‘₫Cíó₫[å+¯"&—;CP#.O>)ỵ̈ñh™›ỹ¯mönèfØÙ‰,+ àƒ>Ø·o_£Föïß¿cÇV­Z :ôÊ•+nnn#FŒD÷^ÓxÿSƯÿ6­°]̉Ç¥½pLI)îÛßzKáA+‘ºuëÖ† *W®ǜ3¶6¿ÁáÇăââ.]ºd₫©H-D· «ô>{\0¶o_Ø®;wêẳ^8A?RüưL%ïâ]Ñy‘½ëÖ­› c~K»3gÎ 8PµmKV¬X1pàÀưû÷›*’cáHdYó¡ŸƯ;Ÿ-aoùëƯjƠDçn’–-‹ÿ₫¿u€‰_K¿À¢ó&{·xñâ)…L¬jË;¦î`“=;—,Y¢»»;8’QX8YÖdLÖèü¸.́^ÔJ{6ĐKưYYqœwEfÍd¸Há1:•€…#‘úV7Û#Ă^Øø˜2̣×¥xæˆÎ˜ˆˆĂ‘ÈRA?·Nưưzƒ•X¤̣¹dŸ-iM©påJ¡›7ÖǧŸÓ©¢3&"¢â°p$²”è(Å}V₫!Å«Vq€üÅ®m´8ÆRœ…,ÑéQ‘X8YJ̉¤xÓWU¥¸ÈP^8Ö¯/:}3Ô«Wâ.̣±ƠÓ1]_Á+¢³'"¢"±p$²ˆÍĐ/Óü ^9w΀cèXúÈKă Ư%,L7üå#)̃€ ¢³'"¢"±p$²ùxê5XcĐ1¢³Vˆ¼püüóBw1B/_ê¨.}¼…[¢o€ˆˆ Ç‘È"2‘)Ạ̊e ä“Íj×N1¯F£·mË3ü<ÏFDD¤&,‰”·ú)Çcürư§<¯h‹T«–è;0»»>>~Ü#Ú G Bô Ù…ĐĐPF£Ñhúè—·o¾ù¦îîªV­j₫ÙH‘Hy# oWüß|ÿ½₫«æÍ 8^>]MiWtá˜oPcèï:á¢ó&² uëÖ]·nƯĉómÏÊÊjÙ²e«V­äïß¿?jÔ¨jƠª¹»»·mÛöÀÅœ9::ú¥—^ªX±¢»»{Ó¦MçÏŸŸ]b>mÛ¶9sf¾Å_·¨o_{íµuëÖµlÙRô3¶5,‰,îúuv’"±¥Â1.®¨oä¯+Wb –Hçb®è¼‰́‚¿¿ÿàÁƒÛÉ»—¦OŸ₫ï¿ÿÊ·¤¤¤4mÚô‡~hÓ¦Í믿×µk×cÇ _b>>>¾}ûöÛ·oïÚµëäÉ“'O<`À€â“9v́Ø̃½{óm,₫ºÅ|Û¼yóÁƒרQCô3¶9ZRZíÚµE§`kâăăE§`„uÚuĐB÷?oiß̉jÿû­§gчíÛ§ßoëV‹fhç)ƯK±¿d¤]Zµ̉jµZÙ1¥́WSéúµ̉û›0;;;;;Û:×zøđaNN¨;mܸqûöí nÿ믿4““SË–-¥3f̀°jƠ*ƯǸ¸8//¯:zæ^xÁÁÁáàÁƒ̉–áÇؾ}{Á³²²"""f̀˜áççà£>’[üuK̀jàÀUªT)ñQ˜đăZzÂÍÄG"…Á)₫_Ê_ª72F₫J74TôMXÛ₫ư„ iK RD'Eö%00p̉¤I .ộ̣rvvnĐ ÁÔ©S=z$í0₫ü† º¹¹ùøø´hÑâÇ̀ẃáÇ5jÔ¨Q#CöŸ0aÂ;ï¼ăáááâẩ¢E‹?ÿü3;;û½÷̃«[·®‡‡G‡Μ9£Û933sÖ¬YuëÖ-W®\ơêƠĂÂÂnܸa¹çpóæÍW^y%,,¬J•*̣í?ÿüs@@ÀĐ¡Ç®Ơ¬Y³ÿ₫‘‘‘× {¥²k×®¶mÛ6“Í×:v́Xûuÿ©ç•œœÜ¥K—™3g̃¾}»à·Å_ר¬H,‰v÷åÿĐ/ƒ.]>L^8¹(aédÂA‹°Håơ7‘ulÚ´iܸqmÛ¶}÷Ưwưüüæ̀™Ó¹sg­V à£>Θ1cÉ’%7n8pàÁƒ]\\tU €ääd²Iû¤ª@‰û7õ\W5èĐ¡€Aƒ•ùõÓN:EEEeddxxxh4½{÷^ºt©zơê–/_¾\>Åײ³³ÿüóÏ¢ní…^(ñö<8}úô¹sç6.0>O—¹‡‡‡|£§§§tkÅøûï¿ßxăØØØ%K–ù.¢øë“™Œ…#‘’Nă´ûÂ׈#e]©lüăÇ‘wRIÿ₫xươÇñ¦MèÜ‹°h8†ë¶¼·¿Ä—¢ï„́HHHˆ³³³ôÑÍÍ-888..€··÷¾}ûv́Øqîܹ .œ>}:ßä2ÁÁÁRƠhÈ₫¾¾úߺz±à®®®_ươ[o½̉ºuë®]»öèÑC§Nzzz1¯°u/Ü‹‘’’2hĐ Î;?¾à·ºÜRSSóÀÇǧ¨s^¾|ýرüñGPPĐÎ;;v́h́ÿG¿®iY‘™X8)æ ®Hqs䟰1ß´…6ΰÂQ̃R°i–-ĂkxM*ça G›ô ‚¡œœœ̉ÓÓ>|Ø·oßđđđfÍ=÷Üs½zơjƠªƠSO=%ßÓËËK ÙßpcÆŒéׯßÖ­[wï̃¾lÙ²àààÈÈÈ|¯h===K¬‹ñƯwßÅÇÇ÷îƯû‹/¾Đm¹ÿ~NNΜ9sªU«6`À‡|ï“’’T®\¹Đ®_¿~äÈ‘îîîß}÷ƯđáĂ¥ÆW£øûûsƯâ¿5ùQPñX8)æ]¼+ÅŸâSÿûŸ₫Û’¦0ûmü¡,ßcØ[ø{÷DçLỌ̈₫BáΜ9“••%µöeff={¶}ûöQQQááá_ươ„ ¤‹™ÎÚØư‹‘œœ[»ví°°°°°°ÜÜÜÅ‹7né̉¥º™häç7çUµnüøW_}%ßx÷îƯ©S§¶oß~Đ AơêƠûçŸ<ÿÛ³gF£ )x¶?₫øă•W^yñÅ—.]ïU²Qœœœ¹nñß|Q*GU)æ'ü$ÅÏâYächáhK³ë1E°NÁµ¬Çaœs ²¦Û·oÏŸ?_ú8kÖ¬”””>}ú\¹r@Ưºu¥¯6õœ^T Ÿ±û#&&¦eË–óæÍÓ}tpphß¾=dï²%ºWƠE)ñBï¿ÿ~¾éújÔ¨¡›Çq÷îƯFŒqñâÅ­[·êö¿uëÖæÍ›;wî˜ïTZ­vÊ”)U«V]»v­9U£Nñ×5<+R [‰,H^8Ê^dËö Çb[ ÀOÿƠÛ99ptÄ̀ùßê¶¼‹w»£»è {đÁ́Û·¯Q£Fû÷ïß±cG«V­†zåÊ77·#F <¸råÊû÷ïßµk—ŸŸ_TTÔ¶mÛºuë–ï<:t0jÿb4mÚ´~ưú³gϯ_¿~LL̀¶mÛ||| ”oO3_U—hذa+W®¶½Â1+«˜/å ±º:Ûú!اpJtödGZ´h±cÇ{÷î}óÍ7‰‰‰o¿ưöîƯ»ªU«^¥J•o¿ưv₫üù®®®ÑÑÑŸ₫yJJÊ7ß|Sđ<Æî_ ggçmÛ¶½úê«ûöíûøăÿ₫ûïÎ;ïƯ»×ú-j‘‘‘/½ổæÍ›çÎ[«V­ÈÈÈBW‚pö́ÙUDGG+{]Ă³"¥h,ú} ‰‰…MIHHPÿ{_ø&ăñ̉Dq̉¬´(®ƒÓÆxé¥Çqt44°hªVz²)yQ́ïiÇ~ư°y3ÔG}i|z&2]àbñlÍS*~D­¬Ôư& lܸñ¯¿₫*:ë ợ̣̉½‰¶Uƒ JLL,~7~\KƯO¸RØâH¤ ©j,T å/s-\5Zñ£|¶lỳÁi£|ȉőHû°OuĂb`ÔȘb‡”Vf¼sïR¼ Dß ‘ͺuëÖ† ¢¢¢D'¢¼Ă‡oذA·Ô!)ˆ…#‘c±¿ƒwt¼ṕÛ·ØămlÙƒ ÇE§JtëÖ­UÚ°3gÎ 8PµmKV¬X1pàÀưû÷‹NÄÖ°p$RÀøQŸĂsºà÷ß >₫Æ Ñw`¡¡ú¸Ø@̣iŒ¥5 Fc´´QµÓ₫‘-Y¼xñ”)SDgaUÇÓͼc“=;—,Y¢»»;8’QX8Y-"h´|‹Çí¿…*`Û¶ÇÁ è'7₫‰¾""X8™ïĐ¯3E§£ơëëăb ÇçÓÇRáX¤»°KôÍÀ‘È|̣ö0y;™Äˆé~5}7–ap'N©pD̃ ‰ˆH X8™+ ú‰^đ̉'Nèw0¢p̀È}7–±g;̃¼©åUø:¬}DDÄ‘H9Đ¯Ê*o93¢p>\ôMX†I±|Ç™àbDDâ±p$2ËJ¬”bù;ëđpư>µj{¸8ƒwµY%΂‹XÑ9 G"óŒÄH)„IRüáÈ\¸ ƒ‚DßƯ»ëă‹ơq0‚E§FDDzN¢ *Ư²‘mî)bemi6Öâèà€Ü\Cv́Ö |đ8̃¶ o¾ù8îŒÎ1x<ä×øƒÖK—à`ÖưD¶†…#‘2j¢f¡ÛŸx¢¤#å…£››èûPT­Z8̃›4ÑÇ̣Âñ[|» uñl̀fáXÄ;ë{‰Eß„íàó$¥đU5‘é¾Ç÷R<S Ư§ä‘1±¶Û{ϤTù¸"¹›¸i܉ˆˆHi,‰L7³¥xFHñ.Ù|Ơv]8Ôe3;ïËÿz¨'ú6ˆˆè1D¦‹G|¡Û›‹G>8ÆÆÈ[ÓÓ‹ß×ѱđị́Iy¾Å·¢o‰ˆÈ®±p$R@uT—”ÏÅăí]̉Á† )•ä…cI «EUØC1Tç`è[""²k,‰L$ŸÁQ̃*à̀ÑÉ©„©…ă‘#…ïsWEß‘]cáHd"yë×›xÓŒ3Ù.yáX̉ù¦Mơñ‡æùª6j‹¾""X8™́ÖØî GymZZ¯ä…£¼¹—ˆˆ¬‰…#‘Ñă¸Á˜|ß>|h̀¹ä-698ÆÙÙđ}å]Bå ·Ê¡œïÀÑwEDd§́¥pÜ´iÓ€BCCŸ~úéiÓ¦Ư½{·øư=zôư÷ß÷íÛ744´cÇ&L¸`Ăë‘‘éàh4yáX¶¬è;³cQå…£q ·DDdvQ8Ο?úôéqqqÍ5swwß²eËo¼‘™™YÔ₫999¯¾úê—_~y÷îƯ6mÚT®\9""â…^8tèè[!UXƒ5Rü$,j7ùÄ„E2f¬q©dLá(o,X8À)>.ÎCD$€í111Ë–-ó÷÷ß¾}û²eË"""†ưå—_uȆ =Ú­[·;v,X°`íÚµ?üđ€éÓ§‹¾R»ôt}\̣jØAáhêû÷cÇ̣oa7G""ál¿pܸqcnnîĉ+T¨ Û2uêTOOÏmÛ¶åææzÈÑ£G¼úê«NNNº-­Zµª[·îÅ‹ïܹ#ú†H°»Đ÷sxOçûṼNfĐ$qq¢oÈÂä-÷ï›s¦º¨+Å˱\ôÙ#Û/:äààĐ^ÖøăèèØ¶mÛääd]XP@@y¨ƠjïƯ»çàà •’d·–b©ÏÀŒ|ßʇt7û·­’4¯º¹‰N˜ˆˆfă…£V«ơñññññ‘o¯]»6€ÄÄÄBz₫ùç]\\>ưôÓưû÷gff^»víƒ>¸råÊ€<<Reñy©k×®¢SP /uC§Ư ¼ưrwwp¿ˆW)))³gÏNOO iĐ ArrrTTÔo¿ưÖ²eËÎ;—tMˆ‰‰}ë¶&00Đü“(«"*Ÿ•q9׬iÍ{̣<½““½Kºnß¾øôÓÇqllƠ¶mó|;ăÆc¼.₫Ù÷ç÷}ß·₫]E…?¢¥©²ø<ÍQđŸơ‚-DvÂÆ G///F“‘‘‘o{ZZ₫kw,hÊ”)G™:uêk¯½¦ÛríÚµN4éÿ₫ïÿjÖ¬)ú¶H˜ÿáR\pêo¹råJ>[69ûw>¼ª~ê)}¼{7†/rÏS8%ú~ˆˆ́÷qtrṛôô,ز˜’’@g-wëÖ­Ư»wתUKªTªTiôèÑYYY¿₫ú«è{"‘a‘ÅØbö4h.9{XoĐȹ‡Ö¯/d£3ŒX†ˆˆ”eă…#ÿääd]¥(Ñu&ó÷÷/¸rr2€5jäÛ®kh¼}û¶è"‘~…₫//xåûöúu}ܬ™§“¯Nh…ăÍ›Fí“SÈFyCï13ülDDd>Û/;uꔓ“óÏ?ÿH[´Zmdd¤··whhhÁưkÔ¨áèèxá­V+ß®ëßPË₫u'SíÛ§Ÿ{΀ä-püÑ2Œ¼¡W̃LDDV`û…ă€.\¨ë×`Ù²eIIIưúơ+S¦ŒnKzzzBB‚nĐ™««kÛ¶m/]º´`Ái†đ .,^¼ØÙÙ¹§æ³ciH“âèYpyáØºµg”¿‹5ºS¤ÍÊ;wV~5¡ïd¼+D'KDd_l|p €J•*½óÎ;sæ̀éƠ«W›6m.]ºtàÀ#ôë̃FFFN4)((hëÖ­fÍƠ¿ÿÅ‹‡‡‡×«W/99ùÈ‘#¹¹¹Ó§ỌÉ'MO…J¹ñ¢:2fï^#Ï Ÿ±Ư Ë–ÍóR¾$­[cëVÑ9Qal¿ÅÀđáĂ¿ụ̈ËÀÀÀđđđ;wî 2dÍ5'w”øúú†‡‡9̉ÍÍíï¿ÿ¾råJ»ví6nÜ8xđ`Ñ·B"Ă9)î‚.wø÷_#Ï(Ÿ‚̃ÙvÇ|T­jÔị̂ÆÚB;×G}Ñ·DDd§l¿ÅQ§gÏ={ö,êÛîƯ»wï̃]¾¥\¹r“'Ov́˜4¨¹L™2;v?~xđ è4ÉN}‡ï¤¸6jÜáĐ!},ï¥Wœ¼s…Ú,y‹£‘µrQOè%¼$ÅwpGôÙ µ=Z¶l™. \¸páñăÇ>|üøñ%K–èVmÉÉÉY·nèLÉNå „¾¶FOâh?ä- ½—7úÊkz""²(µ·nƯJMMP®\¹5kÖtîÜÙƠƠ€‹‹KÇ׬YăîîàÈ‘#¢3%{Wu Ư.ïgd§>[g|‹cƒ%́Đú©ø9>†ˆÈjÔR8V©RE7±bHHH… ̣}ëçç× Aº̣‘ÈÊ₫ÄŸR\TG³zăÙö²1̣ÿl kq4ªÉö2́cŒ‘ ¨¥pЦMñññ=Ê÷UVVV\\€æÍ›‹N“́Ñ<̀“âQUè>W¯qûi¢4¬ÅQ̃IôøñÂ÷ñ€‡è›!"²;**§NZ­ZµäääñăÇ_¿~]Ú~ëÖ­É“'ߺu«R¥JcÆŒ1ă D&ÚƯR\e•¿€‘3–bÆ·8Ơ”[u¤8Ñ¢oŒˆÈ.¨hÇ3fTªTẹ́åË»wï̃³gOíÚµ}}}“““/\¸•• råÊŸ|̣I¾£-Z$:q¢<|}?†-yÉׄ߻£G²Ï:¬“†·/Ç̣X ú̃ˆˆlŸ Ç;wJqNNÎÙ³góípH>ß ‘̣1E1eH5[‹VT‹c‚¤xV°p$"²½ª&R§uĐOơ:^/tŸ›7ơ±¡…ăưûúØ~Z>4öˆ‹K̃'¢oŒˆÈ.¨¨Åqt¡¯£ˆD[åR<ƒ ƯgáB}lè́ß̣—¶öÓ⨨j¨Æ!ƠDDÖ¤¢Âq„ ¢S *D$"KÜ';[·jeØyå/mí§ÅÑ`NNyj¡Âö!>ÔÅû°¯58ñ:‘eñU5‘äka::vŒ]µ8:ư7jûö%ï†0)^¢o’ˆÈö nq́ׯ€ *,Y²D—(ßzÖD• }«WOô,j7SQ—·8ºº¾Q «Z FѼ9¤ñrÙÙ…Wâ•XÉÚ‘ˆÈ̉§NP¹re)&RyÇ¢FÆHK3₫Ô†MLc#ªU3¡p”<È忉ˆT¯ª‰#/_À JÚø‰iJ1ăßÅç+‹RơDß‘Üâ8sæLnnnRL¤*GpĨư ̃ỠZ$’Åa›ŒÉºx6¼„—Dß*‘-\88°Đ˜¨”2b5u»mq|đ..F]Lá8ƒ¤ÂñWüÊ‘ˆÈ¢øª¨HéH—âñbQ»Ég̣6¢p,q²["oq4¾b‹+̣«¨(ŰAô}Ù8Í㨓••wé̉¥œœœBwè̃½»èÉ^ü€¤ø5¼VÔnÿ₫«[´´:É[Q»¶è„ˆˆÈ**µZíêƠ«çÍ›÷èÑ£bvcáHV#/»¢kQ»É_¤ÑâhWä…£Á-ÈÍ-y·†hhÑwHDdTôªú—_~ùüóÏ‹¯‰¬é(²›¼p,_̃øË”-+úF-ÏËK<*ÈÀ*|8†KñŃ4è""2‰Z׬Y#Å₫₫₫FtRD%3eöo9›_6&ƒ[›7Ç%ïö^›ˆ‰ºx%V>‹gEß!‘ÍRQáxé̉%sæ̀éÔ©S¹råDgDvíHq?·¬ÑÍ›æ]É̃ª6©Å1: ¾›<¤x=Öÿ„ŸDß!‘ÍRÑ«ê5kîÙ³'«FÎÀ‘1 `‹c œœˆˆ¬FE…cóæÍ¤¦¦N„È[8ö@Cñđ0d¯ØâX„  },º^P}Ô}WDDvAE…ă›o¾Y³fÍÄÄDygG"Q᱇1¤Z¾¸µ½µ8¦§›pPñ-̣ñ1»°KôÙ,Á}ÇŒ#ÿèëëÿé§Ÿ₫üóÏƠ«Wwp(¤®]´h‘Øœ‰ääÓxQ8Ê[Ứ­ÅÑ$ÑÅηó^“ÖY‰•ÑQt¾DD¶Ipá¸sgásgÄÅÅųX‘…e"S»¡[1{8‰£¼ŸŸ½µ8Z€¼¤øGü¸ëDgDDd›TôªH=~ÄR<#ÙÓÄ‘-DDT nq=z´è'@TˆƠX-Å}Ч˜=å…c@€Á·8º»‹¾]«¨VÍ„Uªë×Ç©SíŒàĈ¾I""'¸pœ0a‚è'@Tˆ(D¸çæÍ&]Àà‘Ŷ£jU Ç:u -‡aØ{xOïĂ¾Öh-ú†‰ˆl_U™%+Ë¤ĂŒ/¡J=“̃È?+[æ̉¥âö|¯J±¼Á˜ˆˆ¤ºÂ1>>~ƯºuIIIîܹ3uêÔN:ơéÓgñâÅ\Ƭï9₫øăœœƯÇèèh©jÔ9xđà–-[D§I¶Õ^ơ2^6đ¨¢VR.œ®T©’>¾~ƯÀƒä'ßâ 2*‹¾I""§¢ÂqÅZ­ÀÓO?ííí½k×ăå6løñÇ—-[À/¿ü":M²}Û±Ư„£6·ÊÉ Ç«WM8A‰…ă0 “âhDƒˆˆ”¦¢Âñ́Ù³5j´råJ__ß={öè¶O4饗^êØ±#€ .ˆN“HïÊ},©J…¨,k¼vÍ„$'—°ÇÇY Ç+W®hذ!€¤¤¤3gÎđđđhÑ¢€Ê•+ÈÈÈ&Ù‘§t‘·±p,¼ÅѤ±DA’bDD– ¢ÂÑƯƯÀµk×DFFê^[·k×ÎÑÑÀưû÷øøøˆN“lÜøBK#ï…kbáX¾¼è;¶–2eô±1…£ió£'£¤öI""2 ǪU«Ø»wï’%K¾ÿ₫{ƯÆN:¸|ụ̀îƯ»øûû‹N“lÜaè‹ÁXüỊ̂G'Ó¦(¨l—ă9Œ)ªÈ5ଠDD¤¢Â±W¯^‰ˆl G''§üqôèÑO=ơTHHÈÈ‘#§M›&}ëëë»zơê *ˆN“́E]ÔµÆeX8–D>ÏQ‰M¼M¡ß›…#‘âÔµrŒ³³ó„ &L˜ ßèááñÛo¿;8¨῭%›´û¥X̃vU"WWS/iŸ…cR’áûÖ®­Á°a†‹XÑ÷IDdkTT8~óÍ7º oß¾º2:ÎÎÎuëZ¥í‡́¼Ê¨ÂѸ!ỢuŚspŒ©èTJDDfPQá¸eË–›7ohß¾½¼p$²yáX F´W8Ê_ÔÚg‹£©̣®BZ¸—ṇ̃OøI§!Í&MçCDD…QÑËß~ưúé‚Ë—/‹Î…́TŒ˜a₫̀}̀ÂÑ:²²J̃‡ăcˆˆ,GE…ăØ±cûôé`é̉¥·­Jdº (y–üµ©q UÛmáè́l…‹tA)fáHD¤,½ª?~<€+ÆÆÆ>÷ÜsuëÖơööÖḥOç»hÑ"Ñ™’m:óRlHGyáh\/\yáh•ZJ-*UÂÅ‹&§_¨á₫Å¿¢ï™ˆÈ¦¨¨pܹs§gff=zTtFd_Œcú@ c¦¿¶)•+›V86i‚­[E'ODDªzUM$Öl̀–âhPâ₫† Ô(œ1³ÚSßËË{<|X̣₫̣·ƠDD¤ µ8=Zt d×rcÔ₫˜z%F’=:r­[—°-Ô@„.̃ˆ/âEÑwNDd#TT8æ›÷›HG8Zö,¢çÏ/¹p\ˆ…‹đ¸3ôZ¬eáHD¤r111/^¼{÷îóÏ?ïââ’îéé):)²ewqW_Á+FëçgäÅnß}»‚È Ç;wàăcàqúØƯÈi·‚½#‰ˆ£ºÂqË–- .¼ö_“LëÖ­=<<:tèđÚk¯7®à k"E¬ÅZ)6¶p|ê)ÑÙ—̣er®]3¼p”;vLô]Ù1u ™={ö´iÓ®x‘—‘‘±hÑ¢™3gNl–¼ṕˆFËÂÑP̣GSßן8aĐn¡}·DD6HE…ăéÓ§W­Z¥‹ờ¤VÆơë×:tHtd›ø1̉Çëc†R¢p4|B¥¿ñ·è;'"²**—.]ªƠj>øàƒ#²)̣<==,Xàââ`ơêƠ¢Ó$ù4£¡&·mÙỚßÊ—×Ç.åư äÍÉDDdgÏĐ½{÷!C†¸ººÊ¿ể¥K»víœ;wNtdăº£»!»É Ç'Ÿ4ơbvµ̃`>FƠªwú'đ„³p$"R Çääḍñ“2AAA’’’D§I6ègü,ÅŒQfa#{.\>Çœ₫YÈ}·DD6BE…cpp0€B{1jµÚƒ¨Y³¦è4ÉÉ[¤b !‡(3¶× G#[å…£!‹Ç¨ŒÊíGDDSQáØ A?~|TT”ncbbâ={Æ«+ëƠ«':M²Aá7öÓ—‘cáh0yGR›{åÇgpFô Ù#Gôơơñúë¯ë6>|Ĉ;wîàááÁe ɦ°p4˜¼ÅÑÀÂQ>°úu¼.ú†‰ˆl G__ßyóæù1'°‡‡Çœ9s*Ùó?´dyơQߨCxÂÈîê—¨É3!¶½ÉÍ5jwùúö¨‹ºRœˆDÑ7LDd ÔµrLË–-ẃØñư÷ßÿóÏ? nnnƠ«WoƯºơÈ‘#=<2É NÙÈ/‘íPÑ«j¹œœœË—/Ÿ>}ụ́åË999¢Ó![&/}`ĐêÉÑÑú˜…£Éÿ¸ƒ;¢Ó!"*ơT×â;₫üÈÈȬ¬ÇS¯•)S¦cÇ“&M*jG"s˜Đ"eÖ²1̣ù í°÷E@®_·ÚƠ^Á+?à]¼k'`‚èû'"*ƯÔƠâøóÏ?÷êƠkçÎRƠ +++""¢G[¶l Ù²*¨bạ̀Â1(ÈÈËXx©=µ3£‘µ¡ÿÿÑë€R̀ơcˆˆ̀§¢ÂñĐ¡CŸ|̣‰üÅtyÙʶ9993f̀8ª̀zDɧ÷3¼ƒ£Y³³p4•9‹Ç8‚#¢oˆ¨ÔSQá¸nƯº́́lƠ«W_°`ÁñăÇ>|âĉE‹é^Rgee­Y³Æ´“oÚ´iÀ€¡¡¡O?ưô´iÓîʧD)ÂÉ“'ÇÛ¡C‡fÍ 2äßÿư„Hy¦Œ1ë漣÷ Èâ"‚DD"¨¨p»víZ777‡6á̀óçÏŸ>}z\\\³fÍÜƯƯ·lỤ̀ÆodffsÈ®]» ´k×® *„††;vlèĐ¡»víưHạÂQ>í_ñ22̀¸$ GS™08€nè&ú‰ˆl‡ Gơë×È÷•ŸŸ_Æ 8::{Ú˜˜˜eË–ùûûoß¾}Ù²eC‡₫̣Ë/‹:ä₫ưûï¾û®““ÓÚµk7lذlÙ²ơë×;;;đÁ¹FÎZL*'`z¿«ö=¡ |Îs# pÓ GyC̣l}ÿDD¥› ÇĐĐPñññ=Ê÷Uvvv||v́ؽ{÷êÔ©ó́³Ïêº]’ÍØŒÍRü̃3á ©©¢ï¡Ô‘M•€Í›Ñ¶­i§9ẨDD".wîÜYèö́́́³gÏæÛ˜’’RÔ₫EÉÈÈÈÉÉṇ̣̃Ê·]W¡̃¹SÈJ=JMM­U«ÖG}´~ưzi{ƠªU¿₫úëúơërƯààà|[¶oßnùÇi³®\¹b‰Ó®¨¼Îăê Ơ`ÈQ.8;ê |;!!ͨ‹Êg±OH0è³Đó4ˆF#=;÷~úçgøÓ«_¹₫)çSÆe‘ÔFñ‘*‹ÏÓL]»v‚Z¨nåeé†NëFdËé–À¾ÿ~ÁCRSSÄÆÆ̃¾}{Μ9íÛ·đàÁæÍ›-Z4a„­[·̉î#úÖm%Ö :Ó&œ?*J?÷œ_` Ÿ‰—÷÷¸’ÖạyđÀÇŒ4 ¿…0„MÄD]|1đ¢iỪ‡ ÄGª,>Osüg½` ‘\8=Ú¢ç÷̣̣̉h4o¦¥¥á¿vÇ|tƒ»̀=»cǺx́ر׮]Û²eËŸ₫Ù¿±Ä’˨SÇŒ˜=Àî¿ö i ¾‚W¤Âq ÖX¨p$"²‚ Ç ,»t¬“““§§gÁ–Å””̉8k9777FÓ¡C]}öÙ-[¶œ;wŃ#K艆ïlÖ²1r,¯CCM)} ïâ¼k¥Ơ«‰ˆÈX*Um!₫₫₫ÉÉɺJQ¢ëçäïï_è!*T(S¦ŒF£‘oÔ½¡Ö Ó!°ë¤x(†~ bË^1¶0~Tµ|ñ­Ö”kæ Ç”Ăˆˆ€đÇ|<¸páÂóçÏç«óäΜ9c̀)Ñ©S§˜˜˜₫ù§Gº-Z­622̉ÛÛ;T₫¯L‡V¯^}₫üyƯàkƯÜ=ùz7I*"Ÿ̉¯?Œè~PôϦ‘Øâh|ă¡|₫£cÇŒ˜©*ªÊg_"""Ó¨¨ÅñàÁƒC‡ư÷ßï̃½›S4cO;`À‡… êú5X¶lYRRR¿~ưÊ”y<çszzzBB‚4è¬OŸ>¦OŸ. »>ỵä+<==;wî,ú9‘2₫Â_®*ÿfáXØè´âÉÿÖ3ªÏ€¼QùN‰¾s"¢̉JE…ă·ß~«5íåS±*UªôÎ;ïÄÇÇ÷êƠkÆŒÆ ›?~HHȈ#¤}"##»ví:jÔ(ƯǺuëN<ùĉ]»v=zô°aĂøèÑ£™3g>ñÄ¢Ÿ©…»»ñÇÈÛØøªÚx̣Q¡Fơ/<¸kDßQi¥¢WỞX÷₫ưû÷èÑCƯl¾áÇûùùưöÛoáááC† ™8q¢{±ÿ́9̉××wÍ5ûöíóööîÔ©Ó¸qă‚‚‚D?$R^K´4íÀ"z:K^8²ÅÑùÄÁAá¦Đ={ö́YäÈÙîƯ»wï̃=߯~ưúơë×OôS!‹Ø„MRlÔÈ9SÖ”a‹£yL̃~7L<’ˆÈî©èUµnhwwwÅ«F¢|~ĂoRÜ} ?đÂ}̀G)ô2áÁÑ7BDdTT¢ 6̀ÉÉ)..nÍ5–è́H$ù ?I±?ü ?P̃¯Î”ÂQ̃â褢ö~«T1ÄH)¾ăgƒ$""U½ªnܸñ»ï¾ûé§Ÿ~úé§ß~ûm… ̣ͤ¨³uëVÑ™’ư’¿mØĐøăM˜½ÚöTª3Œ~â $'›ràP ưßéâ5Xó.̃ư ˆˆJçÏŸ_²d‰.NIIIQlº<¢"ƠFm£ö7wÙ0·Å14;wr`k´–âƠXÍ‘ˆÈ*zU½téRĩD"ËùÿJ±±#c̀]6ÆøµRlÙ…£ùÎâ¬è§@DT*©¨ÅñđáĂº eË–]»vUp:"9ù4~¯âU£MJ2ïÚlq„¹ĂÉåƒÙOBưú¢o‡ˆÈ¨¨ptttàéé¹bÅ '»7@–·«¥¸ ªXơÚ78L̃ÇÔT”/oÔÑù1ªp| /mÀ]œ‰LW¸~DD¥Œ^U7ỉ@@@«F²¨t¤›ggÑ·QzÉ GăßƯëg̣6ºç€¼g×!"2 ÇñăÇ{{{Ÿ?>22Rt.d* ‚ÉÇ*̉ÓÎNÉ_U›÷î̃رJƯ¡Ÿç_̃đLDDRQÛ̃—_~Y±bÅ»wï¾ñÆơë×÷÷÷/t:E‹‰Î”J±ÄH±ÉkÆ€…£9ä-Ö-åöc¿èADTú¨¨pŒˆˆâS§N:uJtFdƒ̀sé’>6e½Ảyâ }l̃0sÎÙEDde*zUMds0Gëø¹ûöécs[+Vư$ÔÁêẰ» ‹è{&"*ÅTÔâ8zôhÑ)íËAÉÇ•Íưgʲ1rv»Pu>& L^”´jEàñËơX?ƒD?"¢̉DE…ă„ D§@v¤,Ê{ˆ| ¯¹£ªÍ›ËĐv˜ôªºḾÙcâbá"<î'½ «X8E¥¯ªcbb"""~₫ùç´´´́́́û÷ï‹ÎˆlÁU\•âaf́áæ.#ÇG“Z•ê`ú₫}ÿDD¥ŒZu¶lÙ²páÂkÿµC´nƯÚĂĂ£C‡¯½öÚ¸qă gMd UX%Å&JöÇcá¨cváxîêÔ}DDvC]-³gÏ6mÚµo¯222-Z4sæLÑ Ré&/[¢¥µ/Ÿ­ùªZǤqṆ̃ÂÑ„fà6h#ú¶‰ˆJ+§OŸ^µj•.Ö-?¨#µ2®_¿₫Đ¡C¢Ó¤R,±œGöăi yë[Í¢M(åÍ¿á7ÑwCDT¨¨p\ºt©V«uppøàƒ9"m÷ôô\°`‹‹ €Ơ«¹Ø‰gb;yS:[bfá(o„&"¢©¨p<{ö,€îƯ»2ÄƠƠU₫U—.]Úµkàܹs¢Ó¤̉*ÉRĺÔßù˜X8²ÅÑL(d¿÷~Çï¢ï€ˆ¨4QQᘜœ 00°Đoƒ‚‚$%%‰N“J+3GÆ(°lŒ¼ÅÑΠǼƒ3.Y“ Çàà`…öbÔjµP³fMÑiRiµú~íÑ̃ØĂå-[ ´8ØM̉Vˆ~SßME?"¢RIE…cƒ 8p`üøñQQQº‰‰‰{ö́;v¬®p¬W¯è4©´:‰“æ®páhç̀np-_̃¬ĂåMÎÛ±]ôă "*5TT89̉××@DDÄ믿®Û8|øđ#Fܹ́€‡‡—%$Qä…£ƒiÿƯ˜´Jm2»p4spù‚1_à уˆ¨ÔPQáèëë;õ<ŸB¿ơđđ˜3gN%Ño¸¨”JEªÄ@ΠÀ²1lq”˜ư²™…£ô¿gvc·èÇADTj¨¨pĐ²eË;vŒ5*$$¤\¹rÜÜÜêƠ«ö¿ÿư¯cÇ¢¤̉j%VJñkxÍ„3ܸav,%¶8=+úvˆˆ́†ê–twwŸ4ỉ¤I“¤¥¥¹»»‹Îˆl¼p|ωIâæMÑA5ä…ăưûđô4öù©[×èBz ÇD?"¢RF]-ù°j$¥D#Z©SÙùxheÈ_U›Ô+&gZ/‚á.ÅCDd Á-÷îƯ3ö///±9“3³wy[¯_G:æœ̀´Âñ5¼6ătñJ¬́®¢ Q) ¸plÑ¢…±‡ÄÄĈ͙J¤H±|8­iX8*@^8=ØÜ´ÂÑ nR¼ ›D?"¢̉AƠ¯ª‰!ïà(Ai8–!9ùä fJI1óDDd(dûä…ă³xÖ„3(0û·œ¯7˜¸ÁæOG-£ª5Í“O>Ù¸qㆠ–7sQ¢¼̀\3œTÎÔWƠåË#5Ơ´CáGñøÿµÛ°­º‰~DDj§–ÂQ«ƠÆÆÆÆÆÆ₫̣Ë/µjƠzê©§7nZ£F Ñ©)±lŒ[åLmq|ê)DFuåá>cuñJ¬dáHDT"Á…ă–-[NüçâÅ‹rssÏŸ?₫üùŸ₫€——WăÆuEdÆ u³‚îôư_ÆË¦d»²³µÈ»L̉₫ư¦g₫ü ®p•âÍØ,úA•‚ Çúơëׯ_đàÁîß¿-Ơ‘÷ïßpï̃½¿ÿ₫ûï¿ÿàèèôûï¿‹~hTÈ̀öC?ÓN’›«hN}û|"jS¦ŒiÇ é—ÁéÓ }#DDv@-¯ªxzz¶iÓ¦M›6º—.]:qâÄñăÇOœ8qîܹ́́́œœœsçΉN“J™ïñ½÷…¸íÁ}\¹²È'¢6éé¦פ‰>>|ØÄ±Zü‹E?"¢RC½£ªË—/ïîîîîî^®\¹2¦¶IÇyÏæâbê‘W¯êcQ‚|ÖđÇMV‘₫slq̀O‰¦÷y /I±¼‰ˆˆ báH6ë4NK±4rÖÊlq̀G‰¡ạ̊™™ $µ{…="¢̉@đ«ê­[·~d³†`ˆ›3¤úÑ#%²a‹c>̣Â1+Ë´ơcä-‡ă¿ƠˆˆÈRAAA¢ŸÙ¬sĐ¯3Œ`ÁÙÈW!ä}U}ơ*L¢U^89bzáØ}~ůº8)đưtˆˆT¯ªÉf=€ÂµZ@€è[²%̣GS›cåó™Ó£àM¼)Åßá;ÁO†ˆHÅX8’í«…ZœG‘¡ôX¾G³™S8vFg)fáHDT d›₫Â_R<#M>ü ³é“8RẠö[%:€*5OWâÄ<"¢̉€…#Ù&y»‘9…£|GeZ}}Å=µRÁs¸ˆNˆ¨`áH¶éü"ÅåQ̃äóÈ_€*S8*1 ­QAá(ÿëâ Θq&""[ÆÂ‘¨8̣ÂÑß_‰3*1ñµ­1ăUuHˆ2)È Gvs$"*àÂ1333333;;@NNNBBBBB‚ègB6¥:˜s¸üUµ2ØâX-JXª ưj’,‰ˆ"¸plƯºuăÆ×­[àæÍ›]»víÚµ«ègB¥̃J¬”bs:88{VéäØâX-̣ÂQ©IÖâ¡àBD¤V‚'øđ!€;vÔ¨Q#55U·qÿ₫ưÅ̉ªU+±9“úÍÅ\)–¯D,Œ|l6[ JO7ùPùP÷Ă‡Ñ«—éY!è.ˆ~DDª&¸p|â‰'nƯºuøđáĂ²®dÆ +æ¥fƯ Û%_3FäMa,Ơ°¡>₫̣K³ Ç`K…ă6lë†n¢oˆHu¿ªn×®è'@dúơÍ8X̃‡¯ª忦]]Í:ƠlâÅX,úΈˆÔHp‹ă»ï¾ëää´wï̃¤¤$­V›™™  \¹r¢ •b Đ¯z¯+uÚæÍÍ8˜-Vqđ Y‡—ƒ₫7ÏVl}7DDj$¸p,_¾üG}¤‹¯]»Ö¡CÇưX¨“·ÆhsN¯Í*å-̣ơ•íœîÜQđ|÷#""[§¢y]\\}öÙgŸ}Vt"TºÉ ǧđ”9§ú÷_}¬X‹#IÔ÷Ö¾ô}$Ó&:""ƠQQáèăă³hÑ¢E‹é>æææ̃¾};''Gt^TÊd C©SÉ_}††q"¬Œ¢F ½µW° w ÆHñ",²ú!"R;:éééóæÍëÙ³găÆŸyæ™F=ÿüó_|ñEZÿú'ă!È̀3˜ÙgN-…R¨ÅѬÆà¼ĂsR̀ñ1DD©«p6¿‘X₫÷Æ>́ódˆˆÔJđtV¤pœ…YºxFœÆiqˆˆHuTÔâx₫üyÍ›7—ªFIPPPëÖ­Áơ©X·pKû£¿‚gVpøé)Ôâ(g~á€)>ƒ3Ö*DDj¦¢ÂQ§¨ùwrss8::NÔkHñxŒ7ól7oêc /Ñ”*9~ˆÈ¢TT88tèĐÉ“'ó}uúôéưû÷ 2w‚²ạ± Ú˜y6ù0 y/:³<ñ„ƠŸJ)¡¦¯ºIq:8 ˆHOE…chh(€‡6́›o¾9räÈåË—9̣Í7ß¼úê«<ö!*T*R<›ü¥§b-\¨º(æµ8º»+™‹¼¹Z₫שhp̀ˆ#₫øăË—/§¥¥-^¼xñâü³ïV­Zơ7̃&•uPÇü“È Ç2eÊŒ…cQ̀kql̃»v)–KWt•âXđ̃÷\ˆˆÔEE-®®®_}ơUå"₫e­T©̉W_}åêê*:MR© Ø Åæwp„‚³Ë©oufµ0¯ÅQ̃$œ›«d^7pC̀!"R%4h>~üø† –/_@ụ̀å6l8nܸmÛ¶5lØĐä3oÚ´iÀ€¡¡¡O?ưô´iÓî̃½kø±×®]k̉¤É;ï¼#úñPqä¯ßÄ›æŸđ₫} dÉÇ¢(W8*RñWEUÁ„ˆH•TôªZÇÅÅè˜1cÆŒ––æ®Dߥùóç/]ºÔÍÍ­Y³f—.]Ú²eË… Ö¬YcHû¥V«}÷Ưw¹R¶ú©w®æ‡ơ1[‹’‘aÎṆ̃ÑKÿ₫‹–-ÍMg<Æ¿ƒÇ+nÅÖçñ¼ØÇCD¤êjq̀G‘ª1&&fÙ²e₫₫₫Û·o_¶lYDDÄĐ¡C£££¿ụ̈KC_µjƠA‹¼³¤R£Bó—÷̃c‹£eÈ rE₫{åø"¢B©ºpTÄÆsss'NœXá¿ÿ§Nêéé¹mÛ¶Ü’:C]¸pa₫üùuê(0̉‚,ê ôÅÂ` Vöäæ©–¿„e‹£åíS¢éY¾^ǻ}ODDjaû…ă¡C‡Ú·o/mqttlÛ¶mrṛÑ£G‹90;;{Ê”)̃̃̃S§N}T‚%X"ÅâCóOxï>6ï%*°y³>vR]çÛsñ¢è ˆˆl—Z­666ÖÇÇÇÇÇG¾]·ªabbb1Ç~ûí·gÏưüóÏ=<LHH0ÿáá̃€—.®TébB‚ÖäS=qê”ô—‡"¹™¯äçi-•+VtNJ̉Åf>—h9•΋e^ü¾Ê÷ºxfề9IsÙY=Ôfđ‘*‹ÏÓL]»v5ÿ$¶ÁÆ Ç̀̀Lnnnù¶ë†ƯÜ/b•̀̀̀)S¦T­Zơ­·̃2íº111¢oƯÖơƠèÿxϳ§áΜÑÇuëÖ0ë\²×̃䦵dR«NR$¥§ŸÆÿ₫§äƯÊ₫ÙT~ÓÆ̣KØ_%Ô†đ‘*‹ÏÓÿY/ØBd'TZ8ÆÄÄ\¼xñîƯ»Ï?ÿ¼‹‹Kzzº®ĐX^^^&£@'5Ưô:EsΜ9W®\Y¿~=ç/¾ÂWR<“9ç₫ưÊåwù²µŸH)RU±é[·Ö(WNô­Ù"ƠơqܲeK‡zơê5~üø3fܹs'--­}ûö ,Đj~]èäääééY°e1%%@…ÂæY9xđàúơëGÙ¨Q#у "/; ƒ"ç|đ@¹üX8£Z5¥ÎÔª•>Vd`5€îè.Å÷pÏZ…ˆH½ÔU8Î={Ú´i× ¬Z›‘‘±hÑ¢™3gpNÿääd]¥(Ñụ÷÷/¸ÿ… ,^¼8ø?}ûöđÿ÷ÁÁÁÏ?Ïy€U'™¢S(–1ËÙyáh̃â1­[ëc¥ Gy¶üï""»¥¢WƠ§OŸ^µj•.vtt̀ÉÉÑÅÍăïëׯïÑ£G³fÍŒ:m§Nbbb₫ùçŸ=zè¶hµÚÈÈHooïĐĐĐ‚ûW¯^]ÚSç₫ưûQQQ•*U ­X±¢èçDE E¨ù'ɧ¶C´©ḥÂṇ̃es&H—wƠ´iÓ¹sç~H”ß ’b¥:8ÊÉÛ±Hyù Gùûf3(U8Ê¥#ƯJÏ„ˆHÅTôªú́Ù³ºwï>dÈ|£Rºté̉®];çÎ3ö´•*Uzçwâăă{ơê5cÆŒaĂ†ÍŸ??$$dÄư$m‘‘‘]»v5j”èg@FÛư0–!¢È9åƒçX8Z–|’Kå:ƒ¦¦*– +8BˆHOE…crr2/ ((@̉S¾eøđá_~ùe```xxø;w† ²fÍ‚“;Rit —?§¼½JÉÂ1 À ¤Så(¢X!Åó1_t:DD‚©èUuppđ±cÇ:Tđ+­V{đàA5kÖ4íä={ö́Ù³gQßvï̃½{÷îE}ÂyƠ¯j(u*yá¢\Ê ¶Mf5j(¿̃à z/ëâ/đÅ$LđdˆˆTCE- 4pàÀñăÇGEEé6&&&îÙ³ǵرºÂ±^½z¢Ó$Y‰•Rü.̃Uê´–è!°p,‰Ù…£¥ûÜÀ «= ""uRQ‹ăÈ‘#ĂĂĂ“’’""""""t‡.íàáá1zôhÑi’̀~¸QP¬‹ª|Ù%±p,…ăO?=ăăaêû‰üê Î9Ư»ˆÈ&©¨ÅÑ××w̃¼y>>>…~ëáá1gΜJ̣®ôd÷Îă¼èJ’›«Y8¯èµă d‰©‘·1{1[ù©© G-[¶Ü±cǨQ£BBBÊ•+ÀÍÍ­^½zaaaÿûßÿ:v́(:AR©Xd܉“ù-̣̣V4å–×£BÉ'fU°p†aR,oä&"²C*zU­ăîî>ỉ¤I“&HKKÓͼHTĐøQ́à(§@Ÿ9yáÈG+²PGƠËPăĐo""«QW‹£$&&&""bëÖ­iiiÙÙÙ›&zoJñLPê´YYúXé¨Y8 râ„’g D ù'!"²ªkqܲeËÂ… ¥åª[·níááÑ¡C‡×^{mܸq̣̉ƒD©Pn–g…'q”~~(¥QŸ¡öÑÊ­Đ* ºø;|7#EgDD$†ºZgÏ=mÚ4©j”ddd,Z´hæ̀™¢$5ª%ÿôS}\·®Ù§Så¤ÖêRbåư"fa–ètˆˆ„QQáxúôéU«VébGGGi»Ôʸ~ưúB§';$_Ïc:¦[è*AAfŸ‚…c‰-Ÿ~Úâù^Á‹_ƒˆH­TT8.]ºT«Ơ:88|đÁG‘¶{zz.X°ÀÅÅÀêƠ«E§Iªđ >‘â1£à™÷́Q4Q%R´plÛV§¥)™f=pơ""5gÏĐ½{÷!C†¸ººÊ¿ể¥K»víœ;Çix °̀Ơ:*z:%’ÏR¤Ơy²víôqd¤’iʶçb®5 ‘ú¨¨pLNNXøèÅ   III¢Ó$u F°è•j‘<6Ẽâhv-/•m<„AR̀nDd·TT8(´£V«Ơ­U]S©EĨ4›‡yRl¹̣٤ɂ-]\ô±²-r)H±đC!"R) 4pàÀñăÇGEEé6&&&îÙ³ǵرºÂ±^=v3¢<í=C0DÁ3çäècyÛY¢…£Ü¿ÿ*œiK´”âx`ѧBD¤N*ÇqäÈ‘áááIIIºĂ‡—vđđđ=z´è4I¼{¸g¡3Ë_n²p´’ ô±º»„NÇôçñ¼.~ÏF!JtFDDÖ¦¢G__ßyóæùøøú­‡‡Çœ9s*Uª$:M, ú±²îPxEJùËMùø\p¡jC(Q8Zn•€è!Å{±×*O„ˆH]TT8hÙ²å;FR®\9nnnơêƠ ûßÿ₫×±cGÑ ’xâC)̃‚-Ê\^8ñ'Œ©JĂ4×â)Q8²©˜ˆÈrTôªZÇƯƯ}̉¤I“&M––æî®p“•vó1_ŸĂsÊ\áIåX8B‰Â±m[üư÷ăøî]x{+™`ôߌͺø,ÎÖ…ù‹ •&*jqüæ?‰‰‰º-¬ÉÊrs-vj†PºÅQñ¿>ÆÇR,oü&"²*jqܲeËÍ›7´oß¾*;„Qaă°ÅPÑé”D>™8 GC¤(0ͼsjd$^xAÉåMŒRÓ#‘ưPQ‹c¿~ưtÁeu¬$f`†ËÛ~×¼¹gù¯í`áh=N²?‡-7•#‘}RQá8v́Ø>}úXºté­[·D§Cjp)®êÊ\̃>῭ ùŸ@,E8zTùs¾÷¥øWü*ú‰ˆ¬JE¯ªÇ bű±±Ï=÷\Ưºu½½½5¦ÖX´h‘èLI<' üèÊ[§”/ÙûÂV|Œ?ŧº8 a}ĐGtFDDÖ£¢ÂqçÎRœ™™yÔmT­Â*)î̃Ÿ_ùIå…£²ƒ{mL•*¸rEÁó9;ăÑ#K%ë {Qsw,ù\ˆˆTGE¯ª‰7S¥x6)~~ùỤ̈å•8#{ëHé÷ø Õ^@mÔ–â\Xn(>‘ê¨¨Å‘Ë Rñnâ¦EÏ¥ør, T­öíSđ|̣i•ââđä“ ç;³û¢¯.©_à K?!""•PQá8aÂÑ)z]Çu)n 7()…cz §́ù>ù»v=÷îU¾p”÷kœ‹¹,‰È~đU5•̣÷Ô³1Û¢×*[V¡eeY4OÛ1|¸>Vb*ÇÖ­ơ±¬ï4™KE-ß|ó!»U¨P!88¸~ưúÎÎ΢S&ëYƒ5RÜ ­,z­gŸUèDZ­Eó´̣&ÁØX<ơ”‚ç̃±Ă")¨¥Xª‹wbç“PºU“ˆH•TT8.^¼Øđƒ‚‚¾úê«Úµk~Q1ÎÓÇ;‹ÎÆ̃Ôª¥ăâ”-oܰHʳ1[*§bª%Fk©Pi}U}áÂ…W^y%--Mt"d 3Đ/#_¶ÜṬ¡Z+±RôMYœ ÇfÍÈÊÊ:tè×_}øđáË—/Ÿ8qbÙ²eƒÎ̀̀иqc3gΜ7o€ªU«Î¬Ç₫:óuưª4Ê ©–¿re‹£P̣¹–”%ª5“Eß(‘Å©hÇ)S¦9räîƯ»©©©K–,Y²dI₫\œ† àØ±cº-}úô1ö*TºÈŒ±Ü{jy‹”b“8²ÅÑ(È)Ư“ïă¾èˆˆ,NE-Ơ«W_²dI…  ư¶L™2}ô‘®UR§I“&Ư»w5YÖ̀‘â—ñ²…®"ï'_­Î,̣Gww en;,P[[ç…„|ˆ̀6l3ăLDD¥€ G¡¡¡;wî|ï½÷7ńéé  lÙ²O>ùä Aƒ₫úë¯èvkĐ ÁرcW®\ÉUIéWJ&²V ¼Í·Î @oăm)¶Đ$£DDê¡¢WƠ:eË–6lذa䥥¹¹¹i4|û|̣É'¢Ó$kX}w -£#ï㨅&²¶hq|öY¬üo¼Jd$Úµ³HâÏ@?œê ZäDDª¡®GILLLDDÄÖ­[ÓÓÓ³³³ïßgç!{4£¥¸ôµå°ÅÑ(̣G…&Ơ”szÿ} æP)¾ N.KD¶Lu…ă–-[:tèĐ«W¯ñăÇϘ1ăÎ;iiiíÛ·_°`4‘…4j¤Ü¹=}7¥¼ÅQ¡[>[Wjªs_ŒÅR<c,x%""ÑÔU8Î={Ú´i×®]Ë·=##cÑ¢E3gÎ YÏoøM¥²Ü…ä?nÏ?/ú¶í–¼p´À[₫èh æ̃-¥øwünÁ+‰¦¢ÂñôéÓ«V­̉Å̉v©ăúơë:$:M²ù{ê“>¶Ü…¶nƠÇ,…‘¿ª.…oùưrôÍ›¹È‘¥¨¨p\ºt©V«uppøàƒ9"m÷ôô\°`nơêƠ«¹ ¬½¸ưˆG8q¦È Ç–-M?O‘*V´\̣¶Cö·¢‚-ÁÁVJ_₫·M4°̉U‰ˆ¬NE…ăÙ³gtï̃}È!®®®̣¯ºté̉®];ç,·©Éßø[+²…ןZøf8û·±”kq́ÑCß¹cÁ”»dt‘â38cÆ™ˆˆTME…crr2€ÀÀÀB¿ ””$:M²†á.ŧqÚ¢×ʵô{EÆR®ÅQ̃÷À̉!”C9Ë^€ˆHTT8(´£V«=xđ €5kN“¬! Ŕë\ÔÅÅ2çåBƠÆJH0ÿ::ècyŸKXR<#-{1""ATT86hĐÀÆ¥Û˜˜˜¸gϱcÇê Çzơê‰N“,n7vKqoô¶Úu•sù²>f‹£:XºÅq Jñ2,}»DD¡¢•cF””¡Û8|¸₫•¥‡‡ÇèÑ£M<;•̣÷Ô+±̉Œ3•,2RËûĂ™K̃K-ênñK”C¹ dˆ¾Q"" RQ‹£¯¯ï¼yó|| /éáá1gΜJ•*‰N“,î".J±7¼-z-y+”’-̣^zlq´̣¿s̃À¢Ó!"R G-[¶Ü±cǨQ£BBBÊ•+ÀÍÍ­^½zaaaÿûßÿ:v́(:A²¸Ø!Å}ĐÇ̉—“÷{óơUî¼̣GoËÖ¾¶Ă2=˜»w·̃¼„—¤ø{|o½ Y‹^U븻»O4ỉ¤Ỉ̉̉ÜƯƯEgDV5úEb¾Á7–¾ÜÙ³–9¯Ö>±}O>‰øxÅÏÚ£ÂĂLJ¡Y3Ë̃„ \à.ÎD¦+\Í;‘º¨«Å1Vv(ÉR\UE§cªR¸ö‰x–y§oÍyü‚_¤X₫W‘mPQ‹cffæ‘#G¢££oß¾­kkôơơmذáSO=åææ&:;²†đƒ[yB“úơ= GÈGegĂI™ßNƠªéă­[ñÑG–½‰nè&Å\·ˆl* ÇG­_¿~é̉¥w [ÛÁƠƠµwï̃&Lđf_1['O½K-}9ùt ÿmb…¼¶G̃âg‰åeK™ZP}Ô?…Sºø.!ÈW%"² ñ¯ª?̃¹sçÏ>û́N+‚eff®_¿¾{÷îÇ,Ù”ß~ÓÇ ˆÎ†ä…cin²ư ?I1ßV‘\8̃¹sgĈ7nܶ”)S¦R¥JơêƠ«T©R™2eä{¾ñÆwï̃›0YN't’âOđ‰®¸y³>ñ\ôưSEÙ¢äË”œ@;4Ôª÷Ñ ¤ø¬̉ÈIDd-‚ ǵkצ¤¤èâÎ;¯]»öäÉ“»wï₫ơ×_wï̃}êÔ©Ÿ~ú©K—.ºîß¿¿fͱ “ǻÂ.)éV¸â¾}–¿F@€nÄF<ñ„>V´_Jÿ₫úøäIkÜ/ôs;ư ËÉ!"²Á…£´´`¿~ư.\ؼysF#ß¡I“& ,xñÅóíO6æI±“:º̃*£AóÏaNRđḍÂQ̃̀l9‰H”b+LGJDd5‚ ÇËÿ-é;nܸbv›0a‚.¸té’Ø„ÉBäÿ¸Ê'4±† -vj…GkÛ E ÇÚµơ±u G¸Hq²¬qI""«\8¦¦¦đññ (ö¯¯¯ŸŸ€´´4± “…„#\{¢§®xæŒ>–·H)à¿?‡¦zøĐB'–ÿÿƯ¢fb¦[§ë‘.srr¸º–¼¸‚nBƯ₫dcö`?ƒg¬sQyËÓ€Z̃ZÆÂÑ^}ˆ¥øS|*:""eˆŸ‡¨=ÚK±ỠSË Ç:u=5 G“•-k¡·k'ànÜ Ÿô*® È€ˆHiª…đđáĂưû÷¿Off¦è4ÉR´ĐJ±ü¬sQ ®•´¦“^ưú¤»DF>÷îÅÓO[ăn>ÆÇoá-]<öÁ Ăø‰ˆ,K…cRR̉°aĂDgAb¼ƒw¤xfˆNG ́°/–,¥x›7[©pœŒÉRá¸ûÍ;‘*đU5 ö%¾”âđ‘ơxFñN•,M&³¯è²̣ÉÅ­3°ZG¾r̀2(9«9‘,I¤3Đq­†jV»îúXá!Ơ²8ư©ä…£Åêï+W¬wC̣åGb¤ơ.LDd‚_UoƯºUô ‘º ‹G Âj×4I÷è!ú)$_áØ¢…è„–…¬2(c₫yˆˆD\8‰~$̉èê@Ù±Íʼn‰ÑǵjÝ2c¬*Uô±̉-}ûâ—ÿ†́ggĂÉZ¿ü~Çï/à]ü4>ˆƒVº0‘đU5 3¥¸%ZZó̉wïZå2œ‹ÇJC‡êck.zß ½¤øYïÂDD`/…ă¦M› úôÓOO›6ínI…CffæªU«₫ùÆ·iÓæơ×_ß»w¯è›°5ßà)5æÔËË’ggáh¥ Ç^ĐÇÖ, Ă0)₫_XơÚDD²‹Âq₫üùÓ§O‹‹kÖ¬™»»û–-[̃xăb&†̀ÎÎ6lØçŸ~ëÖ­V­ZƠªUëßÿ>|ø¢E‹Dßí÷hlŒÆÖ¼ôÅ‹úX̃ ¥ŒÔT}̀ÂÑ7nXîÜ̉œÖñ~âwñ®U¯MD¤(Û/cbb–-[æïï¿}ûöeË–EDD :4::úË/¿,ê7?~¼I“&‘‘‘K–,ùá‡~ươW//¯E‹={Vô Ùˆ®è*Åÿàk^Z̃Ú¤|áÈec¨0PAOÂr³ÏY–í7ǹÍÍ8qb… qO:ƠÓÓsÛ¶m¹¹¹…²}ûvï¿ÿ¾´ˆvPPШQ£rrrøÂÚÜánÍËÉ Ç&M”>; G²đ ü¯£Fh$úI™Èö ÇC‡988´oß^ÚâèèØ¶mÛäää£GzHBB‚››[HHˆ|£nxbb¢è²ÍÑ\¿Å·V¾z\œ%Ï./+U²̣­Ù‚'Ÿ´Ü¹_}Uÿ₫»Uo«6jK±|M"¢̉ÅÆ G­Vëăăăăă#ß^»vm]~÷Ưw?ÿüs¾§OŸPµjUÑ÷d äcKÇb¬èteÁ5°íƒ%›iE ¬ÖùßKñ³xÖÚ—'"R‚*Öª¶œŒŒŒœœ¯Cg===ܹs§Đ£êƠ«—oË–-[V¶lÙ̃½{rƯààà|[t¯¿ Àû¾ï£üăxÔ½Q wJ<ärk}¤¥9Ơuqï̃i ·•½»j'N8₫'$”|kB(ø<ç]¥×±e` îÿụ̈‹’ç7ä‘vB§ÿ.ÿáªưñP 5ÿ”–F|fêÚµ«ù'± 6^8ê†N»¹¹åÛîîîà₫ưû%!''çÇüâ‹/rrræÍ›çëëkÈucäLS^ë±^—x-—AG´_I.ÔÇ£G»*Ư½Rö׈R9[‚zs{æü7}Aà£G(đ7˜j‚!gÑ‹±X/\<s-ww6@½?¥¥Ÿ§9 ₫³lÉßNjfă¯ª½¼¼4MFFF¾íiiiø¯Ư±ÿ₫ûoÏ=?ưôS__ß+Vtï̃]ô •zC0DŸĂsÖO@>˜¾sgу ²đrƠ ˆ¼¹EĐOéơ%¾4ăLDDbØxáèäääééY°e1%%€4κ G}ú駯¾úêµkׯ·mÛ¶Ö­[‹¾[đ#~”bk.N-¹tIô# âY¸p¬VMÿơ—€û“’‘÷z$"*l¼pàïœ¬«%º̃E₫₫₫…’››ûÖ[o­Y³¦S§Nươר±c]¹è°₫ÿ'Űơ—&\‡Ư|(åẴ/pO1Đ¿đzoÈ€ˆÈ ¶_8vêÔ)''çŸô“¨iµÚÈÈHooïĐĐĐBY»ví_ượË//Z´¨˜VI2Ö Đ/ú&ÿçÓjäĂè‡ ³đÅ8‰£ùvîTü”î²N­V‘GRư¿áY¶b«˜$ˆˆLbû…ă€.\¨ë×`Ù²eIIIưúơ+S¦ŒnKzzzBB‚nĐ™V«]·n]ụ̀åß}—+ƒ)é Jq9”+ƒ2ÖÏÃÂ4z´. _DzˆéåÉ÷î‰ÎÀ"ä5ơDOÑéÁÆGU¨T©̉;ï¼3gΜ^½zµiÓæ̉¥K 1b„´Oddä¤I“‚‚‚¶nƯzûöíË—/»ºº<¸àÙúôé3dÈ#.OÿiR,¤¹y ÇfÍ,pôñ| ©RƯ»#<üqüà\\¬@Y”-‹²ñP÷ñ5ƒ%~‰ˆ”gû…#€áÇûùùưöÛoáááC† ™8q¢»{áó°èÚ333OÖ¿CdLhùÇ*¨"$¼=]-`ÿ~}ܪ•{¤­/—,Á¤IrØưOá)]Ü͹– •­–¿°̀yóÑ@#Åçq>Æ IHHPd2ÍY">̃÷Ù«₫øăq¬âÿ²”z–̉ª•¾íÖ2QúI¨U .(pB©ü?¸§ƒ5₫IDAT}Ø× üK#µÿ”–6|³Ûëm¿# wyÖ7¶jTʶmúØ"‘÷U5™¬eK«]*6VØ]^ÅU)n ¾Ê ¢̉…#Y\4‘âxX¢¡Ï K–ècK·^ÀĐNÉ ÇÇ-q…‹I P •!­O‰eX&:#"¢’±p$ËÚƒ=̣§o”̃!(WNÜ¡É GË4âÊÿr8rDØ^Ă5)‰‘Ậ "2 G²¬vh'Åù†ÈØ2ĂÖ4§ÂU×Osh…Âqøpa7Z¼d‹µoÀa©†…#YĐj¬–â4€°u‚/_ÖÇưúY₫zV́¥gă,S8Ö¨¡£…₫9sw¥x L…ˆÈ,É‚†a˜ËßÊYßœ9úØR3»Ëg«fᨔ¸8ÑXœ4/88© G²”÷ñ¾ ŸjÄâS#oÛ GƠ{ùe},pl5€#Đ÷²ä „D¤r,ÉR>ĂgR¼ûD§cyœư[AÎΖ¾‚¼áyölÁ·[U¥¸¬Đ—‚ˆÈD,É"Ú OÄD±Éܸ¡{ZîM ¼Å‘öÍdù&Û† ơñ‚o÷2ôpÁ/‚³!"* GR^.r£%}œùbó±FGpöoEÉ ÇÜ\ÑÙXĂR,•bùüDDªÂ‘”'ÿgïWü*:|ưµ>~úi‹]Æâ+aÛËOå }|é’à;–Ïă˜‹Ü|ë-© GRØÏøY₫±7z‹ÎˆJ!«̣ægy³´(;±Såë-© GRØ ’b-´¢ÓÁ… ú¸K«\²reÑ7]úèc‹M›êcù”¢tB§Fh$}̃9˜ˆ¨ ¤$øKñ |₫¹>`Œ8²́©óèq—âođètˆˆ̣cáHIB̉-Ü’>nÄFÑÀ?èă×_·ØeñÔÇ,••˜h¹s‡…éă={L?‚æa—EYÑéåÁ‘ă?)₫߉NǺ¾‘5±p,=ä ̉ï½':ÀdL–âGx´ëDgDD¤Ç‘”ѤøI<ù̃lÙ¢-[ܹ£-µ4q´Æ”4¾¾úxŸjf©—w~¯ˆN‡ˆH…#)ăoü-űº‚›̀´iúø³ÏL?Oɶo×ÇeùzQ ư¬´€|zŒÁ)®‰¢Ó!"zŒ…#)@ŒE§£w₫¼µ®$|@ÛÓ­›>2ư<%‘¿­¶́_ÆXˆ…Rœ€„MØ$:#""€…#™ïu臜TCµđèŒ{đ@Ë×—£̉A^8Êt•öê«úøư÷EßµŒü…ơ‹xQt:DD G2S2’Wb¥ôñTÔđÖ¶­>¶^KRăÆ¢ïÛVøë§v¶m¢³ă]èç(w…«ètˆˆX8’y|¡\ ïæ¨‡éă=,y¥Û·ơ±¼Œ”rÔ²ëïéăˆÑ7+3³¥ø̀ÄLÑ‘½cáH¦ F°wG÷vh':#Aäía]»Î†Œ&¯KGM^̣Öá£LdΈˆ́ G2Ñøá<ôcO₫ÄŸ¢3ÊcÆ }¼h‘…/&ï'ANfªZƠ:×qw×Ç/¾ëäÿq•C9Ñé‘]cáH&áR¬†5©óùX6¶{ôh _̀^{àYœ¼ù67×¢—’w1wrPƒîè̃í¥Ù/d ùü;̣yĆÔ½{¢3°QÖX à;ÙRGj{[ `7vKñE\TƠ¤WDdWX8’Ñ Ÿ1¹;ºËg*V ùúŸ|":2™¼p´p³®ü­¸…‡â˜H̃®?3aÁ%¼‰ˆÂ‘Œ†°¸!}T[×F‰ơñôéV¼p;{d!..úØ̣ưäkŒ<(ú̃ sú´ª¡ètˆÈ±p$#̀¬X!}Ta×Fbeë+rHµåÄÅYú S¦èă×^}¿…i†fâC飼Ç‘u°p$C¥#]¾*LrDgT¸·ßÖÇóæY₫ẓ–0NâXơé£ÏœMfbf4‘>ÊûY G2”;ôs–ü₫ÏA­?<̣bq̣dË_ïOÙËúFDß½Í ±æƠÔÇ6ˆ¾÷"Æa)¾=ÑStFDdGTúo?©ü¥Ø,̀Rí¿U))úØÓÓ*—TƠJ#¶§lY}oé«­_¯åE¤ÚÈ{‰lÅÖѰôŒSDD±p¤’É«Æ̃èư>̃Q‘ú÷×Ç›6‰Î†̀÷ư÷úxíZÑÙ¨ˆ¼v\‚%?á'Ñ‘]`áH%WePæWü*:£ấØ¡;w¶îµ6}÷¶è©§ôñêƠV¸àgŸéăÖ­Eß~±â¡Æàµ`aMDÇ‘S¤Ø̃đHtFÅÙ¸Q[é=ud¤>~ơUÑÀÖ%$Xá"ï½§÷ï}ËÅr†óMÜ”>ÅĐ ¸ :)"²q,©H•Qù6nKïàèŒJđ̉KúØJ‹¹ÈÛÀX8ZˆÆÚ“ÎÔ®­£¢Dß~±* Â!èWH¬ÚшÙ2T¸r(w פꟲ1=]ÄUå…ăOˆ~6J^‘''[á‚{öèă¶mEß~I¢é‘>6B£ưPwK)•f,©h2‘)}TƠ M}láeersEß·Véæèﯵ¥àgOá©8 }lÖàÑI‘mbáHùå[¢TTÓÇ]ºXự5jˆ~¶«}{}l•ÂÀ ưI¨\Yô0@ ´¬î…^ăcÑI‘ báHyäC]ZªÆ1côñ¸qÖºêÑ£ú˜­#ÚJø†×Ç×®™~k„A'pBú83^Ä‹¢“""[Ă‘;£̣ªÑî*C-·x±>^°ÀZWåÈ›6r¤>]J&Ønˆ†»°Kú¸ ›|á+:)"²), >Ạ̀pÛ M*RE'e¨?ÔÇưúYñẬÂ10Pôc°i}ûêă¬,ë\séR}¼d‰è'`°è QŒä|Oˆˆ̀Á‘Đ ga–ô±6jïÁ3ÎgmŸ|¢7o¶â…ïß}ëvC̃ fµËÊ"úàÑÁù:™h á4=D¤öNÍIœ”>₫€b#:)#È{4ÊQX•ÿ;²°^½ôñîƯV»¬|ƠÊY³L?ùjÇFhÔ ÍD'ED¥ÿÁ³_›±9ß;¬íØ> ĂDçeœ… ơ±+ `ùr}l½n•$&Zój̣ÉÀ'O}ïF̉B+_üé0;ÁItRDTº±p´SUPeÈ·h¡íëOccùđ…^°îµå P̣AƯd!uë ¹lŒ¬ư}₫|ÑÁx7qóS|*}̀A(¨{="R1vgöi ¹«̉–z¨WZ¦ƯÉgÙ2}üÛoÖ½ö¥K¢ï̃ÎLŸ®çεæ•'LĐǦ5Û4L G¸|K´éŒÎ¢ó"¢R‰…£}éOăiù–EXt§Eçe //}đÑBëGÑ©™( @ïƯkơËË[¼ư0́F«Vú83ÓôóoĈ<úÉÄó·Knà†|K4ĐŒÇxÑ©QéÀÂÑÆMĂ4 4×gÑ´ă8ŒdÑ©™î¹çôqơêhƯÚêpG!äƯ­>;Vö¦·Tÿ±à-´ĐI¾ñ[|«æ>øƒMD%`áh³₫Àh>Çç̣íĐN m#4Yv́ĐÇ/Zự7d 6-Zˆ~ö¤{w}üÙgÖ¿₫°aú¸Qé₫o;±S¾8¡¼£±èÔˆHƠX8Ú s8§¦zåÛ~W₫Æß¢³3—¼‡Ù›oÈàµ×ôñ¨Q¦Ÿ‡J›~ĐÇÑÑy¦/t‹Ö@ ùÆ8¡f0Js›*Y G›’ˆD 4u‘Æ»đ‘Úʨ,:Asu’½^«Q‹‹Hbûv},oƒ"+˜9SÏ™cưëË_X¿ø¢è§¡„$h¡Í·ÀOøIM¾©^‰ˆÀÂÑfÄ FM5TË·½)j¡¢TÀáĂØ%{·– "‰ØX}ܰ¡èGb>üPO*$ùḲ̉;Â:Ÿ\änÇö|u‹K5@ÑÙ‘°p,ơ~ÆÏhê N¾ípLF̣! bÉÚ=^P¯¾ª×¬úÈđ„§¿PÈ*qP m343₫ÄêU³f ?û,Æ”ǯ¿êăgûĹ×ĉúXÄØjygǵkq́XYDqpA mÁÖ9È©êhæaè‰H ¥É7øFÜRPÈʧqÚöJFỢöÛ”ÏÅcṃUïøZ%®]3ÿ¦9yR÷ëWÉöV/?†cZhÇblÁ¯̃ÆÛhüàw×E§IDVű؇}UPEÍDL,øm%TJGºÚz¨':Så!1QÿQ«5ưT xđ@~2Ó₫ưúXÜ¥úơó$R£.Ûâ[Üoñ­ÚXPđ«$$UB% 4ă ê-Y Gơú4Gs 4Oă髸Zp‡0„i¡½«åPNt²áé™g³àª14ToØ 4»×²¥>N¹R˖ظQÿ±zuüû¯Àt,hÆi¡=ˆƒ…~» 5ĐơÇ-Ùª…¨r(§›Á»¨1Ñá×Bû=¾¬i4H‘½\58~\ÛÆ ~¥ÚÊ•úXèÀæ°t©₫cË–xûméXV34ÓB«…ö¼Pèºî4hú èd‰È"X8ªÅ·ø¶,Êj iƒ6™È,tŸz¨§û­Ư ƯDçkAÛ¶åŸ/>^Èœ2̣QỤ̈9¨Iùú=QQbs9+W̃”>Λ‡úơÅfdq¿á7-´{±× NEí « »£ûVl/)†…£H{±×¾º_¯ă1₫º[{´× r<Ó¢S¶¸Aƒ̣¬H 5´5"ï¼ß̣9¨I w̃ÑÇMˆÍ¥}ûŒÏeËŸ>¿ÉÜ&µFë,di¡}E¶Áoöè©û-÷ >2™‹…£µ¡ª¨ªû5ú IF‘=´Ú Í^́ƠB»» N«f{RR ÑàçŸơ[ZµRGƠX¾¼>₫ö[ÑÙĐ¾øB=g•S§ẫ½<[<=ѱ£Ø¤¬d6è^†?MχøP÷«¯*ôFoÑY‘)X8ZĂLxOë~c6Gó+¸R̀Î!¹…[Zh÷`Ok´»•4n OÏ<[Z¶̀3Ù¶0»v!-Mÿq́XÓOE“E©VÍôó(ÄÓ3ÿŸ:»wC£ÁˆÎ̀Z&c²®‚\‡uùÖ¿–»Û¿ăwƯ¯D8<…§ÎCÔbPDd± »Ä“º_‹h`Á>W¹ÁíK|©û…{ §üà'ú¬çÛo¡Ñàĉ</]Ê3щH:éă;wDgCy5oơ?QÅ›P­ỰvBîƠ+O³µ=ŒÁ¹ÈƠB»[‹(£…ö#X÷Û².êöB¯$$‰¾"* Gå9ß â_â!¹ëZhÓö̃¸µ-_ăÇçÙX½:´Z54<<ôqÛ¶đöp]6ơ‡âÂÑ @xx₫VÆ´4h4¨eû]Ṇë¿àƯ_űÑ₫Åïç₫À~đ«XS·ÈáLÙ•üID,­n&$"Qj\¬ˆæŸ³Ôyï=h41"ÿö;pñ¢èä$: 5Uÿ12RtBTy{uíÚ¢³ýùç¡ƠÂÙ9ÏÆ¸8h4(_>Ïh+û1nà†î·ß&lr‡{‰‡ä g.æ¶FkéNC4l‹¶EÍ(ID–ÆÂÑâÊ¡Ür,×ư®ÔBû5¾®‚*¢“ăÀÔ«³gçÿêå—¡ƠâÙgE§(ùæüư·₫£*éP6Ä{ïé?j4¦ŸJi¢àR„ii ‚F£’WëbôGÿT¤ê~+ÄÉ7ñ¦ÄÉđO ´JÉ2(Ó=FaÔ)œ}[D¶…£̣Ê+;óïâ®îwb:̉_Ç뢓)- ĐhĐªÎÍÿm£FĐjñă¢³” ÁĉúÍn¥zŸ}–gHF=R«UƒV‹ơë ùêĂ¡ÑÀÑ1‡ {Sơc±ô×u$"Câ¨u4đđld‡#ü;|× ¤jR7¼_ū˰l7v‹¾E"ÛÁÂQyƠ_¨>½à%:Á₫ùÏ<óøÅ\¡/ [´€V›gAUĐhpæŒ₫cv6xBtNd€øx´k§ÿøÄøàÑ9é ­K–̣Unîă!bªR¦-Ú© /èêÈK¸Ô=Z …±ç¹‡{k°f$FvDGyA©Æ>C0ä+|µîáè;&*MX8’’¢¢PµêăßÍmÛbï̃Âw;Z-n>ƒçË©ƠÂÑĐfïï¿ñ‚l)¼Y³ Ñà´¦Í5 Z-6n,̣]Ê ÜÜđÅxøPtÆ*P Ơ¶bë$‘¸K ‰#LüÏó.î₫ˆßÂ[1Đ̃ùÊJW¸6EÓnè6³§aÚœÉB–èÇ@¤-;oaÓ¦M7nŒ-W®\»ví̃yçoĂƠÇÄĈNßJÀúơX¸¹¹%ï\«æ̀Aß¾F_%!!!P₫"Rq#F`ụ̀ü¯]C@€/*ÅŸ§X/¼€ÿû¿ü÷íC«V–»¦itút|ú©A{zyaÎôî ,wêb́#=ók±ö<ÎïÆîÛ¸m$k¡Ö]Üí‡~)Hy/TCµ ¨ Îơlü¿źêßz9…›?₫̉¥KƯÜÜ6mzé̉¥‹/6lØpÍ5®®®%k«?L118z3g"5×®q`­ZX²Ä¬/–ú•÷Ç2¤…á*V̀3ɋͱưB₫₫:²ư•W°f%.hæ#}ûm̀›gÜ!­Z¡S'tïnÑzX$¥~J#q7₫‡ÿÄÉă8.ö¦t7Fă+¸̉=oáVgtö‡Y” Bœ‚d¡KÛ₫ơVg«ÿÖ—ˆ…c!bbbz÷îíçç·yóæ *øôÓO׬Y3dÈ è‚Tª˜₫üiiX°øûodf~ª&M¡Lÿ@%å:…!C̣O8.÷Í76?TÁ^₫ ©X7o₫U¹røö[ ®Ô¥”z¤'b×.œ‰“GqTôMỄđv…k%TG|'t:‰“=Ñó*®¶FkOxf!+×q½9g#»j\I¸bÿƠ[Q©₫·̃, ñÉ'Ÿ¬[·îóÏ?ïûß[ƠœœœV­Z999EEE98”Đ1T=?Lii8zÎÎ8r®]Cd$œå»OU¨€6m°t)|}>³éÿ„<ˆåËqù2""J̃¹jU\¾¬pêªd/…#€đpôèQ̣nîî<îî˜8UL™-ËtÛ6¼ú*n[५Ÿ\\đÔSˆÇ A¸xưûĂÙuêÀÏ%ư†³5ü”j¡=Ó±ˆ]å•Pi6¹Áí*®~6–̣=¾C˜è,J ơü[oeN¢P£C‡988´oß^ÚâèèØ¶mÛ?₫øăèÑ£M›6-₫đ́́/"6•*áöm¸¹áÑ#\¼ˆ °w/5Bd$4Á¥Kđ̣ÂLjFơꈈ@‹رM›ậe¸»##çÏă‰'pö,||pë–ê&lÛXº•*Ỵ2:&%ÁÁÇĂß»w#0áá BR.^Ä;ø÷_hµÈÎ6ñ­Z©calRZ÷îĐjqư:jÖăEî––†ï¾Pø cdf¢];ÄÅ¡o_œ=‹>}àî??”/»wQ·®ÓÍ›¨VMÙ¡TƯºáÖ-ưDZ{7~ưµÈVTĂéÑÄD[7—-3ñTđô„»;²³€ØX´l‰“'Ѿ=®_G½zpqÁíÛ Âxî9:„gŸÅÍ›¨U ÎÎHNFµj8wM .  3¾¾prBBBww¤¥Á×ÂĂp²î?Yhê£~}Ôï̃–¡¸Çt7÷cr.ặ>́ÓBox'"ѪI›Á>¤ c±Å1?­Vâíí½7ïàeË–Í›7oö́Ù}úô)₫ j~Xh» B Ít̀zQ¢ÓQÎ!X±"ÿâv@ m9bL˜€­[_̣r ¥Âu|÷²Pæ´9Ñé©®Ăë*ÜÂÓ{qÏ 6átzưÎ×FƠD¸fÂ7 ®ft2زŸ1pèÇQj°Å‘ËÈÈÈÉÉṇ̣̃Ê·ƯÓÓÀỜ*¬ 7¤×Ç©›đẶ»đ~+êâ¬ù§U¡?¿¬'ŸL5+«fÍÇ›®Ú́[§b\¹rEt ‚Lœ(Míî₫ÿ÷ć:Uzàú̃÷.¼·£k*ÊŸEƯ]è˜ × uA満ë8[‘í`ñh»Đô–}x¤ éaÜôdz;q®zü‰£O¡|êăÿyî/œl€§÷"îIÔ;ƒä'P>ƠáSBB‚èÇ¡R]»v‚Z°p̀/33€››[¾íîîîîß¿/:Áü  :.yă®̉ưqó êơÁ¯§̉[îÁëDUÄ ÜÔÀnZ—«VEưúHNÆ;ï J´l©Û́8Â^|̀ËN[å&LÀ„ y¶üû/₫ưË–ÁƠ‡‹ÎÏ,̃¸;ë Üù*¦Ăí/DÙ²pó&üưó|••…2eàÆ T¬øxăå˨V 99¿ºz•+ẳ%T¯₫øç–ƒĂ“Đhpù2ªWÇÅ‹¨QăñÿÖÑh€55qñ"tmrZ-‡  \¸€Úµï Ñ ;ÎΈ‰A½z8{!!wÓhđè\]q̣$BCqâ4Al,êÖ…£#̉Óáå…ƒñôÓ8xmÛ"6 ÀÉ ÷î¡J́Û‡çĂè̉×®!$®®I±±¾­Zạ́e´hôtĂ€y‘ˆŒÓ¢Z´0hL½V‹7•…”ÄÅÁÍí̃¯¿zµm‹¿₫BÓ¦HLDụ̀xøG"8;v uḱ̃–-qï\\'‚ưûÑ´)₫ư¡¡È̀D™2ÈÍÅéÓFt4ê×ÇÉ“ Av6›‹˜Ôª…˜Ô®ưøë’Ñjqá|qqx̣IÄÇ#0Z-rsáà€øxưïºß²³áä„‹Q­ZÅK—PƯưÍk«Q©pR÷Kf̃¥©T«†7àïàñ¯&ùo$Ư¯/àñ/4ùWÉÉgUÈÈ@¹ry¾ºs'ÇÇï¡Ö93-;·\ù+W5>•\Î_u«›x¯üåe¡̀ơị̈Ú·j6ö»ºïvPßKqi₫UÜîfĂérÚ₫n©'7xÆç̀®;[{ŸMȬXÅ59Gë›PĂíö®{Oµơ<ñ¿ûMÛxœ¸̣ĐÏ¿́=-4gÓ«•»º;µiỤ̂Ç₫NṃŒûñ||S´ĐœÉ¨QÛ5qOÚSϸJ må}'«¼§SºÓ™5ëº^Ü—̃¨¥ÛÉ}éZ”;™ăêæøP Í©̀'ë¹&̀¨ß̀ơÔÁ̀M]Og溔ux¤…æôƒ'ëº$ͬêræèƒz¡.g³´eœ4ÙZhN=¨UÏ%₫ă: ]bN<nèr>W«Ñ@«…æôĂZ!ecO>¬]¿́Ưÿ …FúêôĂZơÊÆ{\ö"€l­£rÏ=z²sܹG5ë8ÇÇeU«Y&Q M¶ÖÑI“ó(0Ø9!æQ`mç‹Uªî|ÀĂÜ2e²Î?ªQÛùâùG5‚œ/%fU¬Ræ&7®w@%cÇB´hÑÂÙÙùŸ₫‘oü₫ûï¿ụ̈Ë/¿ü²gÏÅn·ư,Ç~ûäYŸ§âøHÇGª,>OÅÙí¿ơê˜wAeüưư“““Ṣv~̉ơüđ×ưÙMDDDdX8¢S§N999̣G­Véíí*:;""""1X8bÀ€ .Ôơk°lÙ²¤¤¤~ưú•Ñu"$"""²?SˆJ•*½óÎ;sæ̀éƠ«W›6m.]ºtàÀ#FˆNˆˆˆH…>|¸ŸŸßo¿ư0dȉ'êfä!"""²O,‹Ô³gÏPÙöq$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p$""""ƒ°p¤ÿoï₫£bJÿ8€?S‘)̉­-i·K‹J+H±u¶Ư„D~í±a³d?—ΗµØ­Uvíní±,¢Å®ƯT”aÄ‘£¢„T„L~ŒT;5æûÇsö9“¦gúad߯¿î}î3÷>óñ9ùôÜûܘ p&(€ G`‚˜ p&(€ G`‚˜ p&(€ G`‚˜ p&(€ Gèüưươ=„7 âÙá̉‡v,Ä: G`‚˜ p&(€ G`ÂS©TúĂ›F,ë{Đ¹JJJô==@áLp«˜ p&(€ G`‚˜ p&(€ G`‚˜ p&(€ G`‚˜ p&(€‰‘¾đæØ¿jjê7LLLÆŒ³lÙ2 }ªË˜4iRAAF£P(Đè†,eÄO¤¨NŸooo¯̃hnn®¾‹ ·ê×_méKôáæ´„IË®©©iÖ¬Y—/_#Glhh8₫|nnî¢E‹.\¨S¸Röx"EÙÉạ̊€€€‡:::J$’{÷îưư÷ß™™™ûöí4hNázóCª‚v+..8p ——׃hˆ D"Ñÿ₫÷?}­kxúô©H$úâ‹/´ôAµxúôé… Ö®]+‰D"ÑåË—5:°DV×jH‘´:Ù½{·H$ ­««£-ׯ_wsssrrºzơ*{¸R%HQĐ/¾uëV®%--M$M™2E§pưBg;@jjê‹//^Ü·o_Ú²bÅ @₫âÅ }® ¨¨¨ „hüZ¬AÖ"000,,lï̃½-u`‰"¬®Ơ"iurôèQBÈêƠ«¹IGGLjˆ¥RÉƯ6E–vl<‘¢:9wîŸÏŸ?>×̣É'Ÿôëׯ¨¨H©T²‡ë¿RàÂ… ̃̃̃\‹¡¡áèÑ£kjj.]º¤ïÑuååå„₫ưûkéƒ k“”””””äééù̉,ÑC„ƠµR$­NÊÊÊLMM]\\Ô !•••tYÊ%HQ˜››ûøøôèÑC½ÑØØX¡P( º‹¥đŒc{©Tª7nôîƯ»wï̃êí"‘ˆRYY9|øp}ñuGÀƯ»w/<<üÚµk&&&ÎÎÎÜrY»Q£FÑœœœæGY¢‡kĐR‚¤ƠÑ?ü`d¤ùßMQQ!ÄÖÖ– KuÔj< RTG»ví̉h¹páBEEÅĐ¡Cé´.R”ƒÇöª««S*•B!äÑ£Gú`@E¯®®9r¤P(̀ÉÉ MMM¥äö`‰"¬+$­Nœéÿ©TºcÇccă   ‚,ƠQ«ñ$HѶÊÏÏ_³fMXXØ̀™3í́́bcci;R”ƒÇöª¯¯'„˜j´÷́Ù“̣ôéS}° ¸wïŸÏ §-gψˆØ¸qă¨Q£¬­­äö`‰"¬+$m›)•ÊƯ»wÇÅÅ)•Ê-[¶…B‚,m‡—Æ“ EÛª¤¤äÀ*•ââẩ½{wÚå`Ʊ½̀ÍÍy<^]]F{mm-ù÷÷ Đî—_~¹|ù2÷Óâéé9cÆŒúúúcǹ}X¢‡ë IÛ6çÏŸ Œ‰‰ …?ÿüóĉi;²´mZ'A¶ƠÔ©S¯]»–››»|ụ̀ŒŒŒĐĐP¤(…c{ ‚æ¿IÈårB·® tåææF¹~ư:AÛ‡%zˆp‡@̉j¡P(bbbfΜYUU™®¾đYª+íñl R”ÇëÓ§Ïœ9s¦L™rÿ₫ưŒŒ ‚UƒÂ±XYYƠÔÔĐ̀à”••ÑCúƯëN¥R)•Êæï)044$„ôêƠ‹î"ÈíÁ=D˜’VW/^¼XºtéÎ;Ç›™™ùùçŸ72²”]«ñDꤴ´tåÊ•éééítƯúƒè.R”BáØÆ«T*OŸ>͵¨Tª“'OZXX¸ººê{t¯»̣̣rggç™3gj´çççBÄb1ƯEÛƒ%zˆ0;$­®~ươ×̀̀̀iÓ¦%&&¶4ï‚,e×j<‘¢:133ûư÷ßÓ̉̉4Úé»0 @w‘¢ Çb``°mÛ6ú!dÇ2™,88¸[·núƯëÎ̃̃~ذayyyû÷ïçóóó“““­­­ưüüh ‚Ü,ÑC„Ù!iu¢R©víÚƠ«W¯åË—ké†,eÄO¤¨N¬¬¬Äbqnnnvv6×X\\¼{÷î={1‚=\ÿ…̣è̉!h§ää䨨X//¯̣̣r©Tế́œœœÜ|Y>4W\\ÿw̃i~ôă?>}:{¸RÆx"EuråÊ•iÓ¦566ººº¾ưöÛƠƠƠ/^$„ÄÅÅè®7>¤†ÑÑÑúĂ›ÀƠƠỠ̃₫Áƒ¹¹¹FFF&Lˆ533Ó÷¸º¡Pøøñăëׯ{{{ÇÇÇ;99©wC[•}ơêƠ~ưúib‰"Ü\K!Ẻ²+))IKKkjjª~™r«:¥O¤¨N¬¬¬>üđĂG•——_¹r…ÇăyxxlƯºuäÈ‘º†ë)f€ q&(€ G`‚˜ p&(€ G`‚˜ p&(€ G`‚Ât¦P(ö́Ù3gÎ//¯Áƒ?~̃¼yÉÉÉ ́'Ù»w¯X,‹ÅÁÁÁ¯l䥥¥â;wN±{™œœœăÇ?~üÑ£G-ơIKK£Ăvvv–ËåÍ;H$Ú!..ửñññôS .Ôw  @áº)**̣÷÷>sæLuuµB¡(//?ỵdlĺøñăOœ8¡ïv=QQQ ,X°`AIIIK}ÆghhHQ*•gΜÑ8zóæÍªª*º=aÂ}!xc¡p”••MŸ>ưîƯ»\ ­f¨,^¼¸¸¸˜åT¦¦¦666666}ûöƠ÷×êÁÈ‘#éöÉ“'5:unØØØ |øpAAAnnnLLŒ©©)!¤¾¾~ñâÅ,§ ̀ÎÎÎÎÎ̃¾}{ûvçÎ…B¡—˜¼²KsS‰§NR©Tê‡NŸ>­Ñ 3 pVgÏÍÉÉ¡ÛóæÍÛ¸qăÀ ûôé3ỉ¤­[·̉Ceee·oߦÛêĐ)•ÊøøøÑ£GÇÇÇ“qljjÚ³gOhhè¨Q£†°lÙ2)LơsÊd²/¿ü̉ƯƯ}́ر;v́hĂ÷R?¡\.ß´iSpp°««ëG}ôư÷ß755µá̉-=;¥₫$â–-[Äb1W‹Ï5K,××׿tœÜƯêÂÂB®½¾¾₫Â… t{âĉ\û‹/₫úë¯3fH$’ÁƒK$’3fƯÍÊÊêÑ£GKưưưưé†ú"$îGơûÔééé´jäñxAAAôPFF†T*m[ˆÔƠÖÖ.Y²„V‘‘‘*•*%%%--­ư—€× f€ISS7±dkk«ëÇïß¿ÿî»ïFDDØÙÙơîƯû¥}¸j&""‚›Ñœ3gΙ3g”JåÙ³g4>"‘Hºwï^]]^VVFIJJ̣̣̣jÛ×üꫯ¦OŸN¹uëVPPĐ?ÿüC)((h¾â¤C.mnnnnnÎăñ讕••–₫¾¾¾ÑÑÑJ¥²°°°¦¦Æ̉̉’´đ€#×8{ö́åË—ÓíO>ù„̃G.,,ôđđh[ˆ8?₫ø#}ŸŸ7…éêêº~ưzBȶmÛ^å‹–àƠÀŒ#0©­­å¶Û°Ï秤¤2¤¥º“Vi„ǧ¥¥Ñ:5..îÈ‘#Gá&Û8†††ëÖ­ë̃½;̉̉¥Ki{~~>w*8::̉ª‘âàà0|øpº­¾¼“.ÍÈÂÂÂÍÍ¢R©hixûöíÊÊJBHÿ₫ư¹'NܼyóæÍ›ĂĂĂiKmm-÷¢Í§OŸ¶0\m:ỵd®188˜>ˆYUU¥åíBĐEaƘĐEÓ”–÷T·ÄÉÉ©ƠrsÔ¨Qt>¬¬¬lƠªU<ÏÙÙyôèÑ>>>ï½÷^ó₫"‘è­·̃Rÿ8ƯP©T•••ï¾û®®ƒÔ˜íÜ ;û̉́üưưé«ËOœ8ÄƯ§V_Ă I.—Ÿ>}º°°đêƠ«ÏŸ?ïÀ‘ĐIVBÈܹs_ÚáöíÛb±¸óB¯f€I·nƯ,,,èvó8êÙ³gÒ-Ưµ³³srr̉ơä7õüà_ôưˆ†††“&M¢Ô' ©ÆÆÆơë×766B>|øơ×_Óvơ?„ØZ½4÷ä•+W¸×¡gffæååi?-ËƠ}}} !×®]£-…ăóçϹÛÄ\ưWTTẠ̈ö‘sɰoß>î1ĐŒŒ 777www‰D̉±TÀë‹c@+W® ihhP©T r¹\©T̉ÆÆÆ m¨ÛÄb±P(”ÉdJ¥244T"‘‚»wïfggÓ¾¾¾Í?•™™éăăóÎ;ïĐ›Å‹-z¡Đ~iîEÜ AAANNN?æV“h033£Ï &%%•––Μ9ÓÈHÛg¡P8|øp®’sppà̃ÑH™˜˜˜˜˜Đs®^½úÈ‘#<ïôéÓÚÿfŒ®#ÿ́³ÏRSSårù±cÇÂĂĂƯÜÜJKK¹g.gÏÍ­.€7f@"‘(%%E}}ôăǹªÑÆÆæ»ï¾kĂt#!ÄÀÀ 11‘̃Ü”Édû÷ïÿé§Ÿ̉ÓÓé­X77·O?ưTă##FŒ°¶¶®®®>wî-Ưè[r:uQ3ă¥]\\>üđCº]__é̉¥²²2[[[n–Nălt#???..ẽQưåDÍïSóxßÑÑ‘e!‘ŸŸ½[M­§æÎ)‰!œ5kÖ¡C‡ÆG9r„» ƯûÈ}||>âââÂçómmm}}}wíÚỊ́- Ëá5?Àë,>>>))‰2nܸÄÄÄÿÈ¥Û ©©)''‡´p—  đŒ#À›ÉÈÈ%#t,ܪ&(€ G`‚Å1À3À…#0AáLP8Àäÿ!ßq×à\ÚIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/gustafson_kessel_101.png000066400000000000000000000347261466512601400244040ustar00rootroot00000000000000‰PNG  IHDRh\­A9IDATxÚíƯ{œÔu½øñï ʲ†\ƒ„¬€¦v’‹ÊÅ•(dœTø©a'/Iâå¨(¦LTÈK€3=zĐ­  Ä ÈMn²b*¸°ên"»óûc:ë8»,ß°Ÿ™çóá£Çđ™}ïçaĂËï̀|6/‘HD°? B@vÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±4 =@=TTTzà Z·n]èÂEÎ₫ûT]QQ‘Ư¨b7RÙTv# Ie7ReÈndÈuÏKƠÄ"ˆE8‹p á@,‘ƒkáÂ…¡GÈ v#•ƯHe7̉ØTv#•ƯK8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±ät8nÚ´©¨¨èƠW_­ưaÛ·oïƠ«×„ BÏ RN‡ăܹs÷û˜D"qÅW|øá‡¡‡¬Qè(--]¿~ưc=öÀ́÷Á÷Ưwß /¼zd€đr1‡ú·¿ư-Î#7lØpË-·}ôÑk×® =5@`¹Ó¦Mûøă£(7õóÏ?¿¯‡íƯ»wâĉ………“&M:ÿüóCO X.†c¿~ư’7/^\ËĂn»í¶5kÖÜsÏ=Í5 =2@x¹q¬X±bö́Ù£FêÓ§ÏêƠ«ÿÙß^TT”¶²páÂĐßSÅÅÅ¡GÈ v#•ƯHe7̉ØTv#UƯ2dHèï;SÇ”——Oœ8±}ûöăÇÿ¿ư ëÖ­ ưMd;†!ƒØTv#•ƯHcCRÙTu¿ƠÿZ¯~…(GÇLŸ>½¸¸x₫üùùùù¡gÈ9}c^xá…ùóç_xá…Çw\èY2ˆ+é6lØEÑ̀™3gΜ™º¾`Á‚ té̉åñÇ=#@Â1Ư—¿üåoûÛ©+»wï^²dIÛ¶m{ö́ÙºuëĐ„!Óơëׯ꼤Ơ«W/Y²¤wï̃7ƯtSèé‚ñGbÄ’Ó/UO:uêÔ©û}X=œËà#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±Gb@nyûíĐd-áäW_Ú¶&LØçºt‰̣̣BO ©„#+^}5:₫ø(¢3jnÇ.]¢7̃ˆ¢H;ÔL8¹â¸ă>½]½«ª€}@I$>½ÚiƠ˜ú0ª4 =@J$>}%zÆŒ(¢GU±G çToÇÔ»Ø/U¹¨Æ@Tµ@êÜù3¿¼ụ̈Đd<áä¢êŸ¡̃×=T@ÎÙ×É;Ú vÂÈ-ƠÕÙ×=¤@Ù×yÚ áäÚOùNkÇßư.ô¸™G8¹bÆOo×~ÏD#F„ óG ‡$Ó°–ó‰è‚ ¢_ÿ:ô I8¹e¿§|«F€}Ä"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹pä;ăŒÚî0!ô|ÀÿUN‡ă¦M›^}ơƠêw•——ßwß}§vÚñÇß¿ÿ .¸à¹ç =oÈË‹,Øg;N˜͘åå…ø?Éépœ;wnë{÷î=ÿüó¯¿₫úwß}÷ÄÓܹó²eËF}ûí·‡9£Ua혬ƴGY¤Qè(--]¿~ưc=öÀÔø€|pŽzơºûî»óóó£(Ú°aèQ£n¿ưövëÖ-ôw¡‰ôvüŸÿùÇ/S«1ùH ëäâÇ¡C‡9r_ƠEÑÂ… £(º̣Ê+“ƠEQ—.].ºè¢ /X×.µ«®;ªF¨rñă´iÓ>₫øă(æÍ›÷üóÏWÀæÍ››6mÚ£GÔÅ.]ºDQ´mÛ¶Đăgº´ë¯¾ú¥­[?s/¥r1ûơë—¼±xñâp×]w5j”¾3«W¯¢¨}ûö¡ÇÏ©í¸uë!©ë@öÊÅpܯîƯ»§­,]ºtÖ¬Y_øÂ† çO(**J[I¾ü;6m:uêøÙ•Í›7‡+´âââĐ#d»‘Ên¤±!©́Fª »1dÈĐßw¦ûQQQqÿư÷ßxă7ß|s‹-âü®uëÖ…<°êç5Û±ê³2¹¬cÇŸÿ©7́F*»‘Ɔ¤²©ê~7ªÿµ^ư QÈÅÇÄ·lÙ²¡C‡N›6­E‹wß}÷·¾ơ­Đe‡´OĂ$Ơr¾#„cÍö́Ù3mÚ´óÎ;oûöícÆŒỵÉ'ûôéz΅V›6}úú´v€¬&kPYY9~üø9sæ 4èé§Ÿ¾ổK«Îå¡v5¼Să=@Ö5˜;wîÓO?}Î9çÜ~ûí-[¶ =NÖ¨å¼Fíơ€pL—H$æÍ›wøá‡_qÅ¡gÉ2¿₫ơ§·«Ÿ¼“Ö@Öñ©êtï½÷̃›o¾™ŸŸ?räÈê÷>|Ô¨Q¡g̀P%%Qaa´k×>Ïk¬:ßÑ„cºäQååå«V­ª~¯ÈÔ®¤d?Œ½r:§N:uêԴů~ơ«Na¨Î{ˆE8‹p á@,€X„#±GbÄ"!´‚‚(//ưÈ<‚7/*-­a];y„#„3o^ôÿ₫ß>ïƠd˜œ₫YƠRœ.̀Ë‹‰ĐƒÀ?¸â@,€X„#±GbÄ"ˆE8B qÎÙq™D8B8µw¡j ĂGj_u¨È<~r „¦È®8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8KN‡ă¦M›^}ơƠïưƯï~7bĈ={öíÛẉäÉ%%%¡ç)§Ăqîܹûºë–[n™2eÊÆO8á„Ă;́á‡₫áX^^zd€`… €̉̉̉ơë×?öØc<đ@X·nƯ¬Y³ZµjơĐCµlÙ2¢iӦ͙3gÆŒW]uUèñÂÈÅ+C‡9r侪1¢|°²²ŕرÉjŒ¢h̉¤IO>ùdeeeèñÂÈÅ+Ó¦Mûøă£(7õóÏ?_ưË—/oĐ Á)§œRµ̉°aĂ“N:é±Ç{ùå—{÷îú; ñ_¿~É‹/®~o"‘xă78âˆ#8"u½k×®QmÛ¶M8¹)ñveeeÍ›7O[/((ˆ¢èư÷ß󇥭,\¸0ôwFqqqè2ˆƯHe7RÙ46$•ƯHd7† úûÎÂ1]̣£ÓM›6M[?́°Ă¢(Ú½{wœ?dƯºu¡¿ ̉±cÇĐ#d»‘Ên¤²ilH*»‘ªîw£ú_ëƠ¯åˆ\üpLí7o——WVV–¶₫á‡Fÿ{Ư  Çt5*((¨~e±´´4¢ªÏYäáXƒV­Zíܹ3YU6õœ¼+ôtaÇ 4¨¢¢âÙgŸ­ZI$Ï<óLaaaÏ=CO†p¬Áˆ#4hđ«_ư*ù¾Æ(f͵cÇ3Ï<óC =@>U]ƒ¶mÛN˜0aúôé§Ÿ~zÿ₫ư·nƯºté̉=züÇüGèÑ‚5=zô‘Gùè£>ñÄmÚ´5jÔØ±c“'̣䦜Ç©S§N:u_÷:tèĐ¡¡gÈ̃ă@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±G8Xy&ÊË«ííÛïçQ„#Ï<rJEûLĂöí£ââÚ™F8ÂAñÊ+Ÿ̃®†UƠYD8ÂA1vltË-Ÿ₫2µÓª1‘=+Ä#á`©±U#Ù«Qè >;6¢è'?ùÇ/;uê˜z¯j »¸âWÚuÇ*ª€¬#á ;6j̃ü3+ª€l$á kß>Úµë3+à  G8¸öụv ëG8ˆ̉ªqÓ¦Íû:£2Ÿp„ƒ¥Æ“wj9ß2œp„ƒ¢–óµ#YJ8ÂA±mÛ§·«†:µÇ=+Äăp8X‰(/oŸ'ï$Ï/.f̀=(Ä“á¸mÛ¶§Ÿ~zÍ5'Ÿ|̣I'Tư1Ó¦M«¬¬¼êª«B ŸQûyÉv€l‘éáøøă_uƠUeeeÉ_Λ7oÀ€·̃zkăÆSvÿư÷WTTG€ƒ'£ßă¸uëÖI“&•••rÊ)W]uƠüă–-[.^¼ø'U?ú€º’ÑWgΜùÉ'Ÿ\|ñÅcÿ÷%½sÎ9çÜsÏ]´hÑc=6tèĐĐ䌾â¸zơêüüüưèGU+………¿øÅ/5j4cÆŒ?₫8ô€9$£ĂqÛ¶m:t8äCR»térÎ9çüío»ÿ₫ûCC2:›7o₫æ›oîƯ»7mư’K.iÖ¬ÙwܱsçÎĐ3äŒÇc9¦¼¼üH[/,,œ4iRiiéUW]UYYzL€œÑá8zôè(¦N:a„E‹½óÎ;Uwyæ™ưúơûÓŸ₫ô£ưhíÚµ¡'¨ÿ2:{ơê5v́ؼ¼¼ \|ñÅwß}wê½·ƯvÛ‰'¸hÑ¢3Î8£¢¢"ô°ơ\F‡cE_|ñÿüÏÿ\pÁÿú¯ÿzä‘G¦̃Ơ¤I“Ù³g_{íµ]ºtÉËË =)@=—Ñç8&uíÚuâĉ5̃uÈ!‡œ}öÙgŸ}ößÿ₫÷âââĐ“Ôg™~Å1¦ÆwîÜ9ôơY= G6á@,€X„#±GbÉ‚ăx̉́ÚµkƠªUo¿ưvÛ¶mûöí»cÇ-Z„  ₫˦pܹsçwÜñĐC•——GQt̃yçơíÛwøđá=zô¸₫úë CPŸeÍKƠŸ|̣É%—\2wîÜfÍ >¼j½eË–‹/>묳’5 ÀA’5áx×]w­X±âä“O^¸pá 7ÜPµ₫àƒqÆ[¶l™3gÎür{ö́™={öw¾ó={8đ²Ë.Û°aCè=)kÂñ…^hذáu×]פI“Ôơ† ^}ơƠM4yê©§Ôת¨¨8ï¼óf̀˜QRR̉¿ÿvíÚ=ơÔSgœqÆ̣åËCo@0YóÇ5kÖt́رÆÏÁvØa:uÚ²eËúZ¿ưío_~ùåo~ó›3f̀hÔ¨QEưë_/¸à‚)S¦À<È.Ysű  à£>Ú×½%%%‡~øúZ/¿ürEçw^²£(:ñÄ»uë¶eË–÷ß?ôN„‘5áØ½{÷·ß~ûµ×^«~×5k̃zë­nƯº¨¯Ơ¦M›(R1‘H́Úµ«AƒU) k²&¿÷½ïååå?~ơêƠ©ë«W¯;vlEÆ ;P_ë´ÓNkܸñ´iÓ₫ú׿–——oß¾ưª«®*..1bD³fÍBï@y‰D"ô q͘1cö́ÙQuêÔiÓ¦MíÚµk̉¤ÉÆ+++‡úQëÏïµ×^;ÿüóS_5jÔäÉ“6l¸ßß[TTT}qáÂ…¡÷/Œâââ/}éK¡§Èv#•ƯHe7̉ØTv#UƯ2dHơÅuëÖ…̃Œ²é…×Ë/¿¼W¯^Ó§Oß´iSEo½ơVEGyä¸qăROvüüJKKo¸á†>ú¨GÇ{́Î;—,Ỵè£~ưë_?ơÔSăü ¹ù/Ó¾t́Ø1ôÄn¤²©́F’Ên¤ªûƯ¨₫×z‰rA6…cE 0`@IIɦM›ö́ÙÓ©S§V­Zđ¯2qâÄ—^zỉ¤Ißÿ₫÷“+Û·o?묳~̣“Ÿ,X° S§N¡· €¬ycqqñ›o¾™¼]XXØ«W¯O<ñ`Tă»ï¾»xñâÎ;WUcEmÛ¶½ä’K>ùä“Gy$ôN„‘5W¿ơ­o}üñÇÏ=÷\G9@;w訣J[O^h|ï½÷Bï@YsűK—.Q­_¿₫`¡£:ªaÆ6lHûØP̣ư ;w½adM8^uƠUùùùwÜqÇßÿ₫÷ƒú…̣óóO:餭[·₫̣—¿¬¬¬L.nذaæ̀™‡zè€Bï@YóRuË–-o¾ù櫯¾úôÓO?ưôÓ;tèPưHÅSN9å€|­©S§~÷»ß9sæO<ѽ{÷;w¾ổK•••S¦Lù—ù—Đ;FÖ„cƠ¥¾;vÜvÛm5>æ@‚Ó¢E‹'xâÎ;ï\²dÉŸÿüç“O>ùâ‹/>öØcCo@0Y§Ÿ~z]~¹&MŒ7nܸq¡¿o€L‘5áxÓM7… §e͇c+k®8~ưë_ßïc–.]zL€z+k±´´4m%‘HT—Óºuëƒ}08@Ëp|ươ×ÓV***¶oß₫‡?üá;îøøă¯½öÚĐ3ÔgYüdž ¶oß~ôèÑ·ƯvÛîƯ»̣“Ÿ¤ư¬ ,Ç*_ÿú×;wî¼mÛ¶mÛ¶… ̃ªáEQË–-£(úâ¿z€z«>„cYYÙ믿̃¢E‹¦M›† ̃ÊÇüơ¯­q½¤¤dîܹï¿ÿ₫àÁƒCÏPŸeM8₫ùµÜ{øá‡_vÙe¡g¨Ï²&kùYƠ:t6lXûöíCÏPŸeM8úYƠae͇czö́YK;3æß₫íßBÏPŸeM8–••}̣É'ûºëÍ7ß|ë­·BÏPŸeôKƠÏ<ó̀Å_\ơË9sæ̀›7¯úĂ*++‰D‡BÏ PŸet86lذY³fÉÛ%%%‡zh“&Mj|dóæÍ'Mz^€ú,£Ă±_¿~K—.M̃.**:묳&Oz(€•Ñá˜ê‚ .èƯ»wè)rWÖ|8fâĉÜ×½W\qE-÷@¶ÈË‹Î9g?€P²æcE%%%úÓŸ¶nƯ¶^^^₫‡?ü¡aÆ¡€Ï%…óçGQư×íóyyQ"zVrRÖ„ă;ï¼söÙg×ræÎÈ‘#CÏFí˜z­ñÚk£k¯ =%¹'kÂñ̃{ï}ë­·N8á„¡C‡₫₫÷¿_¶lÙƠW_ŸŸ¿víÚyóæ9̣Ê+¯ =#|.‰Ä§u˜Ö©ƠxÍ5ª‘0²&Ÿ}öÙ/|á 3gÎlÖ¬ÙÀûơë×±cÇ>}úDQÔ©S§Ÿÿüçÿ₫ïÿ̃¥K—ĐcÀçR½§MSd¬ùp̀Ûo¿}ÔQG%u<̣È# W­Z•¼kĈ………÷̃{oèàH}ÿâüùQ§N«~© +kÂ1¢ >¶C‡›7oÑnذaQQÑk¯½z@80jǘ‹j$¸¬ ÇÖ­[oÙ²å£>J₫²}ûö/¾øbƠ½yyyÅÅÅ¡g€&­9F5^Ö„ăàÁƒËËË/¿ụ̈7FQÔ»wï7ß|sÉ’%QíØ±ă¥—^j×®]èà€I;¯qƠªưœïu k>sî¹ç>ơÔS‹-J$w̃yçI'Ô¨Q£K/½ô«_ưêÚµkËÊʾơ­o…ŒOù®å|G¨YsűE‹÷ßÿ¸qă=öØ(Úµk7eÊ”={ö<÷Üs;wî4hĐèÑ£CÏ@Úg¨7mÚ\ơËùó]w$¤¬¹âEQ‹-.¼đª_}öÙC‡]¹re«V­:uêz:8ªŸ¼³ysmç;B]ʦpLÚµkתU«̃~ûí¶mÛöíÛ·K—.-Z´=µœ×¨ÉÙ;wî¼ă;zè¡̣̣̣(Î;ï¼¾}û>¼G×_}aaaèàÀ¨ñäÔvT‘5ïqüä“O.¹ä’¹sç6kÖløđáUë-[¶\¼xñYg•¬IÈ^É#xj9¯1ù€Oy„:5áx×]w­X±âä“O^¸pá 7ÜPµ₫àƒqÆ[¶l™3gNèàóJ$ös^£j$ ¬ Ç^x¡aÆ×]w]“&MR×6lxơƠW7ỉä©§ =#@}–5á¸fÍ;Öø9˜Ă;¬S§N[·n =#@}–5áXPPPơó«+))9üđĂCÏPŸeM8vï̃ưí·ß~íµ×ªßµfÍ·̃z«[·n¡g¨Ï²&¿÷½ïååå?~ơêƠ©ë«W¯;vlEÆ =#@}–5ç8öíÛ÷?øÁ́Ù³¿óï$ǸÿøÇçŸ~ăÆ•••Çÿ·û·Đ3ÔgYQ]~ùå½zơ>}ú¦M›¢(zë­·¢(:̣È#Ç—z²#C6…cE 0`@IIɦM›ö́ÙÓ©S§V­Z… 'dn8îÙ³'¢C=´ú]………½zơ = @nÉÜÇ{́±§zjè)ø‡̀ Ç >üë_ÿzè)rQ–…ăîƯ»KJJBO‹²,E8‹p á@,€X„#±dîO‰¢èw̃éÙ³gêJyyyEi‹U^yå•Đ#Ô[‰D¢¬¬¬úz‹T™?₫xèøTæ†c—.]°råÊ»îºkơêƠ~øaQQј1c₫ơ_ÿ5ô®ăĂ15[´hÑÙgŸ½hÑ¢–-[ö́Ùó•W^9÷Üs-Zz.€`2÷c@»wï¾â+5jt÷Ưw÷êƠ+¢×^{mäÈ‘W]uƠ)§œ̉ Úr‘ªÁĂ?\ZZzÑE%«1¢¯|å+ßüæ7ẃرråÊĐÓ„!kđ—¿ü%//oذa©‹7̃xăºuë;î¸ĐÓ„á¥ê¬Zµª°°°uëÖ/¾øâ+¯¼²k×®£>zđàÁùùù¡GF8¦Û³gÏ|Đ¹sçk¯½v₫üùUëíÛ·¿ơÖ[9æ˜8HQQQÚÊÂ… Cga‡!ƒØTv#•ƯHcCRÙTAvcÈ!¡¿ïL!Ó}đÁQ½ñÆï½÷̃ôéÓO9唿ÿưï=ôĐí·ß~Ùe—=₫øăq®;®[·.ô÷‘A:v́z„ b7RÙTv# Ie7RƠưnTÿk½ú¢á=é7nœ¼qĂ 7 6¬yóæ­[·¾ổK‡^\\üûßÿ>ô€aÇtM›6mܸq~~₫€R×EÑÚµkC†p¬AË–-9ä¼¼¼ÔÅä+Ô{÷î =@± (--]¿~}êâË/¿EÑÑGz:€0„c †EÑ”)S̃ÿưäÊÊ•+ï¾ûî‚‚‚SO=5ôtaøTu ºuë6nܸ_üâC† éƯ»wYYỤ̀åËọ̣́¦M›öÅ/~1ôtaÇ]xá…-Z´˜3gÎóÏ?_XX8hĐ 1cÆté̉%ô\ÁÇ}:ó̀3Ï<ó̀ĐSd ïq á@,€X„#±Gbµ̣̣̉ÿéØ1ôLÔg²S^^ ‹[¶„‹úL8@ª±÷{|>²Í~Ó0//êÖ-ô”ÔC²ÊK/ÅzØÚµ¡¥Uzơ =¹K8‹p á@,€X„#d›DâÀ<₫I²Pí]¨98„#d§}Ơ¡jä EQ”—Ư{ï~qvíú̀?‹G¥¥¡g¢>kz/…£GGQ}ÿûû|@^^†]Î+(ø̀/O9%ô@Ôs®8À§F®áºcêµÆ BáGø̀uÄ´vL­ÆË/nº)ô¬p€(ÚG;ªFH%à̉ÚQ5B៪ñ³/ª’„#|FZ;¢á„#|FÚy îç|GÈÂ>Uă)ß5Ñ9H8À?¤}¦–3z 7 Gˆ¢}œ¼£!•p€ÚÑÑPE8À§jüđĂĐƒ@n¹îºOo§¥aj5FQôúë¡gÍÂq?î»ï¾^x!ôs~úÓÛ±z5vëzÖœ!k³aÆ[n¹åè£=ä¢êíøÆ‡¨Æ€„ă>íƯ»wâĉ………“&M = 䨴vüÆ7¾Tu[5Ö½F¡È\·ƯvÛ5kî¹çfÍ…r×OEQ4ỵgUc±f+V¬˜={ö¨Q£úôé³zơêö·¥­,\¸0ô÷Fqqqè2ˆƯHe7RÙ46$•Ưˆ¢¨wïC¢èK©+õ¼¹¾ú!CBo@¦5(//Ÿ8qbûöíÇÿûÖ­[ú›È ;v =B±©́F*»‘Ɔ¤ÊñƯX³&úÆ7̉;uê˜HÔÑƠÿZ¯~…(Gxc ¦OŸ^\\|ă7æçç‡rZÚg¨G.­ºíøÆºçcº^xa₫üù—\rÉqÇzÈiƠÕiÜxgçÎͪ̃ƠÙuG"W«Û°aCE3gÎ,ú_ßùÎw¢(Z°`AQQÑi§z@È û:¯q_ç;R\qL÷å/ùÛß₫vêÊîƯ»—,Ỷ¶mÛ={¶nƯ:ô€j9¯1ísÖ®;Öᘮ_¿~ưúơK]Y½zơ’%Kz÷î}ÓM7…rE"ñ«‰5¼“Úª±ÎG C%Ñ5û<¯1ÙÉÿ¥nx#¹j?å[5Ö1W÷¯GÎepÅ€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p –F¡ÈPååå¿ưíozè¡âââĂ?¼k×®£GîÛ·o蹂5Ø»wïù矿bÅ‚‚‚O<ñïÿû²eË–,ỴăÿøG?úQèéÂ5xđÁW¬XÑ«W¯»ï¾;???¢ 6Œ5êöÛo8p`·nƯB€÷8Ö`áÂ…Q]yå•ÉjŒ¢¨K—.]tQEEÅsÏ=z:€0„c 6õÜ´iÓ=z¤.vé̉%¢mÛ¶… /U×à®»îjÔ(}gV¯^EQûöíCO†p¬A÷îƯÓV–.]:kÖ¬/|á Æ ‹ó'¥­$_₫ÎAÅÅÅ¡GÈ v#•ƯHe7̉ØTv#UƯ2dHèï;SÇư¨¨¨¸ÿ₫ûo¼ñÆ›o¾¹E‹q~׺uëBA:v́z„ b7RÙTv# Ie7RƠưnTÿk½ú¢!k³lÙ²ÿüÏÿܸqc›6m®»îº>}ú„ áX³={öÜtÓMsçÎmܸñ˜1c.¸à‚ªOXä&áXƒÊÊÊñăÇ?ưôÓƒ¾ækZ¶lz"€đ„c æÎûôÓOŸsÎ9×\sMèY2…sÓ%‰yóæ~øáW\qEèY2ˆ+é̃{ï½7ß|3??äÈ‘Ơï>|ø¨Q£BÏ€pL—< ª¼¼|ƠªUƠïơÁj g Çt_ưêWÂP÷8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"÷éw¿ûƯˆ#zö́Ù·oßÉ“'—””„(+ 2$ôÄn¤²©́F’Ên¤²a ÇƯrË-S¦LÙ¸qă 'œpØa‡=üđĂ?üáËËËCÏŒp¬ÁºuëfÍƠªU«… Î5ë©§:÷Üs_{íµ3f„ áXƒ|°²²ŕر-[¶L®L4©  àÉ'Ÿ¬¬¬ =@±Ë—/oĐ Á)§œRµ̉°aĂ“N:içÎ/¿ürèéÂé‰Äo¼qÄGqÄ©ë]»v¢hÛ¶m¡£Qè2NYYYEEEóæÍÓÖ ¢(zÿư÷ăü!EEE¡¿ b7RÙTv#•ƯHcCRÙTv# á˜.ùÑé¦M›¦­vØaQí̃½{¿ºuëB—ªÓ5õ[µ’H$yæ™ÂÂÂ={† áXƒ#F4hĐàW¿úỤ}QÍ5kÇgyæ!‡z:€0̣‰Dè2Ñ=÷Ü3}úôvíÚơïßëÖ­K—.í̃½û=÷ÜSư˜€!÷é±Ç{ôÑG_{íµ6mÚ|ík_;vḷD€Ü$ˆÅ{ˆE8‹p á@,€X„#±Gb̀ï~÷»#FốÙ³oß¾“'O.)) =Q0ååå÷Ưwßi§vüñÇ÷ïßÿ‚ .xî¹çB•¶oß̃«W¯ &„$¤•+W^zé¥ 8á„FµlÙ²Đ³gÏÙ³gç;ßéÙ³çÀ/»́² 6„*€M›6½úê«5̃›kO­µ́F>µÖ₫ïFO­uI8·ÜrË”)S6nÜx 'vØa?üđøẶ̣̣Đs°wï̃óÏ?ÿúë¯÷ƯwO<ñÄÎ;/[¶lôèÑ·ß~{èÑK$W\qEƠ@ÏM‹-:û́³-ZÔ²eË={¾̣Ê+ç{î¢E‹BÏ@EEÅyç7cÆŒ’’’₫ưû·k×î©§:ăŒ3–/_z´º6wîÜ}Ư•ƒO­ûÚÜ|j­åß*ZëZ‚ÏmíÚµG}tÿ₫ưßyçäÊÔ©S»víú³Ÿư,ôhÜÿư]»v=û́³ËÊÊ’+ëׯÿÚ×¾Ö­[·×_=ôt!ƯsÏ=]»víÚµëå—_z–0víÚƠ»wïă;îÅ_L®¼úê«ÇsLŸ>}***BOW×’ÿO¹́²Ë>ùä“äÊóÏ?ß­[·o|ă¡G«#»wï^¾|ùƠW_üÿÅ+̉SO­ûƯœzjƯïn¤̣ÔZÇ\q<|đÁÊÊʱcǶlÙ2¹2ỉ¤‚‚‚'Ÿ|²²²2ôtumáÂ…Q]yå•ùùùÉ•.]º\tÑEơ₫U•Zlذá–[n9úè£C̉Ă?\ZZzÑEơêƠ+¹̣•¯|å›ßüæ;V®\zººọ̈Ë/GQt̃yç5jÔ(¹râ‰'vëÖmË–-ï¿ÿ~èéêÂĐ¡CGùÀ́ë9ơÔºßƯÈ©§ÖưîFO­uO8Ë—/oĐ Á)§œRµ̉°aĂ“N:içÎÉ¿rÊæÍ››6mÚ£GÔÅ.]ºDQ´mÛ¶ĐÓ…±wï̃‰'N4)ô,!ưå/ÉËË6lXêâ7̃¸nƯºă;.ôtu­M›6Q¥6b"‘صkWƒ ªR²~›6mÚ̀™3gΜ٧OŸSO­ûƯœzjƯïn$yj "'ªD"ñÆoqÄGqDêz×®]£(Ú¶m[ï̃½CÏX§îºë®êí­^½:¢öíÛ‡.ŒÛn»mÍ5÷ÜsO³fÍBÏ̉ªU« [·nưâ‹/¾̣Ê+»ví:úè£\u%§œvÚisæ̀™6mZ“&M?₫ø’’’™3gï{ßË‘Oúơë—¼±xñâê÷æÚSkí»åØSë~w#ÉSkÂñó*++«¨¨h̃¼yÚzAAAôÙË 9¢{÷îi+K—.5kÖ¾đ…´KM9bųgÏ5jTŸ>}’Ị̈¹iÏ=|đAçί½öÚùóçW­·oß₫Ö[o=æ˜cBX׿Î{₫ùçŸ₫ùU‹£F}Ù²eÏ<ó̀˜1c̃zë­Ë.»¬~N¶F¥¥¥7ÜpĂG}Ô£G³Î:ëÔSOÍÏÏôÑGsó3æƠyj­…§VO­¹âøy5õ|Ô¨Q¡g$˜nƯº7î¿øÅ!Cz÷î]VV¶|ụ̀¼¼¼iÓ¦}ñ‹_ =]]›:uêw¿ûƯ™3g>ñÄƯ»wß¹sçK/½TYY9eÊ”ù— =]FđÔZÅS+™C8£G>̣È#}ôÑ'x¢M›6£F;vḷ?‘sJqqqEååå«V­ª~on¾›T^xa‹-æ̀™óüóÏ4h̀˜1ÉŸ~‘kZ´hñÄOÜyçK–,ùóŸÿ\XXx̣É'_|ñÅÇ{lèÑ2ˆ§Ö$O­d¼D"z²€ăxˆE8‹p á@,€X„#±GbÄ"ˆE8‹p –F¡ø¿Ø°aĂi§VûcV®\y衇† ₫@ËËËkƠªU}¹%K–TTTœ|̣É¡¿ïøÙÏ~öØc-_¾<ô @®@ËÏÏæ™gếË]~ù奥¥¯¿₫zèï;¢èw̃ý±ÇBOäáM>₫øă­[·¾øâ‹÷̃{oiii³fÍBOäáM&L˜đÔSO…ÈQÂÈ Ï=÷ÜoûÛ×_}÷îƯƯºuûÚ×¾vá…rÈ!UرcÇœ9s₫øÇ?₫ío‹¢¨M›6ưû÷ÿ₫÷¿Ÿ|å7̃x÷Ưw'YTTÔ¤I“W^ye„ ,¸ï¾ûN<ñÄÔ¯Ơ½{÷fÍ-]º4¢äc/^üî»ï₫üç?ß°aĂO<ñ¥/})æTƠ 6́øă¢¨¼¼ü—¿üeè}r‹pê¿3füú׿N$mÚ´iÙ²å‹/¾¸lÙ²gŸ}væ̀™_üâ£(Ú±cÇÈ‘#·lÙ’ŸŸÔQGUVVnÙ²å̃{ï}úé§~øáÂÂẪ½{ïƯ»÷سgϹç[{ÛU·fÍñăÇ———GQTYYsª 80yc×®]¨cÂÈbåååU!•ª  à‘GĨ^¼xñ́Ù³;tèpóÍ7å+_‰¢hÇ“'O~æ™gî¸ă)S¦DQôđĂoÙ²eàÀ3f̀hÚ´iE¥¥¥—\rẸ́åËÿô§?}÷»ß8pàÀ,X°wï̃É“'ÿ³s^}ơƠÇ{́Å_ܵk×-ZÄœ Ó8Èb‰Dâ­¼ưöÛU™>}zE·̃zk²Ï¢(jѢŭ·̃ÚªU«‡zh×®]QíƯ»wÀ€—_~y²£(jÖ¬ÙĐ¡C£(Úºuë石iÓ¦³gÏîÓ§O²cNi\q²X̣½†µ< ¤¤dóæÍ:uêÑ£GÚóÓ§Ï#<²jƠª~ưúưèG?Jûï½÷̃ïÿû5çé§Ÿ̃¸qăvª€ P#áÔg›6mJ₫oQQQ¨º6ùÖ[oưå/yñÅ·mÛöæ›o–””À1:tèđ› £G >Û³gOEíÚµṆ̃á‡₫üç??ôĐCïºë®Ôˆ“ç̣ü³¶oß^ơ¹éÏ3@̣á >kƠªƠ‘G¹qăÆƠ«W§®WTTœyæ™ưû÷ß±cÇÊ•++**¾úƠ¯¦½­píÚµq¾DÚ‹ÚøĂÈT¡w Â¨çÆWYY9nܸ5kÖ$W>üđĂŸ₫ô§«V­êÑ£G‹-’G|¯]»¶*×***xàyóæEQ”<|±JeeeYYỴṿ‹sçέZYºtéwÜq@¦ ½m5đR5PÏ >ü…^xä‘G† Ö®]»ÂÂÂM›6•••uÔQ×_}E:u4hĐŸ₫ô§SO=µW¯^‰DbƯºu%%%#Gœ3gÎÿ÷đÁÉÓs7o^RRröÙgwèĐá¶Ûn6lØo~ó›—_~yĐ AƯ»w÷Ưwßxă‚‚‚Ö­[üñÇŸs*€ ä#PÏåååƯpĂ ¿üå/˜ü‘0;v7nÜ£>ZXX˜|̀Í7ßüăÿ¸mÛ¶/¾øâ;ï¼s̉I'=úè£W^yåÈ‘#6l¸|ụ̀äĂ&MÔ¡C‡7®_¿>¢öíÛÿ×ư×àÁƒ4h°dÉ’ơë×·k×nö́Ùq®Æ™ ÓäUÿôÿ¬>úhçÎíÛ·ÏËË = ÀÁ"ˆÅKƠÄ"ˆE8‹p á@,€X„#±GbẠ̈ÿ‡‚ˆù†3s^ÏÇ÷ñ} gFxóцיóÁbµZPJª€o  …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG|I|¼ê `b„#^Äb‹Ó{ăăÅêƠ®¸á€·°¡Ă4ÔªÑÅw#đe· i¨¯F!„ƠªzV˜á€·8ỷq;Rđ+ÿúđ&‹S§Ê>8j„· đ:†v´á‡6Ôâ¥j¼á5k ƠåUà‡bbbTđyyy „è¥?ÂÏï‘®z5G·0í¿'{111¬† «¡Çjè±,H|¼8rÄxđÈ‘tN:zÉ¿ /Ăóx©ïb¸†:0đ¬í6Û7B-Â/b¿óNTT7û;D8à-œí×èlGÀĂG¼…‹ưiGxÂoa‹E‡ÁèÛ‘«d á÷JMMU=‚a5ôX =VĂÀ̀ bµ£P¿Z;¹ÍüoĂø’“'UO# …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG0/‹E\¹RÎ̀Ăb6”óxØbÔ(W¨][ơˆ&cêp̀̀̀Œ‰‰ùé§Ÿ\?́̀™3íÚµ›8q¢êy "iT½ºÓvÔ`’Z̉¾Í{ïuÚ¦Z /±b…xøañ₫ûNÛ±vm‘—Ç_G™:SRRÊ}ŒƠjùä“rüÁܹ́SơÈPÁúô_}Uö¡¡ơôî»âoS=®›Ơ¨! Ê>4´£~5†?:P1¬Ö²Û†vÔW£Å"JKUÏjf Ç~ưú 6́ÓO?-÷‘óçÏoÑ¢…ê‘ â9kG³U£ÆY;Rj9lGªQ!3†ằ™3“’’’’’âââ\<́Úµk“&M 2eê‘À-́ÛÑœƠ¨±oGªÑÚ±E‹¦T£BªP S§NÚM›6¹xØ;ï¼sèĐ¡¥K—Ö¬YSơÈà.Z;̃wŸñ¸ÙªQ£µ£ư³>Ơ¨–ƠZñÅÅ×oQJ˜1éÛ·oñâÅ qqqü½<&&Æp$UÿFt3ÉÎÎV=‚a5ôX =µ«#̃?èÑGëÛ¼đBîư÷de™tA¨Ô¦MÛ‡÷Üóë̀™gM»^"3SDEEê;–屿”>}ú¨^oA8:PTT4ỉ¤ˆˆˆ &ü±Ï®ú›đ"‘‘‘7ÿIü«¡Çjè©]¨¨>œ9³ÎóÏשVͤ bØ̃eûöª‘ù‹IWĂKØï×øê«‘K—zè«ÛÿX·?Cdf|c¹æ̀™“ưú믩ÜÎá6x.öwôoWĂÅ₫đưƠ06.öw„ûF;wî\¾|ùèÑ£Û¶m«zp;ĂƠ0.öè1ĂƠ0.öèÇ®¡Î̀,{}vô<ÂÑ(##C‘””ó_>ø bÍ5111}ûöU= Tûk¨]ïïèß́¯¡v½¿#<ÀáÎ;.öw„»ñG£&M<đÀú#—.]Ú²eKÆ cccëׯÿG?1xg;﮳®^]\¾,Ô¾ßÑĂ«¡¿†Úpơ½÷ơë…Ú÷;‡‹ươ×Y¿ÿ¾Bx́ư&G8uêÔɶ_æàÁƒ[¶liß¾ưo¼¡z:¨xö;ïÚÑï«QÏ~çC;Răz¿F};̣›:<†—ªÀ¤´×ûœí×h{ÍZÿ² Ó¾Mgû5Ú^³6Éjx mµ]́ר=`Î1i’êYMƒ3`^®3¨Osu’ëo¶F s­†—(wÍùKñ0S‡cbbbbbb¹kƯº5û2đR5¤B8@ á)„#„Åbü?ÀdGʳoŸÈÍupœv„ɸôÓO"6Öé½´#̀ÄÔû8P™.´X؇&ÁGnZq±ê O ¸i•+«đÂRGH! …p€ÂçdöÙa/˜á€K®»j„™”ÇYR0~s ¬Vqíäç&L3§¼ä„Úñăª'B±/jô:ª'0ẦËb;:½wÄQ©’()ñÄNï}ñE)6oöÄ.~1ur²ˆ³f¹} è¹₫K)(!!R¿N…p“̉~ÜnÛæ¸GŒË– !D` {ÛQ#;Ûq;¾ø¢HLBˆnƯÜÛ¶øpX!ÉÉbôh!„˜:•vô×)Z5ºxÜp³³oG[5j<1†};ÚªQÓµ«¿zíÚe· b«FÍóÏ{b5 „xúé²Û†¿}5 !6lP=«i`Rú÷/êÛÑPî~›£₫óëÛÑPî#7×q;ªÑK̃ôi 8nGûj́Ư[ơ¬¦Áû|À¼¬Ö²ÆZ;6kæÑj´CkÇCß}×Ócäæ:uÄÅ‹×?´XÄ¢ET£b !DR̉ơ-±¥¨¨²PF8€©ÚqÛ¶îR2Fv¶x÷ƯZJÆ0´#Ơè íxÛmMlwQÇKƠ`v“Èóä%c^³V5ô ¯Yk¨F%G€>ü†ăâÔŒ1mÚ ₫éOjÆàºi/dÿ—B5*A8€Ù®†Î÷èq+ĂƠ0Âù=ne¸FĂn/j®†Ñđ—¢á¦f_·£}5j<܆jt±G<ÆP={Únó—ây„#˜—ưÎ;Îöèq+ûw23³lz¬íw̃q¶G<Æ~çŋϹØßîF8€I9Û¯ÑĂíèl¿Fgû;º‰³ưiG…œí×èlGxáfôÊ+®ökôX;®_ïj—oµcV–«whGU\̣́M;ªB8€MŸ.îºëúír÷ÁÙºƠ]cÜ{¯˜0AvŒS§Ü5Fd¤X¹̉Ơúvdk±-µĂwôíÈ_Ç`R;vˆ»îrơW»ËƯ?’çÎ&¨cĐ ±r¥«¯¢µ#âaV««ưµvä/Å“G0¯;Êy€g~$Ïëc TÎrs=1 \ïרư^x á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8€yY,7û€ *¬Vơcx‰ÄD±u««˜j5àmL™™™111?ưô“ư]EEE|đAß¾}o¿ưöÎ;?öØc[]ÿw ¾FëRî*Dh¨ÈÏ•*9mGÏŒá%Å‹/Nœ¶£©V^ÈÔᘒ’âđøµk×F9kÖ¬óçÏwèĐ¡Y³f;v́5jÔ‚ T ă­·Ên;¬ưÁ1cÜ5Æ—_üüë·¶£~Œ<»FwåxñÅë·¶£~5êÖU=.L)Pơ 9rdíÚµŸ~ú©Ă¬X±bß¾}íÚµ[²dIPP"###!!aÁ‚=zôhÙ²¥êïnÖ¸qBñ́³×?´Xnˆ6} <óŒxçwñÀâ_ÿ>xưĂJ•DiiÙW×Ñ¿¿ø¿ÿS½jnV­8{V4hpưĂNÄ–-¢cG«&.\P=.LÉŒgûơë7lØ0gƠ(„HMMB¼đ Z5 !¢££Ÿ|̣É’’^°à7Æóç—}è0×ÜZøxñ¯•}h;ïh¶jÔÔ¯/Î-ûĐṽ‘j„—0ăÇ™3g^½zUñÑGmÛ¶Í₫YYYƠªUkƯºµ₫`tt´âÔ©SªÇ€ c̃QÏƠ¨ÑÚQ̃QˆHÛ½æ©FÖúóúƠ ¡–ñS§NÚM›69|À¢E‹+sđàA!DDD„êñ "ÚÑÆcƠ¨1´£ÙªQchGªÊ™1ËƠªU+Ă‘íÛ·'''W©ReàÀ2Ÿ!&&ÆpD{ùÛ„²³³UàEX =VCOíj  rsk&&Ö±>¼`üøÜ¬,qûíâ½÷‚ŸzªíH¯^…o½uÎĂcx;î¾»±íĂ5Jwî}Tß̃‚p,GIIÉÇüú믗””̀›7/,,LæO¥§§«Ü‹DFF̃ü'ñ¬†«¡§v5oøpÙ²~XÓóc<ơÔ ~óMpÓ¦‘¦Ưz&*ê†ù¥̉™3‘¶kè̀óÿ±ØÿX·?Cdf¼8F̃;úơë7sæ̀°°°%K–Üÿưª'€Wîv< Çp±¿£s¸.öw<ƒpt¬¸¸xæ̀™#FŒ8sæ̀˜1c¾ú꫸¸8ƠC@Å3\Cíđ:kÑ¿¿xï½s¶M؆k¨ẃ8iûv„Z¼Tí@iié„ 6lØĐ«W¯3f„‡‡«ÜÂÙÎ;ÎöwôÀÚƠ0YY….öwôoö;ïde•¸Øßđ$Î8:’’²aÆGydÁ‚T#å¬íïè1ô×P;ÛßÑ¿9Û¯ÑÙ₫€‡FV«ơ£>ªQ£ÆäÉ“UÏ`¿ó¡=Ă~çC;䌣Æ~çC;æä¨¦ÄKƠF.\8ỵdPPаaẮïOHHP=#T«UX,N÷k´íïèîó|ÚÎök´íïh†Ó¶Ơp¶_£mÇƠ«ưÿ7wĂ;FÚQEEEiiiö÷r‰ âºÆÆ»jLj7K5j\³ơë‹_Uª¨feêpLLLL4́]&ÄwÜÁ.Œ¯E5B!̃ă)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8¢"Y,Âb¹©Tˆ»ïö1đ3„#*Œ-Åœ5Y¹¨wß-vîT?₫‡pD…™>½́¶}“é<ü°ÇxüqÙ1ââ<º>ø:Âæå—¶£¡?ưÔcüơ¯"9¹ü1ââÄÖ­ÊÖ _D8¢"9lGOV£Æa;RÜ$ẦĐQQ‘¶Û©F‹óT# áˆghG'«QchG ƠÀF8Â-^~ÙxÄĂƠ¨ùë_G¨F₫0Ânáúrf³€ QñôqÖ¼ùo{xŒ?ÿÙñq pD3\CízGŒ'uz­ D8¢"9ÜyÇÅ₫Ăv5Œ‹ë¬€ ÂÆÅ~lG;ïĐÜ ÂÆj½~ĂáÎ;úv´=̉­c8ÜyGß×®)[+|Q êàW¬V1dˆÓw´=źwêqÇ;:ƯyGÛ£gÔ( h™đM„#*˜ëư=P×û5ÚïïÊÅKƠB8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„£ÿxûmW÷Θ¡z>Ï2ÄƠ½©©ªç3%‹¥œ̀¥zD€KªP)33ó¾ûî[±bEÛ¶míïưç?ÿ¹bÅ£GwíÚuâĉ¡¡¡ªGvÊö#ùïwpïŒâ•WÄ+¯«Uơ ]O?upojª¸ï>!„YVĂKh)‹Óe·ư­=ÿ¼êYN˜úŒcJJ³»æÏŸ?mÚ´cÇƯyçƠ«W_µjƠO|ÿ₫ưsçÎU=»cúS8†vÔW£0Ç96ư÷hhG}5 !._V=«iäæÚµË>4´£₫ĂüCÜv›êqN˜1ûơë7lذO¾)„bÅ¥¥¥ăÆ ×L™2%$$䫯¾*--U=¾cÛÑ„ƠhÿÚÚѾ«US=¨™8kGC5>ö˜êAΙñ=3gμzơªâ£>Ú¶m›ưvíÚU©R¥nƯºÙté̉eíÚµ{ö́iß¾½êïÀ1«ơ†×¬¿úê†K@̀Sö«ñÙgấYñƯwe÷RJäæ:uÄÅ‹×?ŒÔßK5€÷3c8vêÔI»±iÓ&û{­VëÑ£Gk×®][zDˆæÍ› !N:åµá(n¬%3W£ưjP^ÂĐ6T#ø3†£k………%%%µjƠ2 B\´ÿ‰çHLLŒáHª§6€É̀4ÈÉ̀̀ÊỆ̀w ;;[Ù×v´iiÇÏŸWÖÑjWĂḰ̃-I~~ÙûdfÏÎéÑă…ÿJ½ÿ6 X=VCOÉjôéÓGơ÷í-G#í̉éjv§¤ªW¯.„¸té’̀'IOOW5¿ư~k×F:Ü£Çc"##o₫“ü1ö¹₫ê«M¿»ƠÏWĂ{äçßđá”)a“'‡©J=₫m° z¬†çWĂ₫Ǻư"“0ăÅ1®ƠªUËb±_¾|Yü÷¼£×2\ £q¸G®†Ñ8Ü£äz;€7#CBB́Ï,!l×Y{!×P›°]́¼C;*¤ÄÙ³s\́ÑđB„£ơêƠËÍÍƠJÑF{Ÿ`½zơTOç˜Ăj4m;:ÜyÇÅ₫đ ĂÎ;ÿó?¿¸̃ßàmGzö́YRṚư÷ßÛX­ÖÍ›7‡††ÆÆÆªÎçMØ.ök¤r¶_#í>„pt`đàÁ•*Uz÷Ưw/ÿ÷Îää䜜œAƒƯrË-ª§sÀơ.߆vô{®wù6´#üPơø^ª€ÂRGH!ưDX˜«e„‹ˆ‹S=¥§̀U₫j¸~@…ؼ¹œ¯á‰1JJ„Åâộq!DÇàG&rs…NükÇøÁí8k–˜:µüƠpñ€ ±y³èÖÍƠW‰ˆÙÙn£¤D !D¥JÛ±cG±m›ÛÇøÂÑ4o^vÛ₫Ç¿₫H:ªgu¿œÙƠ¨]ÛćƯëj [5ºÛ5e·íÛÑVÈ ưÁ¶m¢C‡²ơ™¢¿Ư·¯X»Vơ¬î7o?¾üƠ¨]ûúiZ77ǸŸïøKªÑÅ‹È7/>^üë_eêÛÑPnàG?á°MX‡íèÉjÔ8lGOV£Æa;R€?€pô.Î;ª5.Î;z¦5†vŒôp5j́Û‘jü„£_1´£Æ„Ơ¨1´£Æ“Ơ¨1´£‡sÍĐªÆø4ÂÑߨ_ë`ÎjỒ›g<âájÔŒ'jƠºáˆ’\‹-ZÜp¤´TÁßE8ú××›—¬FD„ÈÏW?FÇâđá8Û£‡G¿¢Ï‘ĐPÇÇÍCÿ]W­êø¸8ÛyÇĂc8Ûy‡vÈ#ư‡áj˜‹^+c†«aœ^+ăV†j̀̀̀r¶G[Ù_Cíl\ ư„Ăk¨]\gíß^Cíâ:k7q¸ó‹ưƯÄáÎ;.öwÀÂѸØyÇ„íèbçO¶£‹ư=Ù.ök´oG\ăg…?¸zơú ‡;ïèÛÑ g•lߣĂwôí¸r¥Ç8uÊÁH6úvœ0ÁclƯêj };̃u—Çø‡@Ơ T®,®^ƒ9ƯygÛ6g¢ßJlµ:uœî¼£íÑ' rû‹ÓX7N!²³Åܹ*ÇĐÚqöl±c‡{ÇøŸ ÇË—/W¯^Ưöá‰'Ö¯_åÊ•V­ZuèĐ¡fͪT¬rårök4O5j\ï×h¿¿£›¸>Å«µ£̣1âăE|¼‡&ø4oÇÜÜÜ×^{mëÖ­yyy¡¡¡£G~ôÑG¿ưöÛ§Ÿ~º¤¤D{Lƒ æÏŸ«zXæƠáxụ̀å?^a±X̣̣̣fÏ]¥J•¤¤$!Dß¾}ëׯ¿oß¾Ư»w?ñÄß|óMHHˆê‘ü–W_“œœ|₫üùöíÛñÅiiiÿ÷ÿ•˜˜xáÂ…7ß|s̃¼y'Nüøăüñ‚‚‚äädƠóø3¯Ç­[·V®\ùÿ÷£££[´h1a„’’’† öéÓÇö°gy¦jƠª»víR=/€?óêp<~üxÓ¦MĂÂÂlGn¿ưv!DDD„₫aAAAYYYªçđg^ÁÁÁùùùú#5kÖ ¶¿†úêƠ«ªçđg^}qLTTÔöíÛÓ̉̉n½ơVíHåÊ•÷îƯkxØ₫óŸÓ§O·iÓFơ¼₫̀«Ï84Hñä“O~öÙgYYY¶ưwôrss'O\RR̉­[7Ơóø3¯Ç₫ưû÷ë×ïÂ… Ó§OïÓ§ÏáÇ =zt—.]¶oß̃¤I“G}Tơ¼₫̀«ĂQ1wîÜ… ̃ÿưÍ›7·cVVÖ-·Ü2hĐ U«VU­ZUơ°₫̀«ßă¨é̃½{÷îỮµpáÂ&MpY €ø@8º¥z³đö—ªà%GH! …p€ÂR|ïªêüüü´´´³gÏ6lذcÇ999aaaª‡đ¾¹¹¹ï½÷̃Ê•+‹„#FŒèرc|||ëÖ­gͪz@æ3/UÿöÛoO?ưtJJJÍ5ăăămÇĂĂĂ7mÚ4dÈ­&¯̣Øc®îuôÛ×Ư¢woƠ đ >‹-Ú·o_×®]SSSgÏm;¾bÅ?~|Ù²eøå‹‹/^üàƒÆÆÆöèÑćرª×>ÆbK—:mÇ’(,OŒñÍ7®ÚÑbñÄ?à3á¸sç΀€€×^{-88X< `úôéÁÁÁëׯ¯¨¯URR2bĈ¹sçæååuîܹQ£Fëׯ0`À®]»T/|†-Ŷ£V†Gºu gíh{í(—Ï„ă¡C‡"##^S½zơ¨¨¨'NTÔ×ú́³Ïö́Ùsß}÷}ươ×o¿ưvJJÊûï¿/„˜6mêe€Ï°ZËnÚQ_BˆÏ?÷Đöí¨Åÿư_5 đ!>!!!W®\qvo^^^5*êkíÙ³G1bĈÀÿ₫xïĐ¡CË–-?~ñâEƠ+Ÿá°í«qà@Ï¡oGC5₫ưïjW à|&[µjuö́Ùưû÷ÛßuèĐ¡Ó§O·lÙ²¢¾Vƒ „úF´Z­ùùù•*U ô¥ëĐ¡œ¡'M óp5Ú¡µ#Ơø|&~øa‹Å2a„ƒêöÓÓÓU/†¾ôÂësÏ=×®]»9sædff !NŸ>-„¨[·îøñăơ;;̃¼‚‚‚Ù³g_¹r¥uëÖmÚ´ÉÍÍƯ²eËêƠ«ï¹ç̃râ™ó“3‘‘‘7ÿI|ư~;wÖ=ZơXBlÛVçå—ë(€z¬† ¢Çjèy~5́¬;û́5k¢¢¢T/|‰ájÍ̉¥B±d‰G'±ßpG{¿ă×_+[€oñ™÷8fggŸö×P»̃߇|&£££…Gq÷jÚ´i@@@FF†á²!íư Í5S½đ .ökôp;:Ûy‡vü^>/¾øbPPĐ{ï½÷믿ºơ ué̉åĉo¿ưvii©v0###))©råÊƯ»wW½đ ®÷k4´£ûèÿ—ưÎ;ÎöèÀ!Ÿ¹8&<<|̃¼yÓ§Oïß¿ÿ₫ư7nl¿¥b·nƯ*äk%&&>ôĐCIIIëÖ­kƠªUnnî?₫XZZ:mÚ´?ÿùϪW¾Áj½~ªÏÙ~¶¸uG¬£GE³fâØ1§û5zf €đ™p´êËÉÉyçw>¦¢6Á [·nƯÂ… ·lỤ̀í·ß†††víÚơ©§jÓ¦êe€/±ZÅêƠ®vùöL«=*–-Ç+à|&û÷ïïÉ/<~üøñăÇ«₫¾áÛ<ù»a\pQÈó™p|ă7T`j>sq Ộ™3÷ÜsO¹Ù¾}»ê1ü–Ï„cAAáˆƠjµm—S¿~ư°°0Ơ3ø3Ÿ ÇŸ₫Ùp¤¤¤ä̀™3_ươ{ï½wơêƠ—^zIơŒ₫̀‡ßă1jÔ¨w̃yç̉¥KÏ>û¬•mEÜÆ‡ĂÑæ{îiÖ¬Ù©S§N:¥z¿åá(„BÔ©SGơ ~˱°°đçŸ «V­êYü–Ï\óĂ?8<———’’rñâÅ^½z©ÀŸùL89̉Ž5jÔ;v¬êü™Ï„£‹ßUƯ¸qăFDD¨ÀŸùL8̣»ªỘ™‹cbcc]´ă˜1cî½÷^Ơ3ø3Ÿ ÇÂÂÂß~ûÍÙ]'O<}ú´êü™W¿T½yóæ§zÊöá²eË>úè#û‡•––Z­ÖÆ«ÀŸyu8Ô¬YS»——W¹råàà`‡¬U«Ö”)STÏ àϼ:;uê´}ûvívLL̀!C¦Nªz(“̣êpÔ{́±ÇÚ·o¯z ọ́™‹c&MÔ£Gg÷N<ÙŽđ˜ÿ÷ÿ„Åâꋨ_ßíc¤¥•3FLŒ óđÚàó|挣"//ïßÿ₫÷‰' Ç‹¾₫ú뀀ƠƯÿûB»xÉbV«ƒh1w__üç?î#-M´iăjŒ˜qäˆB„…‰œƠ«€ïđ™pkÖ¬#F >|úôéªg4»ÂBTö¡¾ /;<XQÖ®}û:₫̉újt÷øŸ9ăøư÷ßW©R%))©fÍ=zôèÔ©Sddd\\œ"**êƠW_ưŸÿùŸèèhƠc]a¡EE×?´XDf¦G«Q³v­è×O|ñEÙV+ƠÀỊ́™3gÏmÚ´©¶­cƯºuCCCÓ̉̉´»ú₫ûï«BØwŒÔßë±\³?ïH5p“|&…•*•MÛ¸q㬬,ív@@@LL̀₫ưûUˆë íhăá\3´£ª1đ>ơë×?~üø•+W´#""vï̃m»×b±dgg«e G”äÚÚµ¢Z5ơcà|&{ơêUTTôÜsÏ;vLѾ}û“'OnÙ²E‘““óă?6jÔHơŒ(c¿¢ëƯ$&Fü÷k¨ÿà3Ç >|ưúơ7n´Z­ .́̉¥K``à3Ï|¸°°đ₫ûïW=#®sgÎ6VtĂƠ0ªÆÀoø̀ǰ°°?₫xüøñmÚ´B4jÔhÚ´iÅÅÅ[·nÍÍÍíÙ³ç¨Q£TÏ!́ª133ËÙ=ne µ³=z€$Ÿ9ă(„ =z´íĂ¡C‡öë×ïÀơêƠ‹R=„p´_cV–ƒ=zÜ}ÂÏáÎ;÷ẹ̀|)5ùùùiiigÏmذaÇ£££Ăø­ẴÁÅ~lGû5̉Ü Ÿy©Z‘›››˜˜Ø­[·Ç{lÚ´i›7oBÄÇÇ?ùä“yyyª§ƒØ»·́¶}é÷èIHpăé鮯ĐïÑ3r¤ç æ3áøÛo¿=ưôÓ)))5kÖŒ·ß´iÓ!Cl§³ Èí·_oGg§ñ´vLH))îDÀÙZ;)Ø3€ßÅgÂqÑ¢EûöíëÚµkjjếÙ³mÇW¬X1`À€ăÇ/[¶LơŒ·ß^΋¿……n¯Fë1Ö®¥øƯ|&wîÜđÚk¯ëLŸ>=88xưúơªgđg>‡ŒŒtxLơêƠ£¢¢Nœ8¡zFæ3árÅđ;@ṭ̣̣jÔ¨¡zFæ3áØªU«³gÏîß¿ß₫®C‡>}ºeË–ªgđg>?ü°Åb™0aÂÁƒơÇ<8nÜ8!ÄÀUÏàÏ|fđ;>₫øă‹/~đÁµßóÍ7ßlÛ¶íØ±c¥¥¥ñññ÷̃{¯êü™Ï„£â¹çk×®Ưœ9s233…§OŸBÔ­[wüøñúà¾BˆîƯ»wï̃=///33³¸¸8**ª^½zª‡0ï Çââb!DåÊ•íï m×®ềÅ{/iÓ¦Mï̃½UO€ë¼7¿ç{TO`F>—.]ÊËËS=€ùX8@ÂRGH! …p€ïƯ₫!èÛoÅ AbÀ€²C))â‡DƯºªG¿W‡ă¹sçbccơG„†ƒ6{÷îU=2Œê%„†¿̃½Å¾}ªG¿W¿TmµZ odµZ……N¨W±ăÇ]ƯûăăûïuX,ôÓO".έc,_î¡ïóđ̃3_|ñ…ê|‰VhYY¢iS÷₫ø£hß^!¬VOŒñƯw¢săG±ùáÑ®øúkQ»¶›ÆB êêî^ üŒ÷†ctt´Ú8°hÑ¢ƒ^¾|9&&f̀˜1wß}·êUq̀ÖI‘‘ÚÑVÚ#ƯWK¶1ºtVÑ´ü?°ghƠJüç?nă‘G„pÔ¶¸u5đ?^ưRµB7n:tèÆĂĂĂccc÷îƯ;|øđ7ªË±Ư»ËnGF̃đµ¾…YYnăܹßÿgâă+| } >̣ˆñ5kư‹çŸ|âÆƠÀÿ\ºtịäÉ)))Ÿ}öYrṛ̣åË+W®üâ‹/–––ªÎví·£}5º~ơø&…‡ÿ¡vtgíh¨Fg/d‡GV­ZUPPđä“O¶k×N;rÛm·Ưwß}999P=cöí¸v­G«QăÍíH5p“G¾ûî;‹Å2pà@ưÁ×_===½mÛ¶ª§sÊĐưû—ƯöL5j¼¶m¨F₫ï½8F¡´´´ĐĐĐúơëï̃½{ï̃½ùùù-Z´èƠ«WPPêÑÊ¡µ£₫D£đl5jÂĂ¥úí·nÄj5îD5đ‡FÅÅÅ¿ụ̈K³fÍ^zé¥åº +"""̃zë­[o½Uæ“ÄÄĤ¦¦zf₫3gªÑPäÔ©SVë5Ï|u›}‡}ñÏrváñÇ/»ơ‚!„ˆ¼á+^¸•uÙĂ«a“­êK{!VCƠ0`AôX =%«Ñ§OƠß·· ~ùå!ÄÑ£G/\¸0gΜnƯºưúë¯+W®\°`Áرc¿øâ ™óéééJ†ÿñÇ^¡Ötéáá“çÏ‹º_¬BX…ÅƠă¬ÖºB¸ơ7Úo@>vlƯºuë*<éyóŸÄo°z¬† ¢Çjèy~5́¬ÛŸ!2 ̃ăhTµjUíǼÙ³X«V­úơë?ó̀3ñññÙÙÙ_~ù¥ê2\C½fMÙmĂ=nu₫¼¨Wïúm‹p¾M¢ûwPt¶óư=@áhT­ZµªU«uï̃]¼W¯^BˆĂ‡«Đ1ûwúơsµ¿£›è«QñƯw¢`øpKKs÷$ö×P»̃ß”‹pt <<ü–[n±Üø2§ö ơµk~³  gû5:ÛßÑḾ«±sg‘û̉KÂj=Îjeÿ÷ưÅÖn]g;ïĐÜ ÂÑîƯ»9rDpÏ=Bˆ-Z¨Îû5Ú·£ûØW£a.]Ü8†ëưíÑÊE8:/„˜6mÚÅ‹µ#X²dIHHHï̃½UOç€-†^£oG·¾±ĐöÉ Ơ¨Ñ·£gÆp¶óíü¢j~®ªv eË–ăÇóÍ7ûôéÓ¾}ûÂÂÂ]»vY,–™3gÖ©SGơtY­âøq§—Nkíøß߃ẵ1¾ÿ̃A5j´vü»<̃ÄË—»Ú¯‘dà =ztXXزe˶mÛÚ³gÏ1cÆDGG«Ë×îx 5ΪQăjÔ°Ë7ptjĐ Aƒ R=€·à=B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áè'¦NUª¸z@@€ø̣KƠSzÅâễÄă«_¨zT€©SŬYBQ¥¸zƠÁDi©èÛW|ñ…xàƠăºŸV‹°ZÜ;`€X³æúíüCơ¬øÎ8ú­…ÅÅÎ;jƠ¨éÛWơ¬î]vÛ₫¼£¾—,Q=+>…pôúój†vÔW£á‘₫*#C4kVö¡¾ơƠh’Ơ ~Âa;°5Û‘jà&ñGÿaµ–]+.6¾Jk¶NÊÈÑÑâèÑë|5¨œqô+ÎzÈœd8ïhcÎƠàæ₫ƾ̀ÜI¢Zµ˜y5¸I„£¿ 0q½¿£0@\¹rĂ×û;G¿b¸Făp30\ cC;đÇ₫ĂÅ5Ô&lGûk¨íÑ$~Âa5¶î¼ăbG ƒpô.Î5°]́×H;p3GФIÙm×WUwî¬zV÷{åW«¡oÇZµTÏ €O!ưAf¦ˆŒ¢¼}{öß|£zV÷kÛV́Ûçj5´v¬UKä婟Âoñ™™å<ÀTû¶m[Î÷›‘¡zD|g …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p,ß™3gÚµk7qâDƠƒ¨D8–ĂjµN<ụ̀å˪PŒp,Ç|°sçNƠS¨G8º’‘‘1₫ü-Z¨@=ÂÑ©k×®M4)44tÊ”)ªgP/Pỡëw̃9tèĐ̉¥KkÖ¬©zơGÇöíÛ·xñâ„„„¸¸¸ƒ₫̃?c8’ªú{R#;;[ơ^„ƠĐc5ôX DƠĐS²}úôQư}{ ÂÑ¢¢¢I“&EDDL˜0á}†ôôtƠß„‰ŒŒT=‚a5ôX =VĂ€Ñc5ô<¿ö?ÖíÏ™áèÀœ9s²³³—/_¤zoÁÅ1F;wî\¾|ùèÑ£Û¶m«z/ÂG£ŒŒ !DRRRRR’₫ø5kÖ¬YưÅ_¨@ÂѨI“&<đ€₫È¥K—¶lÙ̉°aĂØØØúơë«@ ÂѨS§N:ủ9xđà–-[Ú·oÿÆo¨@̃ă)„#¤đRuùZ·n;Œœq€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH T=€—***ú́³ÏV®\™]£FæÍ›5ªcǪçP†ptàÚµk#GÜ·o_HHH‡~ươ×;vlÙ²åïÿûß₫ö7ƠÓ¨A8:°bÅ}ûöµk×nÉ’%AAABˆŒŒŒ„„„ ôèÑ£eË–ªP€÷8:*„xá…´jBDGG?ùä“%%%[·nU=€„£YYYƠªUkƯºµ₫`tt´âÔ©Sª§Pƒ—ªX´hQ` qe<(„ˆˆˆP=€„£­Zµ2Ù¾}{rrr•*U(óbbb G´—¿M(;;[ơ^„ƠĐc5ôX DƠĐS²}úôQư}{ ±%%%üñ믿^RR2õ¼°°0™?•®zp/©z/Âjè±z¬† ¢Çjèy~5́¬ÛŸ!2 ÂÑ•;v¼ụ̈ËÇkĐ Ák¯½§z"eGÇ‹‹ßxă”””ªU«3æ±Ç³]a `N„£¥¥¥&LذaC¯^½f̀˜®z"ơGRRR6lØđÈ#̀˜1Cơ,̃‚}¬VëG}T£FÉ“'«À‹pÆÑèÂ… 'O 6l˜ư½ñññ ªgP€p4̉6ˆ***JKK³¿— «€iFwÜq»0Øă=B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„£Sÿüç?Û±cÇ©S§æåå©È'ơéÓGơ^„ƠĐc5ôX DƠĐc5Ô"›?₫´iÓ;vçwV¯^}ƠªUO<ñDQQ‘ê¹”!HOOONN®W¯^jjjrṛúơ뇾ÿ₫¹sçª @ÂÑ+V”––7.<<\;2eÊ”¯¾úª´´Tơtj́Úµ«R¥JƯºu³ è̉¥Knnî={TO áhdµZ=Z»víÚµkë7õ\qêÔ)Ơ¨¨z¯SXXXRRR«V-Ăñ!ÄÅ‹e>ILLŒêïĂ‹°z¬†«¡Çj° z¬†«¡áh¤]:]­Z5ĂñêƠ« !.]ºTîgHOOWưMT<^ª6ªU«–Åb),,4¿|ù²øïyG"CBB́Ï,!l×Y˜ áè@½zơrssµR´ÉÊỂîR=€„£={ö,))ù₫ûïmG¬VëæÍ›CCCcccUO áèÀàÁƒ+Uªôî»ïjïkB$''çää 4è–[nQ=€«Ơªzo´té̉9sæ4jÔ¨sçÎ'NœØ¾}{«V­–.]j¿M€IN­]»vơêƠû÷ïoĐ Á]wƯ5nÜ8mGs" …÷8@ á)„#¤B8@ á)„#¤æŸÿüçàÁƒccc;v́8uêÔ¼¼<Ơ)STTôÁôíÛ÷öÛoïܹóc=¶uëVƠCy…3gδk×nâĉªQéÀÏ<óL÷îƯï¼ó΄„„;v¨H™âââÅ‹?øàƒ±±±=zô;vlFF†ê¡È̀̀Œ‰‰ùé§Ÿ̃k¶§V«a§V×ÿ6lxjơ$±b̀Ÿ?Ú´iÇ»óÎ;«W¯¾jƠª'x¢¨¨Hơ\ \»vmäÈ‘³fÍ:₫|‡5k¶cÇQ£F-X°@ơhY­ÖÉ“'Û~º9mܸqèĐ¡7n Ư»wïđáĂ7nܨz.JJJFŒ1wîܼ¼¼Î;7jÔhưúơ صk—êÑ<-%%ÅÙ]&|ju¶æ|juñoƧVO³â¦>|¸E‹;w>wîœv$11±y󿝼̣êÑøøă›7o>tèĐÂÂBíÈ‘#Gîºë®–-[₫üóϪ§Sié̉¥Í›7õ¼ùsÏ=§z5̣óóÛ·oß¶mÛƯ»wkG~úé§[o½5..®¤¤Dơt¦ư—2v́Øß~ûM;²mÛ¶–-[₫å/Q=‡\ºti×®]Ó§O×₫»Ø·oŸá¦zj-w5LơÔZîjèñÔêaœq¬+V¬(--7n\xx¸vdÊ”)!!!_}ơUii©êé<-55Uñ /iG¢££Ÿ|̣É’’¿UÅ…ŒŒŒùóç·hÑBơ *­Zµª  àÉ'Ÿl×®vä¶Ûn»ï¾ûrrr8 z:OÛ³gbĈÚ‘:´lỤ̀øñă/^T='ôë×oذaŸ~ú©³˜ê©µÜƠ0ƠSk¹«aĂS«ç`×®]•*UêÖ­›íH@@@—.]rssµŸ ¦’••U­ZµÖ­[ëFGG !N:¥z:5®]»6ỉ¤ĐĐĐ)S¦¨E¥ï¾ûÎb± 8Pđơ×_OOOoÛ¶­êé<­AƒB}#Z­ÖüüüJ•*ÙR̉¿Íœ93))))))..ÎáLơÔZîj˜ê©µÜƠĐđÔª„)ÜÊjµ=z´víÚµk×Öõ¼¹âÔ©SíÛ·W=£G-Z´È₫Ç̃Áƒ…ª§Săw̃9tèĐ̉¥KkÖ¬©z•̉̉̉BCCëׯ¿{÷î½{÷æçç·hÑ¢W¯^¶3(¦̉·oßeË–Íœ9388øöÛoÏËËKJJÊÎÎ~øá‡Ṃï¤S§NÚM›6Ùßk¶§V׫!LöÔZîjhxjU‚p¼Y………%%%µjƠ2 7N0‰V­Zlß¾=99¹J•*†SM&±o߾ŋ'$$ÄÅÅiỊ̈æT\\üË/¿4kÖ́¥—^Z¾|¹íxDDÄ[o½uë­·ªĐÓbbbRRRF9räHÛÁ„„„©S§ªÍ+đÔjÀS«O­ªđRơÍ̉®ï«V­áxơêƠ…—.]R= J%%%Ë–-{üñÇ gϦz"O+**4iRDDÄ„ TÏ¢Ø/¿ü"„8zôèºuëæ̀™³cÇÍ›73æôéÓcÇơïëd*((˜={ö•+WZ·n=dÈ̃½{­^½Úœ×˜Ûă©ƠZyjUˆ37«V­Z‹¥°°Đp\Û@ûÇæ´cÇ—_~ùرc 4xíµ×\¿UÅ_Í™3';;{ụ̀åæ|5V¯jƠªÚÙ³g÷èÑC»ừ3Ïœ9sfƠªU_~ùåC=¤zF4ỉ?₫8eÊ”G}T;ræ̀™!C†<û́³kÖ¬‰R= b<µ:ĂS«à©U)Î8̃¬ÀÀÀûÿù[PP „°] h*ÅÅÅ3gÎ1bÄ™3gÆŒóƠW_™ó©mçÎË—/=z´ ¯ü°W­ZµªU«uï̃]¼W¯^BˆĂ‡«Đ£ÎŸ?¿iÓ¦fÍÙªQѰaçŸ~ú·ß~ûüóÏU¨O­öxjƠđÔªg+@½zơ=ZPP nVV–v—êé<­´´t„ 6lèƠ«×Œ3̀ùü®Ñ~ ˆvm ₫ø5kÖ¬YưÅ_¨Ñ£ÂĂĂóóó-‹₫ vÂàÚµkª§ó¨ÜÜ\!DÓ¦M ǵ.\P= Wà©U§VZƠ"+@Ï=ÓÓÓ¿ÿ₫ûx@;bµZ7õ«z:OKIIÙ°aĂ#<2cÆ Ơ³(Ö¤IÛ? Í¥K—¶lÙ̉°aĂØØØúơë«ĐÓºwï₫á‡9rD»0V£í«b¶mØ6m‘‘aµZơ%.„hÖ¬™ê½O­z<µÚđÔªáX¼páÂwß}·k×®Ú·“““srrüñ[n¹EơteµZ?úè£5jLû́矾téRË–-ïºë®Ñ£GßrË-¶äää,[¶́›o¾ùÏ₫#„hĐ AçÎ}ôQí=”¯¿₫ú’%K´GÆÄÄïƯ»wâĉkÖ¬ùàƒ:tè ÿZ­ZµªY³æöíÛ…Úc6mÚt₫üùW_}5##cƯºuúÓŸ$§²7pàÀÛo¿]QTTôöÛo«^WæB8đsçÎưÇ?₫aµZ4h¾{÷î;v|ÿư÷IIIuêÔBäää 6́øñăAAAM›6---=~üøûï¿¿aÆU«V…††¶oß₫ÚµkŸ~úiqqñđáĂ]·½C‡M˜0¡¨¨HQZZ*9•C=zôĐnäçç<ŒpàĂl!¥̣ùçŸk·7mÚ´xñâÆÏ›7ï¶ÛnBäääL:uóæÍï½÷̃´iÓ„«V­:~üx=æÎ[­Z5!DAAÁÓO?½k×®ÿûß=ôP=zôè±fÍk×®M:ơ÷Î9}úô6mÚ<ơÔSÍ›7 “œ ¼ €đaV«ơ´#gϵ=fΜ9Bˆ·̃zKë3!DXXØ[o½U¯^½•+Wæçç !®]»Ö½{÷ç{N«F!DÍ5ûơë'„8qâÄÍÏY­ZµÅ‹ÇÅÅiƠ(9xÎ8đaÚ{ ]< ///+++**ªuëÖ†?÷ù矧¥¥uêÔéoû›á^¸páË/¿¬¨9û÷ï_µjƠß;•Â…‡G₫,33Sûÿ111`;7yúôéï¾ûn÷îƯ§N:ỵd^^^Ѹqă?6x€?+..B4jÔ¨W¯^аaC!Ạ̈å˯]»Ö¸qăöíÛ÷êƠëÖ[oÍÊÊzå•W~ïW,))±Z­†ƒ†Ư%§oC8đgQQQBˆàà`W´\¾|ùƠW_­\¹̣¢E‹ô/kụ̂ü^gΜ±]7}3S€ââ₫¬^½zuëÖ=v́ØÁƒơÇKJJ Ô¹s眜œ”””Üqdž·>|XæK^Ô₫úë¯+d*Ơ+üÜøñăKKKÇèĐ!íÈåË—Ÿ₫ù´´´Ö­[‡……i[|>|Ø–k%%%Ÿ~úéG}$„Đ6_´)---,,Ônkï\LII±Ù¾}û{ï½W!S©^6p€—ªø¹øøø;w~₫ùçlÔ¨QhhhfffaaaÓ¦MgÍ%„ˆêÙ³ç¿ÿưï̃½{·k×Îjµ¦§§çåå 6lÙ²eÿú׿~ùåm÷œZµjååå :´qăÆï¼óÎÀ?üđĂ={öốÙ³U«VçÏŸ?zôhHHHưúơ¯^½z“S€âŒ#?g±XfÏưöÛo÷èÑCû•0‘‘‘ăÇ_½zuhh¨ö˜yóæưưïoذáîƯ»Ï;×¥K—Ơ«W¿đ Æ صk—ö°)S¦4nÜøØ±cGBDDD|̣É'½zơªT©̉–-[9̉¨Q£Å‹Ëœ/”™ ¼Å₫ê?ÀïuåÊ•ÜÜ܈ˆ‹Å¢zpÂRx©RGH! …p€ÂRGH! …p€ÂR₫?ÏùÅDœ‘/çIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/gustafson_kessel_202.png000066400000000000000000000452641466512601400244050ustar00rootroot00000000000000‰PNG  IHDRh\­AJ{IDATxÚíƯytŨđñÛ$ a ѶI†ÖÑtdß•QY"̣†ʈ¬dq”Œ€ Ñ ˆ&*›# #2́ !–€‚ ˆÉ°$ư₫Q¼MQƯ]¹J̉·»êû9ϙө.È/÷!Í×êÔÅát:P’rª@`  …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂR‚U`A111ªGe(==]ơje¶ÜÅÄİ.¬†«¡Çj° z¬†Ÿ¬†ŸŒá{¼U )„#¤B8@ á)„#ÊÖúơëUàGX =VCƠ0`AôX =VC-ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRl™™™111ß}÷ùigÏ‹‹7nœêyT²u8¦¤¤”xÓéœ0aÂåË—U  X°êÈÏÏ?zôè矾råÊO^²dÉÎ;U  ñG?₫ø£̀™sæ̀iܸñ‘#GTO  ˜Ă1))éÊ•+BˆeË–mÛ¶ÍÛiׯ_?~|XXXbbâàÁƒUO  ˜ñm۶ڃ͛7›œ6wîÜÇ/^¼¸ZµjªGPÏá(cÿ₫ư .0`@ëÖ­Ó̉̉~í/‰‰1Y¿~½ê¯Í́lƠ#øVCƠĐc5 X=VCOÉjtï̃]ơ×í/G Ç_¯^½1cÆü¶ß!==]ơáG"##UàGX =VCƠ0`AôX =߯†û_ëîWˆl‚pô`ÆŒÙÙÙ+V¬ Q= €¿°ơ>íܹsÅÆ »ç{TÏàG¸âh”‘‘!„HNNNNNÖOMMMMM₫â‹/TÏ áht÷Ưw?úè£ú#—.]Úºuk:ubcckƠª¥z@5G£¶mÛºöëѤ¥¥mƯºµeË–o¼ñ†êé”ág …p€[¿U=mÚ´iÓ¦•xZ³fÍØ—€+B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ ák:^ơ€%8ª'Bqâ„ê !GËp8„Ăq['XlŒ5ÍÚÑ7c₫ÏámÚx}vĐ Q®œ(*̣Åơêy}ṿd)¶lQ²BnA8Z«¼ÅP‰'Xr oíè›1ÿ§} lÛæ¹ K— !DppÙ¶£6Fv¶çvœzó1íè¹W£ÆÇíè^Úđ+„£uî†ùôÓöwôÁS§ääsæû;ú`Œ!CÄ_”°¿#`Oî÷P{Û£§L¹ï¼“™™åúvüáhï¡6¹ÏÚc¸î†1ÙßÑc¸î†1Ùß°'o;ïø¸½í×èmG V`²ó/ÛÑd¿F_¶£É~&{ôvóê«f;ïø¬7l0Ûå›vü áh®×V;ïèÛ±L7¶pưæw̃Ñ·£oÆđ¸ó¾Ùæv6exàKÜçÛoËjŒ‡cÆÈqú´¯W €áhN§Ù~Z;ú “œN³ưµvôÍ&û5jíH5;vˆ0û^Đ*ëo–Y³Ä˜1êÇ ƒp´óưƯ÷w,#æû5ºïïXF̀wùvßß°§;J8Á7¹6k–_Œ D„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áhÏ?oöl¿~>£W/³gÇóÑ÷Ưgö́Ûo‹óç}4 àÏÛ=ÁJyDœ:ev‚­VđÈÖᘙ™óƯwß¹?UXX¸dÉ’Ç{́̃{ïm×®ƯĐ¡C¿ưö[Ơóq8Dr²×v́×O|ü±/^̣‘êµÇ³fùhŒ}û¼¶ăÛo‹_5k̉°;í›Ñä[²Ä¬ä‘Gĺuâ¶£­VđÆÖᘒ’âñøơë×üú믟?¾U«V 6ܱcÇ!C̃}÷]Ơ#{æz!óØZ5Î,Ó1<¶£V¾Ăc;jƠ¨©Y³ ÇüÜ[oƯ|́ñ[RpäHƠă–±Œ ±nƯÇÛQ¿æohÖfÇp̀ÏÏß½{÷Ô©S?úè#'|̣É'û÷ï‹‹Û²e˼yó>øàƒƠ«WW¯^ưƯwß=|ø°êñ=p:o>6´£¾ g–é†vÔW£/Ç0´£¾Ëz ÀÏ%æ̀¹ù¡¡ơ¾đ‚˜;Wơ¸e,:ŹÜyóCC;êW#6V́Ư«z\@;†c=V®\éí„ơë× !^~ùåíHttôsÏ=WTTä·oX{lG_V£û§Đ򱮯±Âáxc–Ă)n₫ŸHKóÙ®v¤oíh·jÔÜ¿çv¤½`Ơ(””tåÊ!IJe˶mÛæ~BVVVåÊ•›5k¦?-„8}ú´êñ½r:oyÏzăFq́Ø-Ïú~Œ©'ªˆx8©yó²H?ƾ}¢^=‘­`5?7j”B¼ổ ×íS­xàÆ‡wß}˳T# ́mÛ¶Ơl̃¼Ùă óçÏ6®LZZ¢^½zªÇ7£¯%%Ơ¨ănq2KDz=Éáđe;R€7†vt±[5j íèB5;†c‰6mj8²}ûö Üqǽ{÷–ùbbb G´·¿} 3SDEẼz$++Ë7Ÿü&§ˆ*ù$‡ăç„„œ×^³üj¸dëÖöX =µ«Ñ«—ÈÍ­6mÚ]®#ækÏo–đp±fͽ{×qiÔèêªUǵ¹~HÉjtï̃]ơ×í/Ç-_¾|æ̀™EEE³gÏ—ùUéééªv߯qÖ¬H½\T½ăª‘‘·ÿûxóöÛÆ#}úDª½lY–_oÀa5ôԮƴi·|¸tiµ?¬fÛ‰ºơ¿|­Y¿¾MWĂù~5ÜÿZw¿Bdv¼9F̃;zôè‘””¾hÑ¢GyDơD%0Ü £1Ùß±Œü]¾+T(»1 wĂhLöwl«ÄíxlÅăn²¿#`+„£gW¯^MJJ4hĐÙ³gG¹nƯºÖ­[«ª&÷Pû² ;ï¨br5íèî¡6Ù£Ç ÷P›́ÑØoU{P\\ë“'…Ú÷¬µ¸âèAJJÊÆŸzê©wß}7p«ÑưqY_wôçjt̀uGÀ[5ï nŨökô¶¿#`O„£‘Óé\¶lYƠªU'L˜ zYæ»|Ú±́¼ÿ¾ê…B¡¿Ư|5öíS=+àÜw̃1´£­¸ï¼chÇU¨Ă[ƠF?ưôÓ©S§BBBÜŸ0`€ê\oÂz{G©ÄJE^ /jŸÅ)6n?\ÂÜe`íZñÈ#bƯ:Å«ø?í{ÁÛ~®ưṃ¢­†·ư]û;;'á( ¬FÚQ………‡rÖoo‘)ñ•Ư7/ưyyºzHlØàµËr µkưb5ÿg₫½0jÔ|´ óƠ¸ÿ~qíæ¯MØ›­¿¦M›6Ͱw™÷ƯwŸÂ]­æ¡‡ ºv­ô¯{rđsT#À7ÊÖ¹ "ë×AAª·‹›cPö¨F,p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂÑ"ápÜÖ Văô‹1°ÂÑ \ ä-†J<ÁJcüñbçNơc`=„£<ưôÍÇî1¤?2vl1éO>Y†c<óŒ́­[—áXáh‹{mGC5¾ñFñ·¿ymGC5®\Y†cüùÏbÁ‚’ÇhƯZ|ûm€ơá±}YíèËjÔxlGª€ÛD8Z‡ÉuGßT£ÆĐQQ‘®Ç¾©FÉuGª€ß†p´C;j|YC;j|YC;j¨F~3ÂÑj/6ñq5j₫ö7ăW£æÏ6¡øÍG«1¿˜1Ø‚€ßŒp´}5oîù¸ÇhÔè?Œñûß+[ ,ƒp´ĂƯ0–°¿£Æx̣I±~}¶ù₫>£ukq́˜×{e€$ÂÑ"<̃CmrŸµÆpƯ c²¿£ÆpƯ crŸ5A8ZÉÎ;¾lG“ư}Ù&;ïĐÜÂÑ œÎ<î¼£oG×™e:†Çwôíè›1<î¼£oÇë×Ëp ¬'Xơ(N§7ÎëÎ;Ú=î;ơ”ÅưúyƯyGÛ£Ç}§²£M¯;ïh{ô "‚‚Ê|¬„p´óư}Póư}PóưƯ÷w%â­jH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€Ấ+2²„Ơ#úĐ¼y%œP±¢êƠl™™™111ß}÷Çg?ưôÓ¾}ûÆÆÆ¶iÓfâĉyyyªç€̉)Nœ0KCí)›´ă¼ybij/¶bEqå]VđÆÖᘒ’âí©9sæL4éøñă÷ß•*UV­Zớ³ÏªJÇäÉâĉ=Æ₫àĂ«·Œedˆ#̀VC«FMåʪÇÔ±c8æççï̃½{êÔ©}ô‘Ç̉ÓÓ,XP³fÍơë×/X°`Æ ù¤¸¸xÔ¨QÚ‘ÄÄÄĐĐĐuëÖ«JGr²çv´[5j<·#Ơè«@¤¤¤+W®!–-[¶mÛ6÷víÚU®\¹;ºµoß₫óÏ?ß»woË–-UP:’“…ĐƯb¸̉fŸjÔ$$!Ä€7Wă;¨Fàv ǶmÛj6ṍ₫¬ÓéåË—W=”2÷w íh&;ïÚqÑ"Ơ³êđVµuêÔ7nÜŒ3zö́Ù®]»“'Onß¾½Y³f₫óŸU¥Æé‡×ư]û;ÚäÍYm5¼í×èÚßñư÷ÅĐ¡ªgÔ!=2dH5Ö¬Y³víÚÚµk0`Ô¨QÚ<`æQ˜œ|#mÂ|5ăßÿ^ơ”€R¶ÇiÓ¦M›6ÍÛ³=zôèÑ£‡ê₫‚jøGH±ơGd-Y"¶m÷ÜsóÈÙ³")IơX€OHxúiû÷Í›« đ̃ª $̃öolÑB:¤z8ÀwG¼ûé§vưnÑBè₫ÁÀÚG¼‹ˆ(ùœöíEf¦êA_ ¸mQQª'|p€ÂRGH!¸m«W«đÂï₫ïÿ¤N‹W=(à „#̃}ü±p:K8§Ä« (‰IR°Â µjy8H5Âf‚U@ øáƠêqÅRGH! …p(æpˆ‘#½>»gp8TèÛƠˆ‹+á„Ü\ƠS®G€JZ¾óçvܳG´lyó4ËÓ¾̀½{½¶£vBx8í5G€_poGW5jNœP=¢ylG}=oܨzDØáPI¿¢¾ Ơ˜•%4P=«oWĂĐújüè#Ñ¿¿êYaK„#@1÷vÚ¡C‡öíÛ»Ÿ“””T\\ÿüó=z¨ÀFüúcZZZHHÈóÏ?ï:öæ›oÏ5ëÊ•+ª°¿ÇÓ§Oׯ_¿|ụ̀úƒÑÑÑO=ơÔ?₫¸|ùrƠ؈_‡cơêƠO:uưúuĂñ#FT«Vm̃¼y¹¹¹ªg° ¿ÇæÍ›®\¹̉p<,,,111??̣äÉÅÅŪǰ¿Ç!C†!¦M›6nܸM›6;wÎơTŸ>}Ú¶mûơ×_?ÿüóGQ=)€ơùu8ÆÅÅ5Êáp¤¦¦>|Ñ¢EúgçÎÛªU«M›6ơêƠ«¨¨Hơ°ç×á(„>|ø?ÿùÏ¡C‡₫ñ¬Q£†₫©J•*-\¸đ•W^‰vèÿYx”¿̃ÇQÓ¨Q£ñăÇ{|ª|ụ̀ưû÷ïß¿ÿÿ₫÷¿́́lƠ“X™¿_q”T±bņ ªÀÊ,(k„#¤B8@ á)°ÁÅ‹:ôĂ?Ô©S§M›6999áá᪇°¾@ ÇÜÜÜyóæ}öÙg………BˆAƒµiÓ&>>¾Y³f¯¿₫zXX˜ê¬,`̃ª¾víÚˆ#RRRªU«ï:±yóæ~ưúi5 ¬äȳg§OW=ŸÍL8Ο?ÿ₫ư:tX¿~ưtƯ“O>ù¤W¯^'NœXºti)~º«W¯.\¸đñÇíܹó‹/¾˜‘‘¡z °‡C4iâµ§Oư«à_ö¥€ Ç;wưưï¯T©’₫xPPĐ”)S*Uª´aÆ̉ú\EEEƒ 5kV^^^»víêÖ­»aÆ^½zíÚµKơ2`®"ôØZ5ÎDY ˜p<|øpdd¤Çû`ªT©ụäÉ̉ú\üñ̃½{ÿô§?}ơƠWo¿ưvJJÊ| „˜4i’êeÀ.ºùØĐújB8ªgµ€ ÇĐĐĐ_~ùÅÛ³yyyU«V-­Ïµwï^!Ä Aƒ‚ƒoÜ<ÔªU«&Mœ8qâÂ… ªW[hÖ̀s;R L86mÚô‡~8pà€ûS‡>sæL“&MJësƠ®][¡oD§ÓyñâÅråʹR”5÷vLJº“jT(`ÂñÉ'Ÿt8cÆŒIKKÓOKK5j”¢wï̃¥ơ¹{́±+&%%ư÷¿ÿ-,,<{ö́äÉ“³³³ûöí[­Z5Ơ+€ÚqÑ¢P×cªÑ÷ÎÀYơY³f-\¸P•™™Y·nƯJ•*?~¼¸¸8>>~z©̃‘àÀÁƒëß0`Àĉƒ‚‚Jüµ111îׯ_¯zưÔÈÎÎ₫Ưï~§z Ájè±z¬† ¢Çj!22*<üp]ư‘̀̀,Ÿ}öîƯ»»LOOW½* ̉¯cÇ‹‹›1cFff¦ầ™3Bˆ5jŒ=Z¿³ăíËÏÏŸ>}ú/¿ü̉¬Y³-ZäæænƯºuÍ5>ø`·nƯd~{₫ạ&22Rơ~„ƠĐc5ôX DƠøøcă‘+W"7öÑgwÿkƯăE";¤pBtêÔ©S§Nyyy™™™W¯^ªY³f©–ñăÇïÙ³'11ñé§ŸÖœ={¶_¿~/½ôRjjjTT”êeÀF wĂh4‡ Ÿµ#4ó3ÙÙÙ§N̉‡……ÅÅŵjƠª,ªñüùó›7onذ¡«…uêÔ1bĵk×V¯^­z%°C5nØpÆơØdop”‘€ ÇGy¤[·n999eư‰rss… 40×.4₫ôÓOªW»pßy':úªÉ₫(kÑÑÑBˆ£G–ơ'jĐ APPPFF†á¶!íç6l¨z%°oû5zÛß>0á8ỵäyóæưïÿ+ÓỎ¾}û“'O¾ưöÛÅÅÅÚÁŒŒŒäää *têÔIơJ` &û5º·#|#`n‰ˆˆ˜={ö”)Szö́Ù³gÏúơë»o©Ø±cÇRù\Ó¦M{â‰'’““×®]Û´iÓÜÜÜ={öO4é÷¿ÿ½ê•ÀœÎÿµÇµvl̃Üë ( ®K}999sçÎơxNim‚¾víÚ÷̃{oëÖ­ÿ₫÷¿ĂÂÂ:tè0|øđ-Z¨^lļµvlÖLơ”v0áØ³gO_~ºJ•*=zôèѪ¿nàƠèco¼ñ†êl-`n€ZsÅñÁ,ñœíÛ·«À²&óóó GœN§k»œZµj…‡‡«ÀÊ&¿ÿ₫{Ă‘¢¢¢³gÏ~ơƠWóæÍ»råÊ+¯¼¢zF+ àŸq ªW¯̃!CæÎ{é̉¥—^zÉÉ>Ne&€ĂÑåÁlذáéÓ§OŸ>­z˲B8 !"""„wƯu—êA,Ë áXPPđư÷߇‡‡W®\Yơ,–07Çü÷¿ÿơxvÿ›ÆUüÇvÔ_k|åñÊ+ª§„ưL8~đÁgΜ¹ÿ₫û{ôèñå—_îØ±cÊ”)!!!GY¶lYBBÂË/¿¬zFÀïh› üơ¯7>Ô·£¡¹zø§ófÚQ_S§RP#`Âñ›o¾¹ă;’““«U«Ö¹sç¶mÛFFF¶nƯZơÚk¯ưßÿư_tt´ê1¿ă±©FÀo¹·cRƠ07ÇüđĂ 4жu¬Q£FXXØ¡C‡´§úöíöo¹^$&×_¿ù¡ĂA5~Mÿ]¹b…ˆt}H5B­€ G!D¹r7§­_¿~VV–ö8(((&&æÀªü—¡]¨FÀ?yü̃¤¡\À„c­ZµNœ8ñË/¿hÖ«Wo÷îƯ®gGvv¶ê¿–˜(âân9B5₫̀đÚ¼9Ơơ&»víZXX8v́ØăÇ !Z¶lyêÔ©­[· !rrrö́ÙS·n]Ơ3~mȱgÏ-GØ đg†ïĐC‡JØßđ€¹9fàÀ6lØ´i“Óé|ï½÷Ú·oü /Üwß}G)((xä‘GTÏø/o;ï°àŸ<₫wÉ₫€òÇđđđåË—=ºE‹BˆºuëN4éêƠ«ß~ûmnnn—.]† ¢zFÀO¹ßCm¸W€_1ÜC™™åúpÅ ®;B¥€¹â(„6l˜ëĂ₫ưû÷èÑăàÁƒ5kÖŒR=à§<î¼c²¿#µÜw̃ÉÊ2Ûßđ¥@ GÍÅ‹:ôĂ?Ô©S§M›6ÑÑÑáá᪇ü”É~´#à‡Lök¤áæ­j!Dnnî´iÓ:v́8tèĐI“&mÙ²EÿÜsÏååå©đG‹ß|́̃…̃öè œÇwôßÅT#”˜p¼víÚˆ#RRRªU«ï:±yóæ~ưúªđGÚß4̃®&ºÚ‘Ë€?Đ¾Mök4ÿÊZÀ„ăüùó÷ïßß¡C‡ơë×OŸ>Ưuü“O>éƠ«×‰'–.]ªzFÀO™ÿ“˜È_B€q:Kد‘oX(0á¸sçΠ  ¿ÿưï•*Ủ 2eJ¥J•6lØ zF+ ˜p<|øpdd¤Çû`ªT©ụäIƠ3XYÀ„chh¨ëßt———WµjUƠ3XYÀ„cÓ¦Møá‡¸?uøđá3gÎ4ỉDơŒV0áøä“O:1cƤ¥¥é§¥¥5JÑ»woƠ3XYÀl̃¦M›gyfáÂ…?₫¸öïÄüë_ÿÚ¶mÛñăÇ‹‹‹ăăă~øaƠ3XYÀ„£b́رqqq3f̀È̀̀Bœ9sFQ£FÑ£Gëwv@Y¤pBtêÔ©S§Nyyy™™™W¯^ªY³¦ê¡lÁĂñêƠ«Bˆ *¸?§z@{ñß›cZ´hÑ­[7ƠSàÿ Gâăă|đAƠSØQ€…ă¥K—̣̣̣TO`GP…p€ÂRGH! …p€ÿư—c„ç΋Ơ),,Bº́Û·OơÈ–å×WNgÁ­œN§¢À ƠóF3gªÀŸ$$¨°„1cTOà[N§Ù³«W«Ïfü÷ă_|¡zà¶87Œov‚ùk¢e„…‰‹ÅåËâŸÿd53æß cƈ7ßo¾i—om5‹o¾¢ê­^-\^:|ÈĂ1::Zíœ?~ZZÚåË—cbbFùÇ?₫Qơª `¸^ă&LÂS;ºNp8¬ÿ’§U£"5Uôêå¡mµ€ óï­MN°×j”+ç¡]Ơh“Ơđ~ưVµB›6mêß¿ÿ¦M›"""bcc÷íÛ7pàÀM›6© Cÿ6a‚ñ=kưËߌªg-{ú(TkGo«Ñ³§êY¥F¾ùØĐIújö¸ÆöÜ|\®Ü-_²¾…ÅŪgµ ÂуK—.M˜0!888%%åă?^°`Á+*T¨0ỵäb₫lB·v4T£·7²-F¿úv4T£·7²›˜=Ûs;Ú°…ññÛѽ=¾‘²@8z°jƠªüüüç{...N;̣‡?üáOúSNNÎÁƒUO‡@bhÇùóCíYî«‘*}¶&Ơ¸soǤ¤;mX÷vܰ¡Ơ¨Ăi«?€r¼}ûöÿûßµjƠú ¿<&&&==]ơá/²²²"##UO¡˜Ç5»U£‹ÇƠ ùN1`A —]́ù—¶á£‹Âj´íßơ₫{sŒB‡ «U«ÖîƯ»÷íÛwñâÅÆwíÚ5$$DơhHN§ñ¥Í¶Ơèq5¨FÀỨÙBc;Ú³Åÿ¿îhhG®5*A8]½zơçŸnذá+¯¼²bÅ ×ñzơê½ơÖ[Í›7—ùMbbb GÖ¯_¯ú+S#;;[ơ~â–k'.\Èʺ¤z$…nY‚‚‚¬¬sªGRŒïDqé̉B„êdee©J™sç* QS$++ËgáØ½{wƠ à/x«Ú(77·uëÖBˆĐĐЉ'v́ØñÿûßgŸ}öî»ïÖ©Sç‹/¾(ñº£m/_{ÄûM‚·ªoÅ[ƠñbÀ‚đVµoUûn1ªX±¢ö`úôé½{÷®^½z­Zµ^xá…øøǿ́́/¿üRơ€0úµ .èÛñߕѯF×®7ÿµ'÷=z;3TăĐ¡7ß °á›³†jLN¾ù…aøáhT¹rå+†„„têÔI¼k×®Bˆ#G¨Äpơ°a—̀÷w´6Ă=Ô œó¶G`gî;ï¼ụ̈“ư­Í}çîƯ LöwDY#=ˆˆˆ(_¾¼ăÖoMíêëׯ«ĂÛÎ;ölGo;ïĐ€·ư½íïhm̃ökô¶¿#|€pô S§NùùùGƠÜ»w¯¢qăÆª§C`0߯ÑĐ–vó±û3Ú°3“ưmØ&û5º·#|ƒ•ö >>^1ỉ¤ nüDÚÁƒ-ZÚ­[7ƠÓ!0¸^ñ½Ưă:Áÿ¡œ—'ªWÂûM0¶Z À„ù÷‚¾íđÍâú=̃£oG;¬†Ÿ`;4i2zôè7ß|³{÷î-[¶,((صk—ĂáHJJºë®»TO‡€át™3Ín¶Ơ+]^HHË—³@ ̀¿´ưµÿµ§ÓĂæ¯.Z;ÆÇ«̉NGφ ¾té̉mÛ¶………ué̉eäÈ‘ÑÑѪçB€±ç†;̃˜T#yö©Fù›̣T£^ơéÓ§OŸ>ª§đüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8³g{ơÏ<£zD2_™3K8M°ê€̉§eĂ!œNÏöê%RSo<~ÿ}Ơ³ª^™3Å„ f'àÂGXMtôÍÇî̉ôƠ¸h‘êYË̃àÁf«áªFd°Œ ѰáÍơµ¤¯F!lqmÉ1hçƠ0T£Vp›GXÇv´a5j<¶#Ơø øGXSF†ˆÇƯøĐđ.­Ư:iÉ!„øđCVp[¸âË2\wt±g'®;ºØs5¿ á+ËÈ•+ßrÄδd‰ˆ‹»åˆWđ°²^½Ä/¿ÜrÄÎΜ)ö́¹åˆWđ°,ĂƯ0.ö¬%o;ïØs5¿ ákr¿‡ÚÛ=và~µ·=z0A8‚<î¼c²¿£µyÜyÇdG¼!a5&û5Ú°Mök¤¿á«yơƠ›ƯïÖ·cơêªg-{ăÇ›­†·=zđˆp„ƠÜsØ¿_ï{ÍhíX½ºÈËS=«Ohëàm5\íÈÖ<€° {î)!ƒ22́RóƠX²„jH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG  ¥¦ª€̉C8eÅá½z™µ£Ă!ƠS p,ÙÙ³găââÆ§zWzkG× ´# P%p:&L¸|ù²êA`®^½ùؽơ±øôÓªg@áX‚%K–ܹ́Sơ<åË{mGC5.^¬zVäf222æ̀™Ó¸qcƠƒ ¹·ă¿₫U‰j.ÂÑ«ëׯ?>,,,11Qơ,T†v|öÙ®ÇT# à«ÀÍ;÷đáĂ‹/®V­êYÀ´v¬Pá–ƒT# íß¿áÂ… hƯºuZZÚ¯ưå111†#ëׯWư5©‘­z?©ÿ U«sYYªGRŒ?z¬† ¢Çjè)YîƯ»«₫ºưáèAaaáøñăëƠ«7f̀˜ßö;¤§§«₫"üHddäíÿ&Í}ĂgŸ­ùÏ=UO¦6ôX DƠĐóưj¸ÿµî~…È&øGf̀˜‘=sæ̀Ơ³À'®\)»ß[_}úÜÜ×É|opüáh´sçÎ+V 6́{îQ= |Âá+̃øW\\ÿWz¿·ËÓO‹7̃øÉ|Güáh”‘‘!„HNNùÿüq!DjjjLL̀c=¦z@”*oXíèqç“ưđsüŒ£ÑƯwßưè£ê\ºtiëÖ­uêÔ‰­U«–êQz̀ëĐáNg©ü̃†{¨ ÷Y÷êu;Ÿß!Ú¶mÛ¶m[ư‘´´´­[·¶lỤ̀7̃P=J̀5ÅÛhG§óÆgđ¸ó¾©F@ à­j ¬8fû5jíH5á”!ó]¾Ë—W=¿oU—¬Y³f́ËÀGH!Sú½s°7ÂvU¥Ôi®]s°=ÂvơóÏâàÁÎágtGØXóæfíH5p+ÂöÖ¼¹(ç黀jÀ ÛñÀöTO@`à#¤B8@ á)„#¤B8@ á)„#¤B8@ áhEE¢W/³Ú´Q=¢oƠ¨aö́¸qâŸÿT="†p´‚¢",RS½¶c›6bÛ6áp¨ÔW‘“ăµÇ³f‰̃½iG~ÂÑ ‚ƒo<đØZ5j́Đ®¯Ñc;jƠ¨éƯ[ơ¬ÂÑ œÎ› í¨¯FĂ™V¥ÿ í¨¯F›¬¥ˆp´íhĂjtÿJ]íH5p›‚oÿ·€Ÿp:o¾K›*îºK\¸p˳¶¢_œQ©’(,´ïjP*¸âh)ú²s5ºƠT#·p´÷*²s'±”"ÂÑjÜ÷k4ßßÑÚÆ31ßߘ -Åp7ŒÆdGk3Ü £1Ùߘ#­Ăäj¶£É=Ô´#¿ áh«Ñ¶íè±iGnáh&×mØ&×iGnáhßó±ù}Ä?₫¨zÖ²*»99ªg  V—'ªWÂû^3Úñ;v¨µ́M$^{­äƠlÍÀ¯D8ZD^^ ätÚ¢5“&•¼T#¿á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áˆ̉äp‡ă¶N~+Xơ~ª°°đă?₫́³Ï²³³«V­Ú¨Q£!C†´iÓFơ\~ÍU„‡p:Ë ÀŸqÅуëׯ<øơ×_?₫|«V­6l¸cÇ!C†¼ûGókóçß|́~YQdôhƠ³€_+|̣É'û÷ï‹‹[´hQHHˆ"##cÀ€ï¾ûnçΛ4i¢z@?ớ³B1lØơ— Ơ8{¶êYÀ¯ÇGÖ¯_/„xùå—µjBDGG?÷ÜsEEEß~û­êéüÚ³Ïz¸îH5` „£YYY•+WnÖ¬™₫`tt´âôéÓª§ów†vŒt=¦h¼UíÁüùóƒƒ+“––&„¨W¯êé€á=k Ơ@ #=hÚ´©áÈöíÛ,XpÇwôîƯ[æwˆ‰‰1Ñ̃₫¶nƯ„‘ú#/¼••¥z,Ơ²³³UàGX =VĂ€Ñc5ô”¬F÷îƯUƯ₫‚p,AQQṆ̃åËgΜYTT4{ö́đđp™_•®zpÅÜïªd !Dddäíÿ&–Ájè±,ˆ«¡çûƠpÿkƯư ‘Mđ3fv́ØÑ£G¤¤¤đđđE‹=̣È#ª' újlÓ¦ĐăqpGÏ®^½””4hĐ ³gÏ9rƯºu­[·V=T`0ÜC’̣£ù₫ PđVµÅÅÅcƌٸqc×®]§N¡z¢€á¾óNV–Ù₫ €¤¤¤lܸñ©§:uªêY‰É~´#À[ƠFN§sÙ²eU«V0a‚êYŒ«=î¼£ßß‘j qÅÑè§Ÿ~:uêTHHHBB‚û³ñññ P=£ÿr:Ř1^÷kÔ®;jÿ áh¤mUXXxèĐ!÷g¹E¦Dæ»|S.ÂÑè¾ûîcFwüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8ZÇ„ fϪz>ßj×Î́ÙE‹TÏ@"-Âá3gzmÇ¡CÅâÅÂáP=¥WcëV¯í¸h‘xæ­¥…p´WylG­ gZ˜ëkôØZ5Úg5(E„£87ÚQ_†3­Jÿ5ÚQ_6Y JáhÛцƠè₫•ºÚ‘jà6«¥Æé¼å=ëuëÄÁƒ·ưôÓ¾}ûÆÆÆ¶iÓfâĉyyyª' HƯ»wW=‚a5ôX =VĂ€Ñc5ôX µGÏæ̀™3ỉ¤ăÇßÿưUªTYµjƠ³Ï>[XX¨z.eG̉ÓÓ,XP³fÍơë×/X°`Æ ÿüó5kÖ8p víÚ<đÀ¨Q£´ý‰p€~ÆRGH! …p€ÂRGH! …p,5Ÿ~úiß¾}cccÛ´i3qâļ¼<Ơ)SXX¸dÉ’Ç{́̃{ïm×®ƯĐ¡C¿ưö[ƠCù…³gÏÆÅÅ7Nơ *)..5jTDD„v$11144tƯºuÅÅŪ§óµơë× !^~ùåíHttôsÏ=WTTdùwULddd̀™3§qăÆªQiƠªUùùùÏ=÷\\\œväøĂŸ₫ô§œœœƒªÎ×öîƯ+„4hPpp°v¤U«VM49qâÄ… TOç =zôHHHX¹r¥·lởZâjØê¥µÄƠpá¥Ơ÷ÇR°k×®råÊúØÑu$((¨}ûö¹¹¹Úß ¶’••U¹råfÍéFGG !NŸ>­z:5®_¿>~üø°°°ÄÄDƠ³¨ôŸÿüÇápôîƯ[pæ̀™ééé÷Üsêé|­víÚB}#:΋/–+WΕ’Ö–”””œœœœœÜºuk'Øê¥µÄƠ°ƠKk‰«¡á¥U [¼<•)§Óýر;ï¼óÎ;ïÔoÔ¨‘âôéÓ-[¶T=£OÍŸ?ßư¯½´´4!D½zơTO§ÆÜ¹s>¼xñâjƠª©E¥C‡………ƠªUk÷îƯûöí»xñbăÆ»ví꺂b+=öØ̉¥K“’’*Uªtï½÷æåå%''ggg?ùä“6ùs̉¶m[íÁæÍ›ƯŸµÛK«ùj›½´–¸^Z• oWAAAQQQơêƠ ÇCCCÅ­—l¢iÓ¦†#Û·o_°`ÁwÜa¸Ôdû÷ï_¸pá€Z·n­½ÊÛÓƠ«W₫ùç† ¾̣Ê++V¬p¯W¯̃[o½Ơ¼ysƠúZLLLJJÊàÁƒ́:8`À€‰'ªÍ/đ̉jÀK«/­ªđVơí̉îï«\¹²áx•*U„—.]R= JEEEK—.}æ™g ¦OŸ®z"_+,,?~|½zơÆŒ£zÅ~₫ùg!ıcÇÖ®];cÆŒ;vlÙ²eäÈ‘gΜyñÅ­}Ÿ¬GùùùÓ§Oÿå—_5kÖ¯_¿nƯº…„„¬Y³Æ÷˜»ă¥Ơ/­¼´*ÄÇÛU½zu‡ĂQPP`8®m  ưDZ=íØ±ăoûÛñăÇk×®ư÷¿ÿƯüGU¬jÆŒÙÙÙ+V¬°ç»±z+VÔLŸ>½sçÎÚă^xá́Ù³«V­ụ́Ë/Ÿxâ Ơ3úÔøñă÷́Ù“˜˜øôÓOkGÎ=Û¯_¿—^z)555**Jơ€ñ̉ê /­‚—V¥¸âx»‚ƒƒCCCƯÿó7??_áºĐV®^½””4hĐ ³gÏ9rƯºuö|iÛ¹sç+† fĂ;?ÜU®\¹bÅ!!!:ủïÚµ«âÈ‘#ªô©óçÏõ¼¹aÆ®jBÔ©SgĈ×®][½zµêƠă¥Ơ/­^ZƠâc)¨Y³æ±cÇ̣óóơ?Ÿ›••¥=¥z:_+..3f̀Æ»ví:uêT{¾¾k´D»7P<555555::ú‹/¾P=£OEDD\¼xÑápèj ®_¿®z:ŸÊÍÍB4hĐÀp\»ĐøÓO?©Đ/đ̉ªÇK« /­j¥ K—.éééß|óÍ£>ªq:[¶l ‹U=¯¥¤¤lܸñ©§:uªêY»ûî»]$4—.]Úºuk:ubcckƠª¥z@_ëÔ©Ó‡~xôèQíÆX¶¯Ư¶akĐ APPPFF†ÓéÔ—tzzº¢aƪô ¼´êñ̉êÂK«Z„c)èÛ·ï{ï½÷Î;ïtèĐAûÁí äää<ó̀3åË—W=O9ÎeË–U­Zu„ ªgQ¯mÛ¶®M%4iii[·nmÙ²åo¼¡z:âăă?üđĂI“&½÷̃{Ú+\´hQhhh·nƯTOçS!!!íÛ·ß¼yóÛo¿=räÈråÊ !222’““+T¨`x7ß¶xiuá¥U—VµÇRP§NqăÆÍ˜1£gÏíÚµ;ỵäöíÛ›5köç?ÿYơh¾öÓO?:u*$$$!!ÁưÙøøø¨Ê4ỉdôèÑo¾ùf÷îƯ[¶lYPP°k×.‡Ă‘””t×]w©ÎצM›öÄO$''¯]»¶iÓ¦¹¹¹{ö́)..4ỉïÿ{ƠÓù^Z]xi…ÿ KÇ!CjÔ¨±f͵k×Ö®]{À€£F̉₫ÙV²³³…………‡rÖ?Ç ½aÆ…‡‡/]ºtÛ¶maaa]ºt9r¤ö¯_ØMxxøÚµkß{ï½­[·₫ûßÿ ëĐ¡ĂđáĂ[´h¡z4?ÂK«†—Vø‡ÓéT=Ûñ@ á)„#¤B8@ á)„#¤B8@ á)„#¤«~‹ŒŒŒÇ{̀üœƒV¨PAơ¤`„#€æp8jÖ¬é³O·uëÖ¢¢¢:¨₫ºoxơƠW?ÿüó]»v©€]XHHÈ–-[|ö鯛ŸŸÿư÷ß«₫º…âܹsŸ₫¹ê)Ø áäÊ•+'Oܽ{÷|ŸŸ_­Z5Ơ°Âɸqă6lØ z 6E8°…o¿ưöă?₫₫ûï/]ºÔ¤I“x`ذaåË—w““³té̉ưë_?₫ø£¢víÚíÚµ{úé§µŸ¡œ9sæ¢E‹´3cbb*Uª´oß¾qăÆ¥¦¦.Y²¤U«VúÏƠ´iÓjƠªmß¾]¡³yóæóçÏ¿öÚkk×®ưƯï~'9•»̃½{ß{ï½BˆÂ·ß~[ơº°Â€ơÍ5ëư÷ßw:µk׈ˆØ½{÷;¾ùæ›äää»îºK‘“““pâĉ Ÿ8qâƒ>ظqăªU«ÂÂÂZ¶lyưúơ•+W^½zuàÀæmçîđáĂcÆŒ),,BKNåQçε/^$øá €ºBJ/44tơêƠÚăÍ›7/\¸°~ưú³gÏ₫Ă₫ „ÈÉÉ™8qâ–-[æÍ›7ỉ$!ĪU«Nœ8ѹsçY³fU®\Y‘ŸŸ?bĈ]»v}ươ×O<ñDçÎ;wîœzưúơ‰'₫Ú9§L™̉¢E‹áÇ7jÔ(<<\r*đ7l €9Î3üđĂ®sf̀˜!„xë­·´>B„‡‡¿ơÖ[5kÖǘ³Ï.^¼(„¸~ưz§NÆ«U£¢Zµj=zôBœtèPÛ¶mŸ₫yĂ/üé§Ÿ¾ụ̈Ë̉³gÏ+VüµS)\Xđˆp`e™™™ÚÿÆÄÄx<Áuṃ̀™3ÿùÏvï̃}úôéS§Nååå•âơë×ÿmS€_!XÙƠ«W…uëÖíÚµ«ÇêÔ©#„X±bÅ´iÓ®_¿^¿~ư–-[víÚµyóæYYY¯¾úê¯ưŒEEEN§ÓpĐ°Û¢äTàoGV%„¨T©’É-—/_~íµ×*T¨0₫|ưÄÚ¾<¿ÖÙ³g]÷MßÎTà‡¸9€•Ơ¬Y³FÇOKKÓ/**êÓ§O»vírrr}úÛo¿Ư¹sgퟄ‰ŒŒ=zô5k´sfÏư—¿ü¥N:»wï>wî\ûöí׬Yọ́Ë/'$$íÚµK;-11±~ưúÇ?zô¨¢^½z}ôQ×®]Ë•+·uëÖ£GÖ­[wáÂ…2× e¦ăp¿ûđkựË/¹¹¹ơêƠs8ªg€²B8@ oU@ á)„#¤B8@ á)„#¤B8@ÊÿCL~L._çIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/octave-logo.svg000066400000000000000000000075711466512601400226740ustar00rootroot00000000000000 image/svg+xml fuzzy-logic-toolkit-0.6.1/docs/assets/pimf_101.png000066400000000000000000001313461466512601400217540ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwXÇđ÷ ‚4AÄ ¨ØˆƯX@c,‰ÆhĽ»&j,Ѩ±ÄJbb=åƒÅ̃51–XiJ¹ß§»#ơÊîÎ̃Ư÷óäÉó̃̃̃̀́xÊË́ÎŒF«Ơ@~lx7̀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Đ GĐ GĐ GĐ GĐ GĐ GĐ GĐ GĐ GĐ GĐ‹ïX ???̃MyEEEñnHea_&ùøùù¡K%„₫”ºTrèRi¡?%gµƒD¸U zAâzAâzAâzAâzAâf`ï̃½¼›`QĐŸ’C—J]*-ô'H‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#èÅw@J~~~¼›`~¢¢¢x7Á< q°~~~øù`(üº¥?ܪ½ q½ q½ q½ q½ q½ q½ q½ q½ qPT@@€F£Ñh4;väƯ‹5dÈ]'—)S†w[, G¥U©ReÓ¦M£G¾yó¦&AAAº“Ÿ?>xđà²eË:::6mÚôøñăy”|íÚµ®]»–.]ÚÅÅåƯwßươ×_Ùw *JĐ´iÓ™3gf9˜wQV$HKKkĐ AÆ ơ©¨oß¾›6mjĐ ŒV {U(ÍÓÓ³GDôèÑ£ààà,捻¤́ÚµËÛÛ›ˆêÔ©sçÎ.]º¸»»ïܹ³uëÖ È^́ơë×ëÖ­kcćääô¿ÿư¯cÇkÖ¬8p ¡E Î;wäÈ‘-Z°ó.JÂXÓ¦M;qâ› æQQ½zơêƠ«·{÷î{÷îñ₫Ó¶,Z¯¯/ï&X˜˜̃M°(èOÉ©§KÍúߟôôôôôteêzụ̀eFF¯+­U«V```'Œ7ÎËË+66V«ƠNŸ>ˆÖ­[§{ëæÍ›...AAA9~°wï̃æÂ… º—©©©¾¾¾ÅÓ½4¨¨´´´đđđéÓ§{xxÑŒ3Øwó.JÂ₫ù§F£±³³kĐ ÍĐjµƯºu+]ºt¾"FüÅ1ë¿k¦@â(=«ư2ÉG=?•-úSrêéRsü÷§|ụ̀£G₫öÛomllªU«6qâÄ—/_ '|óÍ7Ơ«W/R¤ˆ««k½zơ6mڔ峧NªQ£F5ô9äÈ‘ăÆ+T¨Pt#Riii“&Mª\¹rÑ¢E/_¾¬;999yÖ¬Y•+W¶··/[¶lÿ₫ư}úốÙ³uëÖD”pưúơ   F#œÓ¼yó̀̀̀Ÿ|çw>|xëÖ-ƯËŒŒŒS§N•.]ÚƯƯƯĐ¢<==u‰Âµkײ¼•wQV¤£Ơj{ơêåêêºdÉư›!÷Ÿ”ƠÂ3ÖáÔ)µ×­›Ç›ÿư÷ßܹs'O¬{9a„ lÛ¶­[·n7nôơơ ·³³Ó½åîî¾wï̃víÚéѵk×̀™3§M›fccCDùŸ˜˜xáÂ…Ê•+‘Ư„ ’’’N:U @"ºxñbddä‹/lll¶mÛÖ»wïüQ÷Áß~ûíÁƒ^^^̣ơÓ̉¥KïƯ»7kÖ,ƯËGiµZOOOöœâŋѓ'O²|ܸqüñGÓ¦M äää´sçÎË—/¯_¿̃ˆ¢̣wQV¤³`Á‚ˆˆˆăÇ)RDÿfHư'¯!q°ơêñ¬]«ÍăMww÷Ï>ûLx9}úôU«Vmß¾½[·n'O,\¸°. $¢¸¸8"JNNNọ̣̈²F"Ê÷üzơêé²F"̉M[î̃½».k$¢-ZDFF&'';99i4#Gܾ}»\¹rDôư÷ßÿư÷ÙŸ₫Çävi}ô‘₫ûƠW_=ºté̉º#º–;99±§9;; —–Eụ̀å{ơê5gΜÏ?ÿ\wä½÷̃ÓM71´¨<ä]”„ÑÉ“'§M›¶`Á‚ZµjÔ C+=!qÎüưư ,(¼tppđóó»yó&¹ºº=ztß¾}×®]»qăÆåË—ÓÓÓÙÏúùù Y£>ç»»» ±._̀~„ˆ́íí—,ỴÙgŸy{{ûûû7jÔ¨uëÖ|đÛN¤¤¤‘‘‘¾¾¾›7o^ºtiJJÊêƠ«·oßnDQyË»( +2¥ $ôZfͱkÙt«ÚÏÏ/**÷X”[·nᾃ„ĐŸ’SO—ă¿?̃̃̃µjƠúå—_x7D9...äƯË×½{÷ÈÈÈ»wïæ}q̀ñï$p«:gsæ̀yụ̀%mÚ´éèÑ£¼›ü=¡'ñOD·è–7yë₫ŸDIä@Déqq*~ø̃­̉ĩ§ănƠ)æ–êT 0]OxèëTBwđtÔ©:^/R“v ¢k₫­́Y₫ô½+uJWƠư?5íUá‰ẹ̀ƒh¯J́[¯̉Ó Ú ¢ ÷£j–ôcßÊÈȰµµ%¢s÷¯”¬Â¾%´Ÿ=ø÷ƒ¨À—©P¡Œ̀L[›×m‹»U§˜÷…§wjº–%¢´̀ ß¶́Å₫Gÿ•¢RD”Fi¨À5ºÖ¢BÎä̀û‚Ä1g7Öø4¤Ñ÷TƯ’½9₫€>èE½x_€xüøñ¶mÛJ•*%ü¸i>}úæÍ›·oßæƯKƒÄQ~~~ÝƯ»—w£̀˜n¦¤̣Î:ß©d'̃Wo6¶Óöí´½7ơ®₫²ú–‡[d1½LsÁë+jÚ´iS¾|ỹ­PÚ•+WºuëÖ¡C$2Y»víêƠ«‰H؆'oÂß9̉m„ÄQ&Öù܃¬”€¬UºI7y_·YºTèRµrƠˆh­JCy7G!*yÆÑ­\¹’w”vîÜ9̃M°|«V­Zµj•₫ççưW8ûớ#DV‰#@ö̉̃,Yă‡ôaWêZ›jGSt%ª¤û"%6¨æHDäùˆyÖû4zÊÇ•NÄE×/V)!-Å©€=]{~¿²sÉăú×;Q©Xưè¸Äó !¢+ObªzT8qÿŸú%«é₫Ÿü*µHÁÂDtñÑ>́[iélíˆè܃¨/?ö­LÊ´!":ûàê;^UØ·„ö³#/D4>y.]Ê°ÑØfju­:±pjưJuÏ?ư·–kùgÏèI|ÆÑöÿEÇŸ|s¹eïĐ²DD_U(]púÿÎØ“ưZZOñ§èTƯ8Œ† £aqçFØ₫ À`Vu>¦M›¶cÇ̀ªæKù)«́shÂü·Ÿ xxPĺëxëVúä“…¦¤ îDvÑ.¾W-+̀ª0k˜U­?¬ă›5₫@?ä–5>~,fDyfññbü̃{¼¯±y3M›Æ\yÎÓ€lméđảj©U«·{x»Iljp€hI»—²>Ñû3ư¬!nZ:˜/$oñ#ñ±•®Ôµ/ơÍíLOO1>t(ÏBçÎă)Sx_âÛfÍ¢ZµÄ—íÚåqî̃½Y%‹§}û²ÖZiI{‹²>i^ŒM£if ‰#€è.Ư½N×…—Ûi»l̉$Ï·-ălṆ̃Ç>§¿{w¾§kµomzü₫ût₫|§•§̣Z̉î¡=́Á94Ï;˜/$¢²TVˆỎÉ<Î\°@Œç̀áƯnÓ±{²,˜ïéwîĐ·ß/èΜÏlM­µ¤  áÈSzjÀ̉˜ &H^ûˆ>b'rªKuó8yÂ1Îçæ3³w%µmËû*s,Æii4sf¾Ÿ>œ¾ûN|Y®ÅÄäẓY:ûưÅAî`8æcö́ÙQQQúO©óơ?úŸ?§ç’•ûÇb<`ï«̀;ÏeÆ }>BááâËó:¹95×̉[H"w0;Hˆˆ~¥_…¸Ëûä Äxܸü¾rEŒ;tà}¡¹sw'[[ñåƠ«ú|èư÷éăÅ—üRA-i‹¸£ rGó‚Ä€ˆ¨#uâÇô82›¡°;æŒMUîâE1ĐóCÛ¶Q£FâK{û|ÎO¢$v®:rG3‚Ä€²lc“ßß‹¤$CJ¿|™÷ơé­jU1~ùRÿÏ9"Æ©©4}z>çÿ@?|@/‘;˜ $T…ªñ9ÊgYö®¥ß½Ëûú ±u«³ÛÂä‡]ßñË/éÅ‹|ÎßM»‘¸JrG°*F£Ñt́ØÑổ GC† Ñurvư00GJ£4!®Eµ̣>™]†æ×_y7]ŕ8qq}”(ăä”ÿùcí,%¼DîV¥J•*›6m=z4¥¥¥ÙÙÙĩæáá!œüüùóÁƒ—-[ÖÑѱiÓ¦Çϱ̀›7ojr¤OE¹iÚ´é̀l‹-äÑ*©*2åúöí»iÓ¦ đ₫£¶4v¼ÀÙWÖFẶ=Ơ*1foíZ6mhÏ›U»øúơÓósï¿O-[É´hAư•ÏG¦Ñ´StJ˜Ï®!M–™×–ÊÓÓ³GºøÖ­[5ªP¡‚p‚£££.HHH¨S§Î;wºtéâîî¾sçÎÖ­[ˆÖ­[§{yóæM—   =ë7nœ——Wlll¾e‘––>}útỮŒ3ôo•„™xEƯºu+]ºt¾m0â/Yÿ]3nUƒU{Fτؙœ úlÆVf™ă“Y]¸ Æz=JCẩáQ5̣]â,··÷˜1c–/_îââR°`ÁêƠ«O4éƠ«W ‹/®Q£†ƒƒƒ››[ưúơ7õœå³§OŸ®Y³¦°àñç5jüøñNNN… ®_¿₫ü‘>ỵä*Uª899]y³BJJẾÙ³«T©R¤H‘råÊ…„„}„VơïßßƯƯư₫ưû¦ÿ1e¹UƯ¦M{{{WWWáGs•*UNŸ>­Ơj¯_¿NDcÆŒa?¾ÿ~"Z³fM̃µ̀›7Ï̃̃₫îƯ»úT”]>Ç̃AηURUdúáVµä0âÖë4â ̉ç#úm§Â`q4£G"̣̣ăÄDC?*ÆEèơ7r›IâlJL²¶*îîîŸ}ö™đrúôéÛ·o'¢“'O={ÖÎîơTθ¸8"JNNNọ̣̈6mÍëgù_¯^½Ê•+ëbỪÜîƯ»(P@wD73#99ÙÆÆF£Ñ9räöíÛº·¾ÿ₫û'Ox±5ˆˆ(==ư·ÜésùÑÑÑ™™™3gμÿ₫“'OÖ®]ûßÿuèĐáùó纖;½½N³³³pi¹‰ưꫯF]ºti}*2èÏ+ßVIU‘bWúìj°^́êå´Ü Ïæ7;đ vÛ̃Wlˆ™3iàÀ×ñđá´nAŸ0@ütJ Í›G“&åÿ©/è‹u´îỬ½lNÍqÏÚJøûû,XPxéàààççwóæM"ruu=zôè¾}û®]»văÆË—/§§§³Ÿơóó²F}Îwg(Ơå‹Ù‘½½ư’%K>û́3oooÿFµnƯúƒ>`Û©“”””Ç-l-»Æi.₫₫ûïÂ… »¹¹é^öë×/55uذaº©ÊDôâí•QˆH8?GóçÏOMM÷ö¦¨yTÔ¿ưÿ¼t=–G«¤ªH±+ư!qëu’N qUÊ8đÿă#ô«ƒM‹Óï3êÀ¦~ë×8Ql¬¸‚øäÉz%DC1ÂXăA:Aͨï¾°K–đn!́́́’’’^¾|Ù©S§°°°ºuë¾ÿ₫ûíÛ·oذá;ï¼Ăéââ"Äúœ¯¿aÆuîÜy÷îƯ ơó󋈈đôôdOsvvÖ';̀CÉ’%³yÿư÷‰ẹ̀å˽{÷¶±±É2k$66–ˆJ•*•[©©©?üđC§N²$—yTdPƒ===ón•T)vE ?$`¥Ø ©kP }>&ƽ{ëWYÿăU ¥¥ưébŨpaJM}ưréR5J¯>¡'ôz¡à@ ÄÊRѳÿ¹¸råJZZ0Ú—’’rơêƠÀÀÀÈÈȰ°°%K–ŒbZŸe‘eèùyˆ‹‹‹öơơ É̀̀\¹råˆ#V¯^=ưí]5ÓÓÓu‹Âäè£>Ê»¢Û·oï̃½»yóæUªˆ[XéFïÊ•+gggWµjƠdz9tèF£ñÏư&ÆöíÛăăă³ ¹å]‘A“w«$¬H±+ưáG°RĂIœ,¬ç}êíÛÅØÏO¿jØG³³b…ç»ÿtNRRÄxôh}?åNî́SxØÑCÏÏCTTTƒ -z½1¦M`` 1÷²º[Ơ¹É·"{{ûqăÆ 4(íÍïi™™™ ,°³³kÙ²% 0àßÿƯ½{·îƯÇïܹ³eË–º°sôÓO?9;;ëàÔ¿"ƒäÑ*i+Ŕ@_¼gçX «i%9¦¬1טyƦÍM–‰ưirû?üP, uk>È₫}§ưs—åÇ,fU«Vụ̀å½¼¼ ,øÑG}ñźù 6̀Èȸ}û¶ƒƒCÙ²e'O¼|ụ̀=zxyyyxxT¬X1,,L÷Ù:Ez₫ùóç‰èûï¿̀=›ˆ>|ø̣åËjƠªÙÚÚvï̃}Μ9½zợđđpss“äÏ:ˬêùóçQ¹rå½mÛ¶Û&üĂ9BâVç]ânÔMÏOå¾Ú†~̀kơoV f­"£–5¡·7’ù₫{Ă>Û“z ñ»ô.ïîéµiÓ¦!»Á¹u¸råJ·nƯ„YÛ ¹µk×vëÖíØ±c¼bi8‚Ơù‚¾bv;éƯ»'Ææ;âøå—büÅFÓµ«oÀ7Đ!>JG/“9/ 9Y¹rå„ x·BQçÎÓ=.öË/¿đn‹ÅZµj•®“ï̃½Ë»-‰#X_éW!ö%_C?^¡‚̃§ïFƠ,vù⯾2ºö!Ñ… û,»ÇO5ªÆ»G¬G€üƯ¼)ÆŸ|¢÷Ç̀w£jyñ5|°.Ơö’!¢¥´”÷¥X)$`]vĐ!Núî†bä”jvÄÑÑ‘÷¥›€½æ₫1º˜ƒÅxđ`Ă>Ën9Fóî+…ĬK0 ñ ¡ç§¾₫ZŒkỞ»²sçx_®DØÇ[µ2¥¤R¥ÄxåJĂ>ÛŸÄmjưHÏ=@JHÁº¼¢WF|êÙ3£*{̣„÷åJ„Ư™û₫}SJ:{VŒ‡ 3́³ß“8û:]çƯ)Ö‰#X)ö™9¹1nÙ̉àß B<ˆqîĂU©ReÓ¦M£GÖ½)Q¢„££c:u/^œÎL.̀»¨Ü̃íÛ·ï¦M›4h ØŸ©•°ăƯ…üL? ±y)Z·e$-ZˆñÂ…4k–)…ùøˆñ£GÆ”Đ˜ ­Î£y“hï0€§§g=tqXXØ|P¡B…àà`{{û;wvêÔé»ï¾ !¢„„„:uêܹs§K—.îîî;wîlƯºơÁƒ²”éèèœå`JJÊ®]»¼½½ *uîܹ#G´`ÿÈï]ƒ*‰‰ ̀ÈÈèØ±cÙ²e÷ïß?v́ØC‡é²ç¼‹ÊăƯzơêƠ«Wo÷îƯ÷îƯăư§mY´ 5___̃M°4111¦BZ₫3́ƒo>V¡‚¡U¾ùdß¾Êu–ŒïObzÑd_|!öÙgF5ÇØ?SÉỊ•„Yÿû“®L]/_¾̀ÈÈàu¥µjƠ ^Ö¨Q£D‰Ï=Ó½LLL,[¶lé̉¥u/§OŸNDëÖ­Ó½¼y󦋋KPPu7ÎËË+66ÖĐ¢̉̉̉ÂĂçOŸîááAD3f̀Đÿ]ƒ*úè£lllN<)éׯíƯ»7ߢ̣­¨[·nBOæÁˆ¿8fưwÍH¥gµ_&ù˜₫S9^/dk?Öÿƒiibn2dˆµ Ÿœ:Ué.Ë“ñưY­„‰£ÖäD4H$0W;W®₫̉GS”/_~ôèÑß~û­£££MµjƠ&Nœø̣åKá„o¾ù¦zơêEquu­W¯̃¦M›²|öÔ©S5jÔ¨Q£†>ç9rܸq… *P €nD*--m̉¤I•+W.Z´h``àåË—u''''Ï5«råÊöööeË–íß¿ÿƒ$¹d6qLMMµµµ aOĐ F&''kµZ???//¯̀̀LáƯ›û÷ïç[Ñ‘#Glmm÷́Ù£{iPQ>d‡™²¤†y¿kPEºngœ={–ˆ¦OŸoQùV„ÄQrxƬÂjZ-Ä=gü”ềL1¶Œ[ƠD4x°ÿö›ñå¼aÇ<,mđÇĐ!BSxö ˜fÇ#FŒhÚ´éĉ=<<æÏŸß²eK­VKD3f̀;v¬‡‡Çĉ‡ ̣âÅ‹àààßÿ]ǿƯ»w[µjơâÅ ƯÓlù¿iÓ¦ơë×O:uæ̀™111]ºtiÖ¬Ù Ô³gψˆˆO?ưTwfHHÈ_|Q¦L™±cǬ[·®C‡’_»­­í… fÏ-IOO¿téR5́íí®_¿¤Ñh„7o™™™ï㉩©©}úôéÙ³gëÖ­‰ÈĐ¢<==u‰Âµk× z× ̉ÓÓ‡ 6|øpöàíÛ·‰¨P¡ByeJç€ÑđŒ#X6qlNÍơÿ ñ‹8²{:{)ûH¥| "áß÷Ơ«é#S—Â9}jƠzwè@ÿücp Í©¹>Ρ9Si*ï>R/ iL/ÄhZÊkÉÿ₫ûoîܹ“'OÖ½œ0a‚ ¶mÛÖ­[·7úúú†‡‡ÛÙÙé̃rwwß»wo»vít'ïÚµkæ̀™Ó¦M³±±!¢|ÏOLL¼páBåÊ•‰ÈÎÎn„ III§N*P ]¼x122̣Å‹666Û¶mëƯ»÷?₫¨û`HHÈo¿ưöàÁ/IÿFÛÙÙùûûëâ 6DGGÿñÇ<øé§ŸˆèÑ£GZ­ÖÓÓ“ưHñâʼnèÉ“'y—¼té̉{÷îÍzó8²)EÄ ́́́¾úê+öH||üW_}ekkÛ¥K—¼‹Ŕ€…ĬºcÜÙıP!C>É&3âȲƒ±ÆªYSŒ/_6¦„¿è/!FÓ8)ww÷ϘiûÓ§O_µjƠöíÛ»uëṿäÉÂ… Û½ùîÅÅÅQrr²p²———5Q¾ç׫WO—5‘n®q÷îƯuY#µhÑ"22299ÙÉÉI£Ñ9räöíÛåÊ•#¢ï¿ÿ₫ûï¿Ï̃øôôô?₫ø#·KûÈ߯fÍMD-[¶ÔUªk¹““{³³³pi¹‰ưꫯF]ºtiƯ£‹2”)ưư÷ߌ^µj•Ï… ̣(J±+G°.ÎälĐù7nt:ăÁ1¶˜ÄQÁÁ´iÓëxƯ:êÓÇàêQ½“tRGß  ¼¯ æïï_°`A᥃ƒƒŸŸßÍ›7‰ÈƠƠơèÑ£ûöí»víÚ7._¾œ₫ö.đ~~~BÖ¨Ïùî̀ºªº|1û"²··_²dÉgŸ}æíííïïߨQ£Ö­[đÁl;u’’’̣¸…­»á®§7n$'';v,$$¤AƒW¯^ƠµíÅ‹́i Däææ–GQóçÏOMM7N\z̀è¢ e\EwîÜ>|øï¿ÿîăă³ÿ₫æÍ›ç[”bW,$`ùÎ̉Y!LƒM(Éy«ˆÚµ#áq±”²·7±¼Åıo_cÇtBtH‘8æ¦15æƯØÙÙ%%%½|ù²S§NaaauëÖ}ÿư÷Û·oß°aĂw̃y‡=ÓÅÅEˆơ9_Æ ëܹóîƯ»<êçç‘å̃¨³³³AÙã)̉¢E‹yóæuëÖí×_íׯŸM–¯±±±DTªT©Ü IMMưá‡:uêÄæOFe#*Ú²eË Aƒ׬YÓ¯_?aÀ8"`!qËgồV… ~€q´³ ¿hƒ‹‰ă5ôfùb¾*P…ÑÅ_ÑW“i2ï©Ña:̀» ¹ºråJZZ0Ú—’’rơêƠÀÀÀÈÈȰ°°%K–Œ5J89Ë"ËĐóóíëë’™™¹råÊ#F¬^½Z· [¾)·ªÿøă:lÚ´é“O>ººº‘V«µ³³«ZµêáĂoưÙ:tH£ÑOFf·}ûöøøø₫ưû³+ʆVôûï¿÷́Ùóă?^½zu–ûÎy¥Ø ³ªẠ́}Gß ±7yWHcCkØGK̉¶­¯^m|9Œ7« aL ́F2˜^m›2—@È-ÏÚµb¼~½ñå0Ø]y₫÷?# ùÄƯA*¡³™ HÁÂm§íBlO†­sÇÈUĂ-]íÚb¼aƒT¥Ö¨!Æ̀₫pø>âûdϘ‚9{üøñ¶mÛ"##y7Äb>}zÛ¶mºƯ ABHÀ11R•ôf_7"¢7{¤¬-‰“¾ƒ)˜W¯€AÚ´i£›>lU®\¹̉­[7aÖ6HníÚµƯºu;v́ï†X<ă(=«}îA>¦<@&<÷V…ª\¡+†}öÍ#s†ßyÖ0û«́o™äÉsu’”Ê>é˜÷₫ÈÂ3f Ï8ê#`É̉Q!îE½Œ.ÇàEY6–ø·¬gO1~öLªRÙ5„é7†jGí„x%­T¸c,›%₫Hxc‰Oàơ¦̃}–}ÀÑàEY¹Quo¦3¥{̀ñ‡ĸo_# ù‰“k†Ñ0¥{À¢!qKÆ&^d؆Ñ́”j“F-i£jA‹b,]âX©’Ÿ;g|9n$îÏ{‰.)Ú3 ‰#X²J1ú³́dǺuMh„E8²Îœ‘°°À@ f§̉7!S†‹à-HÁ*:ÜH&.âȲøÄQŔÜj£z[8 úœó¾&ËÄ,ÖUº*ÄF̀Œa7ª6‰Ẽª&¢víL/#;vÔTăËYL‹…¸ơPªS,G°Xư©¿›2¥ÚÉÉbl©#½˜.2D‚5ă7Œ,d4âŸè'%;À‚Ùñn€\“¸ôbUªjt9… ₫™ÄØRÇ.]Äø¿ÿ$,xƠ*ªYóu>b,Ưúâ`*$`ù>  ưÈéÓb<~¼áU²#Å‹óîÙÈ6€±j•j|9;i§·¤–Êô €Câ–i7íâécC?~ê”שcxơlâhÁ>f:öÖ- f×߲Ÿr:Sg!w£!qËÄ.ư }bèÇÙÄÑƯƯđêÙ[Ớ¦c·m“¶lFr:RG!^GëäïK†Ä,Ó6ó˜BTÈĐ³‰£1¬dÄ1 @Œ·o7¾œœ°ûV₫¹ñåüL? q_2vl "$`©^Ñ+S>nê}W+IY¦́-“>}Äxöl̃WD„Ä,+¹r¨ƠJnU›‰­´Uˆ;P̃Í0cHÁÅS¼13FÏ­fä&Mä+{Ü81̃ºƠør؇\£ßèK…Ä,‰3cXuẹ̈¾•cçÇ:$mÙ ˆñèÑ&ƠŒ q8…+Đ1 ‰#X vfL™RÇ|°+̣H=±ơè‘Iÿƒ₫â¶ÔVî^°THÁưM›̣qvÏ6cq´*büư÷’ߪ•_½j|9ä Ä™dÄ^@@„Ä ;v-SG à}5 zẻLö±ó©'L0©¨>ÔGˆ'̉D¥:À¢ qKV*ñ)v¿ÁjƠLk›ï>0óˆïîƯÆ—CD?̉Bü5}ÍûỀ’µ$;v́èÚµk@@À»ï¾;eÊ”§OŸæ}₫«W¯¾ûî»N:4õ|Ô¨Q7nÜà} —ÇôXˆ[{ÅÔƠ¿YÅñîùµn-kñ’åB.BGq²6À"YEâ¸xñâiÓ¦Ư¼y³nƯº»ví8p`JJJnçgddôîƯ{áÂ…OŸ>m̉¤I©R¥ÂĂĂ?úè£SR& v½₫‰£5Œ8~ô‘9"yñ_3ƒƒ TÔ/ô‹³[€,?qŒ ơôôÜ»wohhhxxx¯^½.^¼¸0÷AÛ¶m;{öl›6möíÛ·lÙ²7₫øăD4mÚ4̃Wùû•~â&d̀*ƒiỉµÆÇÄø×_%/~È16ñ1Ç@ âĂtX̃n°D–Ÿ8nß¾=33sôèÑŋי4i’³³ó={23s\yö́Y"êƯ»·îHÆ «T©̣ï¿ÿÆÇÇëW-pFa¼›À°†[Ơ%Jˆ± ‰#K«5µ„6ÔFˆ÷̉^Y[ `y,?q~–œœœ‘‘áââ’帳³3½=¦Ẹ̀óóÛ¸qcŸ>}úôé# Â₫øÊ“ŸŸ_–#{÷⦘ñîƯ»§ç™/5/©üë¸Å‹·boZ׋6Dåtq¥JOoƯzfDƒ½ß±™™/nܹéߟẓª]»đ™3ºø– ×[´( ºoŸ©Uôwë¿Öy­.₫" }Mo¡ä] èRi¡?MÔZæå#̀ˆ…'º©ÓY;::ÑóçÏsüTBB¼yó’’’üưư«W¯ù믿6hĐ eË–úÔÅî=RđööÖç´­´Uˆ{íé]T¯O±₫úKŒßßƠÛÛƠĐˆÝÉƯ××]¿–+LÏ₫Ô×'ŸĐ›ÄÑ;1‘ªW—¼Á”˜(Mă¿§ï×̉ëÄqV±Y_ûR’JÜ¥€.•úÓÙ¬g!²~«ÚÅÅE£Ñ$''g9˜˜HoƳ›0a™3g&MôóÏ?Ïœ9sụ̀åaaacÆŒ‰‰‰á}Mv-è#JX´HŒ«T1ª́H¶•ܪfWä‘g~ »…̀êƠ¼¯ÀZYxâhggḉ́œ}d1!!ˆ„yÖ¬Ç [ª”QE°‰£•LñơcyÇQ£ÄØôu±V“˜{²ó¬ o8‘§§g\\œ.Sè‘̣ôồ~~\\•/_>Ëñ *Ñ“'Ox_ä%•RM,áâE“ÇlIb%#¬\+PœÉ{¾ ¢ABŒEyôgù‰c‹-222ûƠjµ®®®ÙÏ/_¾¼­­í7´o/§{¾¡R¥J¼/äué’ÉEXሣ"6ăÇ/G§(â4’pÍwKfù‰c×®]mll–/_øæÑúĐĐĐØØØÎ;(P@w$))éÖ­[ºIgöööM›6½}ûö²eË„Âoܸ±råÊ‚ ñ¾ ĐKgề­nv@,ÛÄ,‹U¹²Ü5°9Ndji›h“S°Ü° >«ˆJ–,9~üøùóç·oß¾I“&·oß>~ü¸¿¿ÿ€„s"""ÆŒăăă³{÷n"={v—.]V®\VµjƠ¸¸¸3gÎdffN›6­bż/ru„Ä’ÛR[ní°Îí…Ú¶¥k×^ÇÏQ¶5°LׄÙ?̣Çé‡L*­=µâí´}mS “̀å8Q¿~ư.\èíí¼a×ܰ¹»»‡…… 4ÈÁÁáï¿ÿ¾wï^³fͶoß̃£G̃—ya74=q̀iê”~¬3qü€™Ă₫Ǽ[£— TAˆïÓ}̃Í0–?â¨Ó®]»víÚåönÛ¶mÛ¶}+Ï(R¤ÈرcÇË»á`6q,A%L(‰ˆ¨fMc?iúÜ sÔ¼¹‡…‘<¿e DkÖ¼¥FL*mmjD¯‹đ'ÿ§ôԤ⬀JG_¾|}üøñ»wïfddđn˜‡ót^ẨŒO­sÄ‘fz9>]ŒgÎ4µ´†ÔPˆŸÑ3™;À¨nÄñđáĂ+W®}zÉ’%ïܹsđàÁC‡ùúúº»»ÇÅÅƯ¸q#--ˆJ•*5kÖ¬,ŸZÁ>5¦Æ¦‚=ÉäêJOƯåÎ ©BâMvvÇsÈBE‰ă₫ưû…8##ăêƠ«YN8u AÎØÛ‹ä`zÆ/âȲÂGr•J}}éúu) |‡̃9Kguñ¿ôoy*¯ÀU˜Ưª0Z$E ñ\2̣æ%»·¥ñ‹8²ăÚ+<̀˜!Æ‘‘F“¯)SÄxÙ2 ¥P!ÆƯj€Ü¨hÄqèĐ¡¼›æjíâwèă aq”fÄÑÍk¯đđ₫ûb¼o5–à±ơîM}ú¼çÎ¥‘#M-°6ƠÎ|€¥¢ÄqÔ¨Q¼›æêO’`ßbiödYaâèé)ÆûöI³Bw~=’¦?̣‹¢(]|“nV$<è nUƒ%H Ó aG½½¥h–̃ªf;&kñƠ«›^Æ[†‘¸hĂd,kằçÇÎ;QñâÅW­Z¥‹ó•e?k©H³ß Ë GH—.½—.%ÓïXŒ #éơ=ïḍ6Ø–ˆsâøÏ?ÿQ©R¥„À́¾Ă†úûo©[c#NN” Áp¾–-£o¿}ưµ‰#¹‘[yD0@Œ¿₫Z2—Đ!6åÉ‹¤¢uủ̉̉ñ¼yûöí vFÛ¶my·Ôå=¶ÀªUMøp\œ[çˆ#믿«JªGѨÑ4Zc%p€,T”8jµÚơë×/Z´èû”X6HAn&%qTV‰ôđ!ïFX Ưª₫ù矿ú꫼³F€<Ô ăw˜f§åJ6âhµ‰£r¿‘N˜ ÆRm>ÅΧ̃I;»ơSQâ¸aĂ!¶µµ-Y²d©œđn&¨Ë z!Ħ<‘våK6â¨`₫¤. ®È3fŒ?.M™Ki©"l… RѶ۷o‘­­íüùó[´hQ¤H̃-3 ƠZI´D$€EPшc… ˆÈÏϯ]»vÈAO³i¶K•8:;›Đ öVµƠªXQŒçΕ»6[[éËlM­…ø]2¡$‹¢¢Ä±^½zDôâÅ “K+’J©B¬!Ñå°‰£I0âHDíÛ‹qr²Üµ±w«“¦Lvéïè#¹/À\¨(q2dH… î̃½Ë>́·«tU’r$K1â˜ÅÁƒr×0v¬ó4eúߢ[r_€¹àüŒă°aĂØ—îîî111sæ̀Ùºuk¹rållrÈkW¬XÁ·Í`‘$Ë÷0★ü™´——ï”ntY*{‡îÈƯxóÂ9qÜ¿Çõ¼yóæM¾móâNî¼›@DH-Ç7ôMꢋÇ̉ØoH¢ÁLs¦¢[Ơ¦¢ ̃M "ܪ~ä5 öñÇbüß̉”Ù™: ñbZ¬äå¨çÇ¡C‡̣î0c—é²K•8–/oÚçåŸ b‚‚¤{n4cÇ̉öí¯ăo¾¡E‹x_>€…âœ8’j«°JIœx!Uâ΅H™å "áqäƒ)H̃ñàúơÅXÂÄq2M₫¾̉Å›isê!ëU¨nUƒû›₫âÊTY’2MZưl¦(ÿÄj™̀%qʱ4Ö„’,„êǘ˜˜M›6ÅÆÆQ||ü¤I“Z´hѱcÇ•+WbkÈ‚q4ûTF¥ÁîÓ­HâX»¶¼å?¦Ç \€Ê©+qüé§Ÿ>üđĂY³f=}ú”ˆFŒñË/¿Ü»wïÊ•+K—.íß¿¿V«åƯFP‘x’f ³dUC"#¨dÄ1₫ñGÉ-FÅ„8¢¸5SQâxíÚµ/¿ü2##C÷̣âÅ‹§OŸfO8ỵä®]»x7,,‰£ÆømlÀ½{‹ñ²eÆ—“Å_ô—O  ¼¯€3%k×®Ơ (¾ûî»®®®Đ¯Q£Æ—_~Y¨P!"úùçŸy7ÔÈŸüMù8›8:9IÔ¦bÅL/Ă¼ñKÏŸ—¬¨TSˆ¡_x]€J¨(q¼zơ*Ơ¬Yó‡~pww?tèîø˜1c>ùä“æÍ›Ñ7x7ÔBKâs &N©¾*Ͷ…oc̣³N2ϤÎÎNU" Q!…/@µT”8̃»wˆjÔ¨AD±±±W®\!"''§úơëQ©R¥ˆ(‹äÁ®Å#Ë‚ƒHÙÄñÑ#*9RŒÏœ‘¬Ø¯ék!^JK¸ƠRQâèèèHD÷ïß'¢ˆˆƯmëfÍÙÚÚÑóçÏ‰È ?Œá GYv{Á­jÅWäaçÇHø˜ăHR<æVNE‰c™2eˆèÈ‘#«V­úî»ït[´hADwîÜ9xđ yzẓn&¨›8º’+ïædƒ_r̃}WŒIÙ]6l¥W„EÁÀª©(qlß¾=¥¦¦.Y²äÖ­[DT°`Á¦M›>}ú´uëÖº•›4i»™ Gèï&äẹ́eÓ˰ëÖñnI:Q'!>@x7€%]»vƠ=àÈqppÈÈÈĐ­ÑS¸páîƯ»ón&X²rå¤+ë£x_(µz@€,Å£aB¼ˆ°6X/%vvv›7o:tè;ï¼ăïï?hĐ )S¦ﺻ»¯_¿¾xñâ¼› –̀×Wº²$[× 0uª¯Z%Y±Í©¹‡Qï«àFå+ŒU°`ÁQ£F5=èääô믿úùùÙØ¨(ÍơhH ¥* ‰£Äœéùs%+́ÜYŒW®¤!C$+Ù́S(EÉkP!¥bK߸{÷.{¼`Á‚UªTAÖ¬—ôRˆ›RSSb—x25qLHc$DÄơ¡ä₫‘²´¯è+!^I+9^G*ÊÆvíÚµråÊ•+WÆÇK³1X°CtHˆ›IÙÉơëb́ăcZ³ØÄÑÙ™KϨ ›8̃¿¯L¶¶²;Ä;!Sh %˜1%ßÜdºsçï¶€Ú¦ĂB,aâˆG‰±‰ăáĂÆ—cˆ¡CÅX¦©íÏIÑûïê¡¢Äqøđá;v$¢Ơ«W?~ü˜ws@ƠØÄщLJÑØÄ±bEÓÅ>χđˆ2Ỵ̈HWJzKù=zOˆoÓme.@UT49fäÈ‘DT¢D‰èèè÷ß¿J•*®®®&Ëi+V¬àƯRàMMÄ&¦Â­ê<(•8V®,Æ+W’„ÿ`|E_í§ưº¸ µ¹BrlU  j*J÷ïß/Ä)))gÏåƯ"P¯ ʪ(¹GŒ8fqñ"Ơâ«t•ws8PÑ­j.¤LÙ[Ơ¼¯̀zƠ¬É»JE#CÙG“ô@¦ṇô©t­aGA§P!zù̉ôb R½:]¸đ:̃µë­ÅM4‰&Í£yºø7úí#Â₫@`]T”8fY÷@&N©–Ḉ4!æ)elÜH›6½×¬‘2qœE³„Äñsú‰#X•̃ª ߺukbbbzzúse7Ÿ•‹¤H!VWâˆ/jv́<<–hƯ·OỂ́˜_¶/Ñ%å/€/8ếÚµkụ̀å÷߬ܨQ#''§   ¾}û1"û$k°B́”j·ayx˜\F³Ë²”ăGf?DW*ÄP ïVđ¡®ÇyóæM™2å~¶&’““W¬X1sæL̃ U`·)NÅ¥*V‚ª‘8fÇc p"úđC1–öËÙ4[ˆgÑ,Å®@ T”8^¾|yƯºuºØ–Ù5LeܲeË©S§x7ø“pG–‰#nUggÇÜÖP0q4HŒCC¥,¹;uâ/è Å®@ T”8®^½Z«ƠÚØØ|₫ùçgΜ;;;/[¶¬páÂD´~ưz̃Í₫’(Iª¢´Z1ƈ£́NT¬*vÄqÍ̃`)T”8^½z•ˆÚ¶mlooϾƠªU«fÍѵk×x7,”UG•’|ÇêILKÿ¥y_€rT”8ÆÅÅ‘··wïúøøQll,ïf‚¦Â&– qâˆ[ƠÖaÍÈ1°x*Jưüüˆ(ǧµZíÉ“'‰¨B… ¼› *̉ƒz˜XF•Đ —jă[·¤,¹6Ơâơ„çgÀ¨(q¬^½:?~|äÈ‘‘‘¯ê»{÷î¡C‡†®K«V­Ê»™ÀÙº"Ä ©¡‰¥±‰cÁ‚&7.1‘S¯¨[£F\ªeçÇô0ơW RUâ8hĐ www" ïß¿¿î`¿~ư °ÿ~"rrr¶„p” q#25#‘r£jÈMC&¿?vL±jßyGŒ££%.|â¿éoÅ. €/%îîî‹-rssËñ]''§ùóç—,Y’w3³c$fU¨‰¥Ư¸Áûz¬;âxô¨ñå˜àɉ Äc`ÔµsLƒ öíÛ÷Ưwß>|øÖ­[ÉÉÉåÊ•kԨѠAƒœœœx7øcGM÷ß¼¯Ç°¿ï)8âHD®®ôô©,%»‘ø+nE(yQ©+q$"GGÇ1cÆŒ3†ˆy·ÔåaI&s¦́ˆcH-Xđ:₫çªVMÊÂmÉ6ƒ2”¼îTt«•‘‘qçÎË—/ß¹s'#ÿ4X”¬íÍẲDDk×J\ø<'Ä¿9₫¦äuđ¢ºÄ1::zذa5kÖlÙ²e¯^½Z¶lY³fÍ‘#G̃’v9 0¨€„¥ahÛ"ùù‰±ä‰ă8'Äߺ|ËûZ” ®ÄqëÖ­íÛ·ß¿ZZp0---<<üƒ>صk>¥%Á"¬B…”í ƠswçƯzñBÆÂc Äđ¾>%¨(q̣üùó‰'ÚÙÙmܸqÛ¶m¡¡¡[¶l)X°à矙™É»Ÿ¬;âXŒ™XZ óXZÅ’6‰clâ΅RåʉñêƠ2VGqJ^*Jˆ(&&æƠ«WỸJOO‰‰!£öª̃¾}{ffæèÑ£‹/®;2ỉ$ggç={öä–îÚµ+!!ađàÁµk×Ö©Q£F›6mbcc/]ºÄ»Ÿ¬´«ß¼)Æ*HÚPܪÎÂY2–Óæ12©Cu„8™’y7@^*JÇ_¶lÙ¸¸¸Q£F=|øP8₫øñă1cÆôå—¯ă³géw¤,|6ÍCstñ\;¦+|uJâœ8îß¿?ÇăéééW¯^Ír0!!!·ós“œœœ‘‘áââ’å¸.CÏaøêƠ«W/^¼¨T©̉Œ3¶lÙ"/S¦̀’%Kªé·g™»î0íƯ»W₫î´X÷îƯ{½Yü¤DF‰[wL]₫Ê•’D¯\”d…yai–gZíS/Y/ö§‚Øuk^Ïÿ½÷́¾ü²Œ.^º4aÆ ©F|sm¯è¶* —o©C¨uëÖ¼› ªÛ«ZZº©ÓºÙ,ƯØÏŸ?Ï₫‘/^Qttô“'OæÏŸ˜ºsçÎ+VŒ5j÷îƯúŒ;FEEñ¾tK£[’IĐØ¶q–#F`ÿ!5½4–KÙ².’(9i¯W/U«̉•+\jgkûùg§ơë%nJMÑ!]́áíáH؆H¾¥ ưí?Ö³Y ΉăĐ¡Ce-ßÅÅE£Ñ$'g}b=11‘̃Œ;f¡›ÜMDóæÍk̃¼¹.>|øưû÷wíÚơÇté̉…o§Y­ót^ˆÓ)Ưô?–­­¸U:6OL”¾̀)4EHçܹ̉4—÷UÈ…sâ8jÔ(y/ÏÎÎÙÙ9ûÈbBB ó¬Y… Öh4AAÁñ÷̃{o×®]×®]ăÛcÖ́‰7'Đ̃ÍÉæåK1ƬếÆ£^ÇׯK½WO><=éÑ#¹ gçÇ|E_!q ¦¢YƠ2ñôôŒ‹‹ÓeƯsH9~¤xñâ Đh4́AƯjƯ4àâ$âúTŸws²a¿cq̀®>óGṿ¤ñå¥O1₫ç̃]`¶Ô•8Ä1o'́Śr$CŸ‰k³w®,ŒfUûí·Z­ṾbK–,9~üøùóç·oß¾I“&·oß>~ü¸¿¿ÿáq+¢ˆˆˆ1cÆøøǿ̃½›ˆªT©2v́Øo¾ù¦uëÖuêÔINN>uê”F£™3gN±b¦nsF“o[iödGñŒc̃NâXyœ ‚ Rñ:Ăñêd¥¢ÄQ˜ë̃¥K—>ø@˜Ưlº~ưúyxxüúë¯aaa^^^ÁÁÁ£GÖ­È“›Aƒ¹»»oذáèÑ£®®®-Z´1b„ïNYHŸ8bÄQ}4’á7S뢢ÄÑÁÁáùóç³fͲ±‘øz»víÚµk—Û»mÛ¶mÛ¶m–ƒ;wîܹ3ï^”¦̉¦ÂÎÆ­jk0b-[ö:¾}›Ê•“¸ü÷éư?éO]ü”º’+ï+qÔmíèè(yÖ¦Ơ3½v£jéGß<> oáº^n¯^b¼aƒôåO¤‰B<Ÿæs¼Rù¨(EëÓ§ƯÍ›77lØ ÇĂ`ÖØ™ª’¬ÅĂnT-}â9ªÏs%v—û¥/¿95b$`©Tt«ºV­Z'Nœ3gΜ9s¾ưöÛâÅ‹gYIQG7¬ ;¥Z’Ä‘q”₫V5ä¨~}q¬O»Åz»qƒwW˜'%ׯ__µj•.NHHHÀø 0ØÄQ̣[Ơ… IÑD|cóUùƒ;q‚câ(“ :Huq"%bÓj°<*ºU½zơjaƯD€,ØmćÉ̃ôÙ[Ở@☯:uÄXñ¥‰¨{w1N–aq'ö1Çy4Où ›FOŸ>­ 4hĐºuk —ă ùêß́ˆ£4p«Ú ï:HD={̉–-¯ăiĐ ‰Ëg—₫CsfÓlå¯@V*Jmmm‰ÈÙÙyíÚµvv*j¨ÁSz*m̉'q4Ç6mÄxĂéG‹§¢[Ơµk×&"///d €´4©KDâhéÿ sô¨,Å6¤†BœI™|¯@r*JGéêêzưúơˆˆ̃mợ ̃MÈnUÑx/Ä hïæHLEc{ .,Q¢ÄÓ§OX­Z5OOÏ—ăY±bï–O’¬Å# Œ8êĂÛ›nƯâX‹ô×_2–ß‘: ñBZÈN—°*JĂĂĂ…øŸ₫ùçŸx·Ô"É&Iˆ%Y‹‡åé)QAHơQ¿>ßıbE1qüí7úè#ë¥XW ƯªÈÍùBç…X̣GiVÿ&₫í™v)Ç”¯Ÿ½c±y³,UT¡*Ê_€2T4â8tèP̃M•ÚZt«K8J³ß è‰ƯuđÇiÊ…ëg§̃íØ!Kăi|?ê§‹C)t Tø䣢ÄqÔ¨Q¼›*•®Ibgr–¶p$b×—c nèK}…Äq-@â–DE‰#+**êßÿ}úôé‡~X¸pᤤ$gg‰Ó0# ^”¶À‡ÅX²[Ơ ‚Åø̀.M¨PA†}ƒrMÑ\®@&ª{Æq×®]AAAíÛ·9räôéÓăăă—-[¦Ơjy·øx`'ñĂṕêßqäæÍfQ ëÑCŒeƒgK¶\. @nêJçÍ›7eÊ”û÷ïg9œœ¼bÅ™3g̣n XvÀ ‰#7±|&³‰£LócæÓ|!₫™~ær™rPQâxụ̀åuëÖébƯöƒ:Âj[¶l9uêïfOR ä́Û'Æ%Jđ¾*P–ŸŸÿô“,UŒ¥±Bü }Ăû$£¢ÄqơêƠZ­ÖÆÆæóÏ??Ă<üä́́¼lٲ… Ñúơëy7xªCuL/„ˆle½‘èä¤Hg˜-GG̃-Ư¹#K±7/8BGx_%€dT”8^½z•ˆÚ¶mlooϾƠªU«fÍѵk×x7x’*q”w jLäÊ[i₫@y*JăââˆÈÛÛ;Çw}||ˆ(–ÓCQÀQE ±T‰ă¿ÿÊÙbŒ8æM‰ă§Ÿqjª,UŒ¡1B|‚Nđ¾bi¨(qôóó#¢ŸbÔjµ'O$¢ X:Åúœ&qî­T‰ăíÛr¶‰c̃ØÄñüy.M`çÇL$Kx̀,’ÇêƠ«ÑñăÇG©;x÷îƯC‡ >\—8V­Z•w3AilâXªñnp«:olâÈiE¶mÅX¦yJSi!̃NÛ¹\&€äT´ø AƒÂÂÂbccĂĂĂĂĂĂuûơë'œàää„m ­›8Œ8æ]éôi áÛœ¿₫â[?€9Qш£»»û¢E‹ÜÜÜr|×ÉÉi₫üù%K–äƯLPGKÆiÄQŸĐ'B|’Ṇn€T”8Qƒ öíÛ7xđ`ÿ"E‘ƒƒCƠªUCBB₫úë¯æÍ›ón pJ̣L^ ""OO Å­jưqÚuˆjÖ”½VÔJˆq·,ƒnUë8::3f̀˜1D”˜˜è¨¦%ßẠ̀ä2‰ß4q4ƯºÑ… ¯ă3g¨vmé«èK}ûÑë‡m–Đ’…´÷E˜J]#Y k–'I?{ö̀и¸¸đm3đ"ƠZ<,YFq«:_åË˼–¦^MlƯJ ÈRKªc~éäsâX¿~}C?eèGÀ|½¤—B,U☠ƒ8²…bÄ1_uêpOY÷îÉỤ(Ơ“zêâ5´f â}­&Qơ­j9Vÿf3ÉF‘8„]ÊÑđÛf$˜‚…x -áƯS!qU“#qd7ª–,q|₫\Œq«:_*Xœˆ>₫XŒ33e¯î]ău¥RQˬjFS±bÅZµjƠ¨Q£hÑ¢¼›jÁ&%¨„$e²‰#nUó‘%q|ï=.­èÖ¶¿Y$gëÖ·6°–9%P‚éå¨ZG­VưóÏ?WªTéw̃©U«V@@@yYf½‚Ùcb{«ÚNª¿H ÂỆq́ØQŒ·l‘+qM£¿¤/uñ:Đœ°-˜1Ήă®]».¼ñï¿ÿQffæơëׯ_¿¾uëV"rqq©U«–.‰¬Q£†nUp°rÜƯcG%³w¯ÛÚÊ×!è·ßx·€ˆh÷n¹JfÇÔă=à}­Æăœ8V«V­Zµj=zô ¢çÏŸ_¼xQÈ#Ÿ?NDÏ=ûûï¿ÿ₫ûo"²µµơññùM?fÀ|É2×ß_ŒeÙÆr¥§ón¼\ÉUˆ̉C̃Í0‰ZnU‘³³s“&M4i¢{yûöí .œ?₫Â… ×®]KOOÏÈȸv O—ƒ©dqLÀClfÉLJnÜàƯó¡̃YƠE‹uttttt,R¤Hx78«FƠ¤*êÅ ÚÇΪ}h4¼[@ôö₫1W®ÈUKwê.Ä÷H¶E#ä§¢Ç̀̀̀7nœ={öüùóçλ}ûvös0WÆjɱmŒ”0âh¨:uèÔ)̃ îƯiÖ¬×ñÖ­ôå—²Ô2Fo¡-º›V€Yăœ8&$$è̉ÄsçÎ]¼x1)))Ë … ®^½zÀ®®®FƠfé?úOˆkSm̃ÍÉGC©#q¬REŒåKëQ=!FâfsâX¯^=­V›å`‰%̃y瀀€*UªØI¶b ˜9Vÿf.,]Y¸Um¨Ú̀oÑÑT©ï)ô°ceđ¾PăqÎÉ„¬Q·¸nXÑËËK£ÑQbbâ©lc 6äÛfPŒÜ‰£dÛÆF —e p$̣^.Ơ‘cQR…©e0OX|ÇyŸÅ»± ö­ ßU)Ÿ˜Eâh¨5Åøôé·f©(«];úưwÙkM£…}«×ĐA4ˆ×ơ˜B½³ªä¡‘rÄ·ªMÁoóz{bơ/¿ÈUKê!ÄKh Çë0GP¯X•µ|ܪV Ơ$[·*Q£û!(ƒó­êỰíóvÛܪV‹lË)(ɆùơyûvÚ¶M®\Èå=ăx¥¦ăœ8úøøđî0E2‹H58Î&R8&&*Ú#`†>£Ï>§Ïuñ^ÚÛZón€Áp«̀@W5¤*ƯoËÉsæáÁ»¯ÙÚ*QËX+Ä‹hï‹0G0Ơ_V—ª(vıX1̃fåê¨e7 Ï>cùVs,BE„x?íç}ÑÆ@â*uÎ ±„‰#;✱‰cZdžôg<ÓæÍ vHA¥ÎĐ!–éV5p–e p~j0ß/YÇÁ4Xˆ/̉E— `$ Ŕ"eÓÊJUlL ï ›89c|9’–±pö1Çoè̃× `0$ R2­₫}ÿ>ï AÉ’b̀uÄQ1>$®#±Öón€Á8'))))))éééD”‘‘qëÖ­[¸•D$ÿ¶1r)Tˆw ̀ïısg1Î̀äÛơâœ86jÔ¨V­Z›6m"¢GµnƯºuk¬mæ̀Ù™w ̀ÓåË|ëgçÇüô“Œy’§?¦Ç|¯ÀPœụ̀%íÛ·¯|ụ̀/^¼Đ}úäñ‘¨¨(¾m…ÙÉó-­PAæ"q4{÷ÊXxj"Ä hG0/œoU7kÖŒw€Úu¢Nr[±¢<ÍÅ­jƒøûón€óˆăĉí́́9«ƠjSRRˆ¨H‘"& æí=âúT_*äJ1âhúơ¹?Ư(¨U‹ÎŸW¢¢ÆÔ8’"uq¥ ¼/@_œÇ¢E‹Î˜1Cß¿?((ˆˆÎ;Ç»[€³tBˆëQ=©ƠjÅ·ªU¡~}úá‡×ñÍ›²¥óz)UJL¡wß•«¢ñ4^H̉ÂÉ4™ăUDEë8.\ø½÷̃{ï½÷x7øcG GõcܪV…z̀o'N_¾ÿ^Œ7n”±¢öÔ^ˆĐ¾W `%nnn+V¬X±b…îeffæ“'O222x· 88I'…XÂý¶1¸U­ µj‰ñÉ“F#‰%ÄxĂ…*}JOù^5€A8ߪÎ.))iơêƠÿư÷íÛ·_¾|Y @̣åË7mÚtèĐ¡¼[ aG%Ä8âVµêđqd¥¤È[¾?ù_&µ<Ü  ?8Ñ©S§̃ÿưĐĐĐëׯë–xLKK»qăÆÚµk[·n}F5»Ù‚Ü^Đ 9eÇ¢Eåi:nUM‰£§§éeè¥95â•´’÷uèKE‰cbbâøñăcccs|÷É“'ăÆKJJâƯL0ć­j)½|)Æq4;w‰“=ÅøÆ +ZFË„x>Íç}ƯúRQâúàÁ"ruu;v́Ï?ÿ|äÈ‘_~ùeܸq...Dtÿ₫ưï¾ûw3AQ^ä%a툣”?c$æŒM{̀ñƯá}ƯúRÑ3/^$"{{û 6øúú꺻»W­Z500°k×®)))X©ÇÚH»ˆ£\‰cB‚ăVµ¡||äÜ3Db¼q#Í%c]©âM’é 8^¿~ˆêƠ«'dŸFö´́óG|÷.ïÖF£PEh€Ï£y¼¯@/*JưüüˆèÔ©S—.]ỆÖåË—;FD>>>¼› ²“iơo±Ï8âVµ¡ØÄ‘÷RDÔ«—?{¦P¥1$Ó¼-‰©(q  ¢—/_öéÓgé̉¥gΜ¹sçΙ3g–.]Ú»wïÔÔTá°llâè@rTáê*iqq4…6¡·çÇ $o]e©,ïË0Œ&Ç 0à÷ß¿sçNbbâÊ•+W®̀º¶Y™2eÈ»™ ;öVµL$^ư›MíTôwÊü¨ qlÑBŒ££å­k"MFĂtñ2Z6’F̣¾z€|¨hÄÑ̃̃₫›o¾)UªTï–,Ỵ›o¾±··çƯL],Å^H̃$̃o½U ¦PÁ­jÖÙ³̣–?”† ñrZÎûṛ§¢Ä‘ˆªW¯6räÈ5j-Z”ˆ-Z£F#F́Ù³§»T†v́ØÑµk×€€€wß}wÊ”)OŸ°?́ưû÷k×®=~üx̃Ư’‘8qdGÁ©©¼[ÀÍ RËDyPƯmµÂ… 6lذaD”˜˜(É₫Ô‹/^½zµƒƒCƯºuoß¾½k×®7nlذAŸñK­V;qâÄÄÄD̃cÜÈMẨâăÅXÆ[Ơ`₫:u¢Ÿ~¿zE ÊXWY*‹ÀÀŒ¨kÄ1 I²Æ¨¨¨ĐĐPOOϽ{÷††††‡‡÷êƠëâÅ‹ .ÔçăëÖ­;©²ÛgÖC¾Ơ¿q«Z]ʪkHŸ>b¼n¼uM¡)BJ¡¼/ ªN%±}ûö̀̀̀Ñ£G/^\wd̉¤IÎÎÎ{ö́Ñ­ ™‡7n,^¼¸råʼ/Â<¡'B,mâÈnT[ƠêR_]‹.µk'Ær'ƒHœ¹=—æ̣¾t€|X~âxêÔ)›ÀÀ@ር­mÓ¦MăââÎæùè{zzú„ \]]'MÄû"¬Èº Ä娜„%³#p!q4Qé̉b|ÿ>ïÖ¼åØ1åêºM2oV`2 OµZmtt´››››Û[OËév5¼›ç6ß~ûíƠ«W¿úê+'¬̀§ £tTˆ;RG K–k£j­j“uí*ÆJfjêàCØ×̀†ê&ÇH+999##ĂÅÅ%Ëqggg"g§K¼íüùóß}÷]ppp£F._¾lh½º]pX{÷îåƯæá¯Ñ›9Kñ·âă)ˆîƯ»gzÉW®xÖÅ·nƯ’°Íeâă…¿H̉–,IúSJ%Jx¿ ŸïÙÿÎ;¼DAAÑÅúü™̉¥Lđ˜ ‹gÄÍèĐ›÷Ơ«‚ê¾¥fưi¢Ö­[ón‚ZXx☒’BDYwÑM»yË@QJJÊ„ Ê”)óÙgŸWoTTïK7Wçé¼{{{çç¿ÿÄØổ̃’œ,WɲQm;/_vVAÛ†¥ƒ_LJy÷Ö#—3ºKÇÓø ô:q\\lñŒb3x_½Z¨ö[j¦ĐŸ¦È₫c=û‘•Pé­ê¨¨¨đđđ­[·&&&¦§§?7öV ‹‹‹F£If~®ëè–×qÎe[áùóçß»wï믿ÆzăÊK ¹̀óÁÓàVµ„çƯ"¢.]ÄXîù1,ù¾ÿ’PƯˆă®]»–/_~ÿỊ́5rrr êÛ·ïˆ#4a—ggḉ́œ=ïLHH "a5ëäÉ“[¶l:thÍ5yw˜‰ôt̃-ưư·́UÔ¤́´0ƠR׈ă¼yó¦L™r?Û´Êäää+V̀œ9Óˆ2===ăâẫ÷ª{hÉÓÓ3ûù7nÜ ¢•+Wú½Ñ©S'"úßÿ₫ççç÷á‡̣î$k!í”j5ûœ>âÙ4›wsr¥¢Äṇ̃åËë̃ܲµµ £Œ[¶l9uꔡŶhÑ"##ăđáĂ­VáêêưüråÊ}đ¶ÆQÉ’%?øàƒ¦M›̣î'kшñn(È„ Eẻ¦ruu¦ÎB<‹fñ¾t€\©èVơêƠ«µZ­ÍÔ©S;wî\«V-ƯqggçeË–M˜0!55uưúơuëÖ5¨Ø®]»®^½zụ̀åÍ5Ó͉ )P €îœ¤¤¤Ç(P té̉7Öe‚Ë—/GFFÖ©SgÁ‚¼;ÉÂưKÿ ±|‰£Ä«ƒ$5¢‹y7â-ưûÓ=¯ăµk©…ê}E¯x_:@®T4âxơêU"jÛ¶mppp–Y)­ZµjÖ¬]»vÍĐbK–,9~üø˜˜˜öíÛOŸ>½OŸ>‹/ö÷÷0`€pNDDDëÖ­̀»¬»ˆcCj(S-¾¾¼¯²kÄüpAOûuiíZÙ«kNÍ…8âx_=@ÎT”8ÆÅÅQîëøøøQll¬%÷ë×oáÂ…̃̃̃aaañññÁÁÁ6lȾ¸#pÇ&µ©¶Lµø`¹ejÈüpô¨ñåÈCUÉÙÇq·TKE·ªưüüÎ;—ăSŒZ­öäÉ“DT¡Bă o×®];vÚ·µmÛ¶mÛ¶¹½ëïïu•qŒäúù̀Nˆ£Uª$ÆG̉!¼¤´@ ⥴t -áƯ"€¨hızơêDtüøñ‘#GFFFễ½{÷Đ¡CÇ×%U«VåƯLÑY:kz!9º~]ŒeLsY £];uă”̃­P%ƒ rww'¢đđđ₫oDïׯ߀öïßODNNNC‡åƯL0K %ØÖ\2n+nvBŒ9–¦̉B|•®̣¾z€¨(qtww_´h‘››[ï:99ÍŸ?¿dÉ’¼› f‰MËÉ·@$GËÂ>À¢@âNáB<ƒfđ¾z€¨(q$¢ ́Û·ođàÁ₫₫₫E!"‡ªU«†„„üơ×_Í›77¹0uɰE—̣Å&2­jS)»y9^ö*ª’ø(ÎvÚÎûr ¢É1:cÆŒ3f %&&êV^k#ù" %q4E£F´?ïF@^Ô5â(ˆ ß½{wbbbzzzöͦẠ́œ¤“B,ù"HÍ»”cRïÖ¼,ÆÉ^Ư Ä{h %ÈBu‰ă®]»‚‚‚Ú·o?räÈéÓ§ÇÇÇ'&&.[¶L«ỢnȈ]ÄQ̣Ç/¹ܪ6…*—r4HŒCCe¯}´9€ ©+qœ7õ”)Sîß¿Ÿåxrṛ+fΜɻ £­´UˆËP̃Í1 FMQ­ÿôïÖ¼Æî?ºf́ƠÙ“¸i; *J/_¾¼nƯ:]lkk+×h4º`Ë–-9.–Ư¨Ú\!q4Eiq1º}›wkrđßJÔRœó¾P€\©(q\½zµV«µ±±ùüóÏÏœ9#wvv^¶lYáÂ…‰hưúơ¼› ryḌ?AFäå%gé¸U-•Çy·@¤đî¤chŒ¯ ¼¯à-*J¯^½JDmÛ¶ ¶··gßjƠªU³f͈èÚµk¼› æM̃ư1â(•ôt̃- (ÆçÎÉ^Ư$$ÄÓhï«x‹Ǹ¸8"̣ööÎñ]"åƯL]Y*+_á̉'́”$–Háù1¬gôŒ÷Ơ¼EE‰£ŸŸåø£V«ƠíU]¡B̃ÍÙ5¡&̉˜–&Æ̉' bŒ[Ơ&ªU‹w rÀ₫«£Àü"jFÍ„ø1=æƯ"%Ơ«W'¢ăÇ9222RwđîƯ»‡>|¸.q¬Zµª)U€j±;óJ8Ê»Q5›8bÄÑDM›̣nA>”YlÍâÏés̃ RQâ8hĐ www" ïß¿¿î`¿~ư °ÿ~"rrr:t(ïf‚,“8ẦGܪ–Pæ₫Íoj đo¬́_PRöî8@T”8º»»/Z´ÈÍÍ-ÇwœœæÏŸ_²dĨÍYD’˜%°;öJB¹Gܪ6›8ªibµŸŸÿ₫;ïÖđ£¢Ä‘ˆ4h°oß¾Áƒûûû)R„ˆªV­̣×_5õœwA.́ˆ£änÜcÉ¿̣¸U-!OO1VSâ¸U\œV®T¢Æ4Bˆ÷¶đµ°ăƯ€¬ÇŒ3f̀"JLLtttäƯ"P‚¬«Ë»Q5›8:8ÈY“•QSâX° ïƯ«D³hÖ·ô­.îA=”Yå _*J—.]ª :uêT¦L"BÖ’7qdŸq %&̣nOÎ$>ö€‰Ơ *JwíÚơèÑ#" Ô%`…<ÈC̣2É:XĂ8‚åêĐ~ươuœ ÄS e῭]ºËûº̃¢¢g;wî¬ îÜ¹Ă»-ÀäSªe‡ÄQZ•+ónAÎØ”ỳq.Íâ/éK̃@¤ªÄqøđá;v$¢Ơ«W?~Œ[3V„}ÀÑüGܪ–V•~Z¶ăU«”¨1˜‚…x:MçƯDªºU=räH"*Q¢Dttôûï¿_¥JWWWF“å´+Vđn)HLÖEY..2Gi5iBß}÷:>s†j׿Ư à¦X-%ºU¾uRRRÎ=Ë»E vÇÚ$c¢ ư"„ÄQj́æ1‡©*qtu¥§O­±;ußB[tñ:#ëß}¨èV5X-YqdÉ’8âVµ´Ê•c5­ÈCo?æx́˜5²9N¦É¼;@M#ØNĐj±UË*)I†BÏŸW¦ñÖH˜Æ¬C‡̉œ9¯ăà`ºySöËSy!̃Gûxw€ÇQ£FñnX ¨(1îÖM† œœ(6–÷UZ(­–w ̃Âîx£P¥ödŸB)¼/à5ܪq%WÉ˼ʌfV•xl""—¯C–̉R!Góx7¬F…c̣V¼xq??¿jƠªdw‹DA’—yåË’8ffÊ×!VªJ•·̣}5yÿ}úóÏ×ñË—T΅5 i .L“'Ñ$̃}VME‰ăJCƠơññùæ›o|e™́ºFׄXîÄÑ#́f!(Hµ‰ăÈ‘bâ¸lÏ»AÊ2פ7nÜèÙ³g¢uïfk̉A!–;qóÄ| ₫₫›wḳ̃Ábüí· UÚƒzñ1Rd:7@.T”88°M›6º¸X±b}ôÑàÁƒ»téRºtiƯÁúơë0 C‡DốÙ³ơë×ón5˜MưÉ_̣̣‘86q>ˆ́́́zơêEDçÎÓ}¤cǼ[ &‰ !6ûÄ#b'V?y»5Y‹±b{'qÑÈm´w€•RQâX®\¹U«V/ó3à ˜1cFƯºu…#µk×nÛ¶-ïVƒIä^Ä‘Ư¨º¼w‘8J*0PŒƠ·"ÏØ±b¼x±B•²‹̣Œ¥±&”`<%D°ÿ₫É“'תUËÙÙ™ˆ *T±bÅîƯ»ÿùçŸ]»vƠV½zơáÇÿđĂØuĐܱ‰c1’₫V¯́û ²p«ZBM›±úÇ€1^¾œCîÓ}̃}VJEÏ8ê*T¨OŸ>}úô!¢ÄÄDF“åœY³fñn&Hăɻآ‰#Fe¢¾Ä‘—Ôâ/úKÿEµ ¼[VG]#‚¨¨¨đđđƯ»w'%%¥§§?₫œw‹À,ɾQuF†cÄQ&́ªÁ‰²ßY ¢AB¼ˆñî°Fªqܵk×̣åËïß}#¦Q£FNNNAAA}ûö1bDöÑG€<Ⱦß`|¼cÄÑŒ+®M₫Í7Ô¥‹•v¥®B¼‡öđî°Fêqœ7õ”)S„¬Qœœ¼bÅ™3g̣n ÈE]ª‰èêU™Û'ÆH¥åäÄ»yùè#1Vl~ • ¼/¬ÇË—/¯[·NÛÚÚ Ç…QÆ-[¶œ:uw3A2·é¶÷ rT!ûFỚˆ#nUK«}{̃-Đ׃ÊƠÅn!3Fó¾t°:*JW¯^­Ơjmll>ÿüó3gÎÇ—-[¦Û½zưúơ¼› ’ù“Ä~ß§÷y7Ç(¸U-Ÿ–-ÅøèQ̃­É'}Ø»ƠKi)ï>«£¢ÄñêƠ«DÔ¶mÛàà`{{{ö­V­Z5kÖŒˆ®]»Æ»™ ™}´OˆkSmYëb†°%…[ỢaÇ}ûŒ/G6K™´íçŸ/À|¨(qŒ‹‹#"ooïßơññ!¢ØØX̃Íɰ‰£ÜäZư›q,TH±Ë± ^^büçŸÆ—#›¡CÅxÍgÅêM³…x àƯ `]T”8úùùQO1jµÚ“'OQ… x7$óŒ)V—\‹8²# ŨªfƯ¸¡ÜfSiª¯¥µ¼/¬‹ÇêƠ«ÑñăÇG©;x÷îƯC‡ >\—8V•}g°Lr}qØG°>Ü'DiIË»Àº¨(q4h»»;…‡‡÷ïß_w°_¿~ Ø¿?999 eo¥¨Oơå(–} ‰£Y*Z”w ̣1a‚ÿü³rơ¤BüưÆ»À¨(qtww_´h‘[.3 œœœæÏŸ_²dĨÍi<¡'BÜ’ZPR®”Øo·ªeƠR–/†„Æă¯¿V®̃•´Rˆ‡~å¨(q$¢ ́Û·ođàÁ₫₫₫E!"‡ªU«†„„üơ×_Í›7çƯ@Œkñ¬¶RåỆ\FeÅ&çÏónMØ­¬NœP®^[— ¸O÷M( À0ªÛrĐÑÑq̀˜1cÆŒ!¢ÄÄDGG,ra™Ø)ƠM¨‰U¸º±\Ëñ q”U–yjƠâƯ *$ÿ:ó9iGí~§ßuñ :!ÓóY¨kÄ1 dLµx.\ÿ2p«ZV+±*Wä!¢#Äø÷ß•«—½[=ˆñî°*qLII9sæ̀Å‹Ÿ|XѪëPÓtZß >äĂ»3Ạ̀ñ¿U}₫üù–-[Î;7>—ÇÅRRR¶lÙ̉¶mÛóª|:LTªón¨˜ ÿ£̣ÅkÏ vơovùp₫G9>>~À€>(P dÉ’U«V-Y²dØ3øôéS¾ I<¦ÇB,ÓZ<¬²ey_0í}YfÜKkÊ1₫MÁEkP !₫›₫æƯ `8'7nLHHĐÅ-[¶Ü¸qă¥K—<øË/¿ĂOX‘äÅ9q̀ÈÈ "{{û|ÏÔí@¨; _lâèç'}Åñ¾bàiđàçB¼v­ î;úNˆûR_̃=Î –º &ÓfƒDtñ¢²W‚Gù˜[RÎ>&¡v«÷ÿÑÿx_=X8U,₫̣åËcÇå}NJJ ïf‚4n¸£K[j+S-J́7ÈBâ(Ÿ¶miăF̃È_Ù²ôæ™m¥U¢JÑ­‹Ñ#ỌäƯ`±T‘8ÆÆÆöéÓ‡w+@!́̀ùGfmPE˜Û¨˜9aÇ}û¨¥́ gútêßÿu¼d ­\Ơ?̉Âà}_ê«Àä3°Z¸U Jcç~²+›7Œ8ʧ-óÛ…ZWä!¢~ưÄxæLE«nL…xíáƯ`É8‚̉öÑ>̃MFåăä$Æ*NYÏ) `˜û2¡IDAT]cª"ÄÂÖ’ă|«z÷îƯ¼{,œ¿¿lE''‹1F•qư:ïä¥Q#:zôuüâ-ª\Ơ“ir/ꥋÇÓøƒtwg€eâœ8úøøđîà¦()ñsUÆEăâĉ#MŸNovH¥™3iáBåªîI=…ÄûV€|p«¸‘ofLR’˸mL<³Ø2nU˪Z5ÓËPÀûâÂ8´h‘̉µ7 B|Îóî °LÖ’8îØ±£k×®ï¾ûî”)S>}÷ù)))ëÖ­ûđĂkƠªƠ¤I“₫ưû9r„÷EX‚7ÿ/qdqT(qĈ£¬Øù1±±¼[£R›h“S0ïæ€e²ÄqñâÅÓ¦M»yófƯºuwíÚ5pàÀ<†LOOïÓ§ÏW_}ơøñㆠVªTéĉưúơ[±bïK1{i¢+³ˆ#nU[‚>ăÉ“y·&/ÁLÂvZÙ9*©¢_¦Ë¼{,“å'QQQ¡¡¡{÷î ïƠ«×Å‹æ₫üÑöíÛÏŸ?_»v툈ˆU«Vưøă¿ụ̈‹‹‹Ë+®^½Êû‚̀ÛSÇzƯÉ]¦ZØÄ±dIÙ.#iÚTŒÙ|]}fÏăiÓ”®½µâ´“wg€²üÄqûöí™™™£G.^¼¸îȤI“œ÷́Ù“™™™ăGöîƯKDS§N6ÑöññáVµ‰k^Æ~±éYxâ¨Ơj£££ƯÜÜÜ̃¾“èëëK¹gkÖ¬Ùºuk–ƒ—/_&¢2eÊđ¾& Ṇ̃n‚É8*‰]\ƯØ»Ơ¡¡J×>Œ† ñjZÍ»3À̉¨b¯jù$''gdd¸¸¸d9î́́LDñ¹üà¯Zµj–#Ç -T¨P‡ô©×ÏÏ/ËƯío+w½àu*ơ:nßäÖó[z~đ̃½{Vå-D·né[‹¡<ï̃†–ä«E†÷'ï½çøóϺøÖÍ›d£®_zÙ.íĐÆ}ư œ<9£eË;J¶ä3úl…÷ëi|ChH«[­L+sü–ªúÓD­[·æƯµ°đÄQ7uÚÁÁ!ËqGGG"z₫üy¾%dddl̃¼ù믿ÎÈÈX´h‘»»^ó9¢¢¢x_ºm¦ÍBÜÏ­Ÿ·›·₫Ÿơö6àd§§‘ÔKjª‰ÍăÈ́LÁÁô&qô¾p:uâƯ ¬ŕ̉øx[¾]m~Đ–̉xB"ûớ#DVB]¿µKÎÅÅE£Ñ$³[ĂQbb"½ẁÉ'Úµk7gÎww÷µk×¶m+×̣1VâWúUˆưH‰¿ruêÈY:nU+‰́W÷üzû¾úưûJ×¾”– ñXË»3À¢Xxâhggḉ́œ}d1!!ˆ„yÖÙ½zơjΜ9½{÷¾ÿ₫ˆ#ö́ÙÓ¨Q#̃WcöÎĐjaÆ©n]9k¬j%i4büÛo¼[“öÉ” ”®}$âÅ´˜wg€E±đÄ‘ˆ<==ăâât™¢@÷D§§gÉ̀̀ǘ³Ï6lØĐ¢E‹?ÿüsøđáº< ~§N‰1F-ÓÛU¨!3ơkófăË1†Ä<;đEÉX~âØ¢E‹ŒŒŒĂ‡ G´ZmDD„««k@@@Ù¸qăŸ₫ùé§Ÿ®X±"QI0Z5’qëa6q”wÄñƠ+9K‡lØAGÈÓ_ô—w¤¼›–ẶÇ®]»ÚØØ,_¾\÷\#…††ÆÆÆvîܹ@º#III·nỬM:Ójµ›6m*Z´èĉ®²»M·…¸u¯"vŸ7¤ưE¿5 Tbî\1₫₫{¥k¢ !>D‡xwX ŸUMD%K–?~üüùóÛ·oߤI“Û·o?~ÜßßÀ€Â9cÆŒñññÙ½{÷“'OîܹcooߣǴ¥úØ1˜ƯŒôÆÎŒùˆ>’¯"vÄ,J‡ôË/¯ă}û¨eK̃ ÊËäÉ4eÊëx Qº­©ơ^zư¬e…É·5<XËO‰¨_¿~¿₫úkXX˜——WppđèÑ£u+̣d§wLIIù矲¿‹)2FcÇ:$ă³‡ÑѼ/d’ebµºGÖÓ§¦—a°_è{zưpvGêø’^̣î°­ê÷ï2;~~~XÇ1;öi}-ö­»uë–₫+±ÂÉûíV®&‰ÔŸê"ô¹­-¥§ón(Ç.mƯZÜ®úÏ?9$º¦ü¥ăÎŒ¿¥ª„₫”œƠ₫¬·ügdW¨ïXŸŒ ̃-Èó8 -æ±*û¤ăR|Y °DHAiÊ,ưMDï¼£Ô%•,©TM`N:wă={84àâ´€w€%@âJ¸FׄøúD™Jå]‹‡…ÄQ1]ºđna¸Ïë/A%„ø™Óê NHA Ûh›LËW;3F̃Ơ¿Y^^JƠdơ>f¾<;ẉnM₫–›ÿÑøñđư!ÄĐ¼û̀GPÂvÚ.Ä₫ä/_É"q´@]»ñ¶mÆ—£”nƯÄxáB x‡Ä'6®̉Ũưf‰#(á ]Q¦"vÇ5•º<$\˜Ăˆ£„¸†äRZjBIHÁ²(·ú÷óçbŒ[Ơ»©SÅxĐ  ø¾âÑ4w€yCâz̃“µ|öVµ¼îßcŒ8*ÉÜz{öl1̃¼™O P!¥XÎ=æ ‰#ÈníbYgÆQJRWơà›[*c̃Øù1ÿưÇ»5†IJâSï~Ú/Ärỵ̈– ‰#È£ØZ<²cGq«ZIŸ0_¡íÛ/GA={ñ̃½Đ” ñºÀ»?ÀŒ!qÙ±kñ8‘“2•ÚÈưƠfGWWe. ˆˆ4cs˜XMD«V‰ñ!|Ú0ˆÄç+?¤9÷˜-$ »ôBùJÙM;dÁ̃ª^NœàƯ½88ˆñ¿ỵ̈iĂjZ-Ä́âAâÊ)L…e-?&FŒ7–ùbØG€ü´n-ÆgÎđiƒ¹ 1»™€₫8‚¼Óc!¦`YëŒă&Md¾0Œ8rԨ[Ư¾=Ÿ6¦ĂB̀>ơ ?$ ¯ ´Aˆ{Q/Yë:,₫X¤€™/ #ơb¾Haa¼[£—̣åŘ×w§*Uâ'ô„o‡€™BậZOë…¸ É; È&²CâÈQï̃b¼~½ñå(«aC1¾|™OæÓ|!₫”>åÜ#`†8‚¼₫¡«+*JÁ SnÅHȦ0󰬙¬ÈCD?₫(Æ}ụ̂iĂ Ä[h ç3„Ä@ ~~b¬Ü̃˜Ù¸‹³7ôÄdô^ qg’{‘£#ï+¹U©Â»Æ`çl]à´÷Sz*Ä}¨ß³ƒÄdÄÎŒéM½M(É0²O©îØÇåƯ}©án5½½0Ö ºÁ³GÀÜ q±‰c;j'k]Åeä_Ä‘ǻ¬`eđ;±zĂăËQVÅb|î·fœ¤“B\êñ́07HAF́ºqrStG6ªæ‚ívó™XMD..b|äŸ6T§êBüŒqí03HÁB°kñ(:âX²$ïK·z©©¼[`€«WŸ{wnÍèA=„8ˆ‚xö˜$ „ÔBî*ØGFÁkCâÈ‹yơ–(!ÆwïrkÆ&Ú$ÄÓß;̀ GËOô“{“·ÜƠ>Íé:Í3}±eËñùó¼[cöù̀-üÖRCc„x áÙ#`>8‚\VÓj!₫¾ăƯÙ`Ä‘—Í›ÅxơjăËQûLæ§üvoù†¾böo+@8‚\”œ£4v 7G^Ø)ÊkÖđnYjCm„x1-æƯ0HÁ̉(13†Ư¨·ªÁpS§ñœ9ÜFaB<–Ǽ̣0HAq'ÄƯ¨›ÜƠ±#€•+ËylâˆGjÔàƯ#Í-ÆÓ¦ñlIMª)Äi#Ϧ€9@â²`™Dƒä®îĐ!1îÚU₫Ë{đ@Œ‘8r4x°ỵ̈ ïÖÆÎNŒ9.(tÎ q/êe|A`8‚,ØÄ1å®nï^1~ÿ}ù/q´·—¿>È›8Ơü"úơW1îĐgKJQ)!Ksy6T‰#ÈâƯS²ºđpe/qØ;ÿü“wk óÁb¬ôøm×éºO¥©&”–‰#ÈË•\¨å¢iêÛ#Æ bvlY¸[3P‘‚TPx¹Ÿöó́P7$ ½Ó$.Æ=˜›P’Z!qT>ă¤$̃­1 {·zÊ-yLâü²–Ô’gS@Ư8‚ôØmpNkÖ4½ =àVµz°9rÜûÙ(NNbœ–Ƴ%Îä\” /1è¹Aẩc™*KeM(I/OŸq«V\!FƠ£uk1>uwk ¶d‰÷ëdz%wIÜ9ƒ$`öØ)Ơl!£̀L̃ 9yøw 6j”ÿø#Ï–8“³†ÄÉF¿̉¯<[j…Ä$K±BÜÚ)P#;#•mÖ‚Ư{Đ Ơ©#ÆđlI:¥ qGêȳ) VHAb‹h‘FŸ)P#ߥL€¿qăÄxẴ­1»P‹<[bC6~ä'¼\E«x¶T ‰#Hl!‰Ë4£f Ôh†÷'AŔü˜E‹Œ/‡W%V¬̉×5º&ÄCi(ïæ€ê q‰±w»,_ñâ¼[o»x‘w ŒÁ>Ư¨Đsº¹cß›@8·T‰#È¥>ƠW¸ÆÚµ¿HlT­E‹^G}úˆ1÷G/₫¦¿…x-àÜP$ ¥Å´Xˆ•yÀñ±¸n1¡//Å«„œ°9²Ó́ÍGp°ư5çÆŒ¤‘BŒ¥y€…Ĥ4ƒfqWêª@¿ư&Æ -âȈ£J|Æü–®pc>6nă‰97f)-b,,$ ¥JP¸Æ;ĸIÅ/øÚ5ÓË 88ˆñơëÆ—ĂûkÈ¡Cœ³Ö ±9_X$ ™L—Å®NƠ•©tß>ůóÖ-1l‰;q›);;̃-0ƠÑ£bÜL‰ ̣̉›z q2%¦Ăœê€Ä$ó}!Ä_̉—¼›#›+WĸjŨ­7fÎăÍ›y·Æåʽơ’ûÆ–è‘7¥¦œ[ê€Ä$3‡æqê pí¥K+UÓåËbŒÄQ=¦Lă/¾0¾®ØAÇê Úçª8 áåûô>ç€ q3v÷®̣‰Rµ²#… óîÈIL ï©aC1çƯ¢³tVˆ÷‘̣Ï…€ê qi\!1êB]”©tûv1₫øcÅ.ơée€,üưÅX«åƯ#±›&²Ä »‰¨#9̣np†Ä¤ÁåÇmÛĸ^=¥.•½U ª̣%óÅ3Û»Ơ={±~IKc…8‰’¾&̃‹LWHA»h—W¡*ÊTzêKMNæQ+è¡S'1=›wkŒ÷ư÷b\£ïÖ½¢WB<‘x/2 \!qP—₫ưÅø̉%̃­!*@ÊRYá%;c¬ GÀrZ.Äư¨Ỵ̈ hĐ€w€J4o.ÆưÅ»5Æ[³FŒ¹O¯&¢Ût[ˆÏÓù£tÔ„ÂÀŒ!q Œ B¼–Ö*Sé±cb¬Ü”j–f.@»ÄG&høp̃­1̃ÀbüÏ?”‘Á»ADè¿Kị̈nđÄ̀Ÿ)Ơ,,â¨B..blæB₫ú«;ª`6s *щħH+Sẽ-8‚©₫Gÿâ4Đ„’ óí·b̀ṇ«$êÄîY~ăïÖï£Ä85U³ùÙ9pQµ…¶đn( ‰#˜j8‰7Ù‡åÆçæ;ˆ…[Ơê´œùóƯj"úç1®VwkˆˆHK♟̉§¼›JC⦺Kâ₫-¨€̣ (^\Áʰߠú± Øüù'ïÖ˜$Ëï&ß}Ç»ADD4—æ ±†4¼›Bâ&ÙJ[…¸µR¬̃}̀æg#G*xÁ́̀qT­råÄøéS̃­1 »Î@åÉËdlOöÂËvÔw‹@9HÁ$“h’O¦ÉƠ»l™sKAµúöăîƯy·ÆT=zˆ±JnX'“¸ ₫nÚ½‰6ñn(‰#˜„]Ư­5S¬̃Ư»Å¸hQ/X 3 _Ó§‹qx8ïÖ˜j“•]¾L))¼DDD/é¥÷¤&”æ‰#ï;¹ ¡̃ÍQFÍEăÆb|ø0ï֘ꫯĸH̃­!"¢‚T°7ơ^âaG+ÄŒÇ.¾Ă&‘r{øPŒ•^ÁQ 1ƒ>Ø•À;wæƯSMDeʈ/GæƯ ""ZG뺓ø$rGk€Ä̀·ÁŒ°“íŸ<áƯ ܹ#ÆK—̣nÍ?ÑONä$¼Äªà‰#©‰O鯤•JVÍ.ưư.¯Ï æT1èư­¢S'ăËQÍ›ÅX£Ñ½çô\ˆ£(ª"UäƯ"G0̉e§‰ ¡!JV˜Èûâ ‹8v\î—_x·FŸ~úÖ¬ê÷̃ăƯ 7ØUÁc(făƯ" G0ÆjZ-Ä-©¥’UÇÆq¡Büº‰£Y([VŒäƯ \º$Æư¥¢)ăl)¹ª+( ‰#ƒbü“ƯœcèP1Vú§fZcơo³pîœ7oλ5̉`GÜ[·æƯ›;₫Iv£n¼[̉Câ;JG…Ø“<®}Ç1n¦Ü‘DôöZ<q4 nno½Œ‹ăƯ 88Pp°øR=;̉Û¹ă6Ú@¼[Câ{—Ä )çèœ %™¤X1Å«d· Fâh.Ø;Ô%Jđn46n¤O>_ª6w}Ê»Eü}JŸ qCjX„Ô±÷™̣¼gSƠªơÖ“ đnd²́d¤¶Ü±,‰³Ú 4¤¹G÷x· L‚Ä1g‹/6mÚÍ›7ëÖ­ëèè¸k×®¦¤¤đng[h‹³Sd”Ñ ³›Ç(äÇÅxÊūӰË8M˜À»5R̉¾5´G íÜÉ»MoܦÛư¨{¤ •q$5ƯV!q̀ATTThh¨§§ç̃½{CCCĂĂĂ{ơêuñâÅ… ̣nÓCî3i¦̣ 8qBŒÙ‡2w®®ü僩>ÇËƠ54g2­–Ä—]»r]âômkim–“(IC̣àƯ40Çlß¾=33sôèÑÅßlw;ỉ$ggç={ödff̣nlÖØ‚Z|A_(Ü€råĘûSNt4ZA:›7¿µ¸em™˜HvvâËW¯H£¡̉¥y7‹ˆˆªP-i}É—=K±̉hH³¶ón ‰cN:eccÈLÆ´µµmÚ´i\\ÜÙ³gy·NiÓiz–5öÓ~…Û0sf±;wÄ—}úpí‘̣å¹V&¸}[Œ_¾$†V¯6¾4•IK£¯¿~ëÈÿ‘FC MLññœ›EQóh^öăŸĐ'º ²µ;@8·̣¥…·effV©R¥Q£FY¯Y³Æ××÷çŸη̉’%ÿÇ»{©ç„†̣₫’*&&†w¸â₫%–ó¿[Tẉûò7Ü›€ÿrüoéε¼ÿr___̃MàĂÎÔÄÓâ$''gdd¸¸¸d9î́́LDñÜmçK£å[ÿPZÙ8ïÎ{ë½÷èÖ-¾m0ѽ{Ö=³5&Æ»B̃KyúWKoiÄHR~™~¡Åc¨÷zZׇwSà-Ïß2óÜäÓZUû{r…Ä1+ƯÔiöQs""rtt$¢çÏŸón 'kÑ`Î7ơVа¡¤üªßŒ:xĐÛÛ›o?HÂ2®ÂxZ-µkG»wón‡\FĐ·#èÛ©o?úw[r±¾7­ïMDôKGêđ+ïÖ‘³“³µÿË»¨¨¨,Güüüx7$Y¹¸¸h4äää,Çé͸c̃́₫-MDé¥ÚƯ+‘Y$Ơ&¹0e¸=·wÖ|ưVáW6©‰(Ăư©m¬ë[oL³yU€ˆ̉‹ÇÛ=vcß̉HפÙQºgœƯ£b́[d›I6D”îơÄîÇ[oÙe¥—zd÷Ÿç[o½ÁÔFD—…œ¿ö́‡¥í̃£ổv¤÷²{LDZæ½ô¥íê₫ÿ0Ư½„],¥kmí4́[Ó‹·‹#¢WÚ5í[±®î¶O‰(5³`a›Ẃ[q.ÅlŸÑ"Ÿµu;I÷îQẹ́tï•.MOŸ’«+QR98¼>¨ûÿ³g¤0NL$GÇ·̃JHx½Û†.`ßzñ‚%¢×gß̉UADîî˜"c9~ÿˆhƠ*>ươŸ¯îKÅ₫ѧ¤½=Q\+öÖ[©©¯§×ÄÆ’»»ö̃=đÖ«WT° ÑăÇT¼ø[ŸJO=‡åáC*Qâ­·22ÈÖ–ˆèẠ̣́zë-­öơ4đÿ₫£R¥̃zKÀÔFÔ7ó¯¾6̃tï̃!÷N ơL)́z(¥nÉ×mmß₫Kú(½˜§]¥ií h̉ß₫ûëVÜ. üûŸá́fûœˆ’3 ±yɾơ4ĂÉƠ6ˆ’2íº~{/}Gi»‡÷ª=r®wàé¤ÿó̀(ñ$Ă>Ơ&Í–ưw)Ă)É6ÁˆtÁ[ÿf:¦Ø$ÚQ†Ë ÛgEßz+„í_Ú¤"¢ŒbÏlă\̃z«Đ+›—‰(Ăă©í“,ÿ>§Û¼Êùa­]†&Ư–ˆ̉KÄÚ=tûßg-ehˆ(½äc»ûÅßzKC¤%Êíßg ‘öíŸK>¶»_œˆte¾ơV‰'v=ˆHk—©I·yë-Ï8»GňH[0]óÊî­·<âí¸‘cA{̃-Á h´ZÎ7U¨~ưú <|ø0{đ»ï¾[¸páÂ… Ûµk—÷Çưüü²ÿj¦¸uë~–úSrèRÉ¡K¥…₫”œƠ₫¬Ç¬êxzzÆÅÅ%$$°uO~xzẓnHsĐ¢E‹ŒŒ vÄQ«ƠFDD¸ººđnHsеkW›åË—ëk$¢ĐĐĐØØØÎ;(P€wëøÀ䘔,YrüøñóçÏoß¾}“&Mnß¾}üøqÿđn7HsÖ¯_?_ư5,,̀ËË+88xôèѺy¬Ç\µk×.ß ÔÖÏ8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8€^8‚hƯº5ï&Xô§äĐ¥’C—J ư RAâzAâzAâzAâzAâzÑhµZ̃m°4~~~¼›̣âƯ8€^p«ô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚Äô‚ÄôbÇ»–cÇÛ·o.R¤H³fÍÆïêêÊ»Qf£K—.—.]ÊrĐƯƯưÈ‘#́tr̃bbbÚ´i³}ûö5kfWŸ̃Cg‘G—âKk”””mÛ¶íܹó̃½{E‹ơơơíׯ߻ロå4|Kơ¤Oâ+jgÏ-Y²äôéÓ÷îƯóđđ¨V­Úˆ#*T¨å4|E‘8JcñâÅ«W¯vpp¨[·îíÛ·wíÚuăÆ 6ØÛÛóny¸sç½½}ụ̀åÙƒ...́Ktr¾6nܘÛ[úôz8»<º_Zư¥§§÷éÓçüùóÎÎÎ 6LMM=qâDddäÈ‘#‡ fPw¡KơïO|Eơ—đá‡>ỵÄÇÇ'((èÁƒaaa₫ùç¶mÛªU«fPwY~—jÁd×®]«\¹r“&M=z¤;2{öl__ß/¿ü’wÓ̀ĂóçÏ}}}G•Ç9èä<<₫üÔ©S_|ñ…¯¯¯¯¯ïùó糜 OYùv)¾´Ù¼y³¯¯o÷îƯ“““uG®_¿^¯^½*Uª\¹rEÿîB—êèÓŸøDwáß|ópd×®]¾¾¾Ÿ|̣‰AƯe ]g%°}ûö̀̀̀Ñ£G/^\wd̉¤IÎÎÎ{ö́É̀̀äƯ:3pçÎ"Ệkqèä<´k×®G[·nÍí}z=̀Ê·Kñ¥5È̃½{‰hêԩ ‹ÏàÁƒ322„Û¦ø–JÛŸø䨱cöööC† têÔ©D‰—/_ÎÈÈĐ¿»¬¡K‘8JàÔ©S666Â[[Û¦M›ÆÅÅ={–wë̀ÀíÛ·‰¨\¹ryœƒNÎĂœ9sV®\¹råÊFåx‚>½‡fåÛ¥ø̉äÖ­[₫₫₫́A"º{÷®î%¾¥úÓ§?ñ5ˆ‹‹KóæÍ .̀,T¨Đ«W¯^½z¥{‰¯¨q4•V«vssssscûúúÑƯ»wëÔ©Ă»j§ûîÁƒ½zơºzơj‘"EªV­:xđ`a::9o7Ö̀₫®>½‡Î"ï.%|i ´fÍ;»¬?n._¾LDeÊ”!|K ”o¾¢Ú´iS–#§NºsçN­ZµtĂºø 0âhªää䌌Œ,‘³³3ÅÇÇón Đư¼té̉Ç7lØĐƯƯưàÁƒƯ»wß¾}»ît²)ôé=ô°¡đ¥5HƠªUu?;Ç -T¨P‡ßRåÛŸ„¯¨±Î;7mÚ´=zôîƯ»lÙ²óçÏ×ÇWT€GS¥¤¤‘ƒƒC–ăDôüùs̃ 4<°··;vl¯^½tG=:xđà¹sç6nܸdÉ’èdSèÓ{èaCáKk´ŒŒŒÍ›7ươ׋-rww'|KMc¾¢ÆÚ¹s§V«%"ÿ‚ êă+*Àˆ£©\\\4Mrrr–㉉‰ôæ÷ ÈÛºuëΟ?/üëFD5êÙ³gJJÊ₫ưû l}z=l(|isâĉvíÚÍ™3ÇƯƯ}íÚµmÛ¶ƠÇ·Ô8¹ơ'á+j¬nƯº]½z522râĉáááƯ»w×u¾¢$¦²³³svvÎ₫›DBB óªÀPơêƠ#¢ëׯ:Ù4úôzXø̉æáƠ«Wsæ̀éƯ»÷ưû÷GŒ±gÏvâ¾¥†Ê»?sƒ¯¨>4‡‡G¿~ư>ù䓇†‡‡¾¢ $đôôŒ‹‹Ó}3·nỬ½Å»uj§Ơj322²¯S`kkKDE‹Ơ½D'›BŸ̃Cë_ZCeff~öÙgÿoï^c¢:Ú8€ÏruQ(TZ(ˆ(¬@¨nUXyEYî(¤´ˆE¼5ÖÚbÛX±U/¦P. m ±¶XZ*ˆ n¨‘†‹b7H!º.bW l÷ư0éd³ x¹¨ưÿ>Í9gö̀œÇódæ̀p̣äIÿ²²²>ø@w3d¼¥Ü=1xEơ"“ÉöíÛWZZªu®[¿{÷.=Ä+J!q₫₫₫*•ªººQ«ƠUUU–––"‘hª{÷¬koowssÛ¸q£Öùºº:BˆP(¤‡̣Óà=D˜;¼´úúöÛoËÊÊÖ­[—‘‘1̉¸ ̃RîO¼¢z?₫øcaa¡Öyºæœ9sè!^Q ‰ă8ˆ200HOO§ß1B²³³ Edd¤±±ñT÷îYçèè¸hÑ¢ÚÚÚ‚‚v²®®.''ÇÖÖ688˜AŸ—è!ÂÜá¥Ơ‹Z­>uêỒ™3÷îƯ;J5¼¥q‰'^Q½ØØØ… v²¹¹ù»ï¾›1cÆ’%K¸‡ë¿R]:O)'''))ÉÎÎÎÇǧ½½]*•º¹¹åääè.Ë]ÍÍÍ[·nU(îîîNNN¿ÿ₫»™™YFF†X,fƠä'úä“O ̣óóÙVm —è!ºF )^Zîär¹ŸÏŸ;w®îƠ·̃z+&&†{¸RñÄ+ª—úúúuëÖ D¢×^{M.—_½z•’œœ¦W¸^ø&&&Nu^"‘ÈÑÑñîƯ»555FFF¡¡¡III`ªûơ|°¶¶ïééùă?MMM}}}SSS]]]5«!ÈOTQQqưúơ¨¨¨W^yEë—è!ºF )^Zîñ¼YXX844$ÎüùóÙª¼¥ăO¼¢z±±±YµjƠưû÷ÛÛÛëëëyqâÄ̉¥Kơ × RŒ8'øÆ8A✠qN8'H€$À Gà‰#p‚Ä8A✠qN8€̣̣̣̃¶lÙâăăăáá´mÛ¶œœœ₫₫~î79}ú´P( …‘‘‘“Ös™L&üו+W¦ vĂ©¬¬<₫üùóçïß¿?RÂÂBÚm777¥R©[A"‘Đ ÉÉÉÜ›NMM¥¿zÿư÷§: đ@âúijj ILL¼té’\.hoo¯ªªJJJ ºpáÂTwđù¿cÇ;vܼys¤:†††„•Jué̉%­«---]]]´:Ơ/,$ ‡ÖÖÖ˜˜˜ÎÎNv†f3ÔƯ»wwíÚƠÜǛåVÓ§O·³³³³³›5kÖT?ÖsÀÜÜ|é̉¥´\UU¥uơâÅ‹´`ggçáá1Ơ€GĐCRR̉ăÇi922²¸¸¸¡¡¡¦¦æÈ‘#Ó§O'„ôơơíÚµ‹Ë­ÂĂĂ+*****²²²¾c₫ùçÀÀÀ”Äd̉fC‰/^T«Ơ—ª««µêL$ÀƠåË—+++iyÛ¶mG?¾¡¡áË/¿¼zơê'NĐK­­­mmm´¬ù J¥JMM]¾|yjj*áÇ¡¡¡¼¼¼èèèeË–-\¸0,,́£>̉ÂÔ¼§B¡øđĂ½¼¼üưư½½½³³³Çđ\7T*•Ç‹ŒŒ‰Do¾ùæ—_~9444†¦Gúv0>>^óKÄăÇ …B–‹oÚ´I(öơơ ÛO6[ƯƯƯƯØØÈÎ÷ơơưöÛo´¼råJv₫Ÿ₫ùå—_6lØ ‘H<<<$Ɇ Μ9£ùD£Gc”3 …âÈ‘#k×®‰DqqqMMMOù¦À3Ëhª;ϼ¼<~üx[[ÛÑ£GÇö€J¥ríÚµ---ô°¹¹¹¹¹ùÆ4ÓЦ¹°°°‹ÅôǪª*6%-•Jé§½½½»»;«_ZZÊ»ºººººjkk+++Ó̉̉Æ¥KR©tÏ= …‚>~ü¸£££¼¼|Ó¦MüñÄ…¦ F€«k×®ÑBPP™™™n…́́́¢¢¢¢¢¢àà`­K£g„¬¬,5N›6Íß߯ , „¨ƠêÇߺuK«¾T*½}û¶••Ơ’%KX Ù¼­¾jkk[ZZlmm,X`jjJO={¶¡¡a‚̃ºukyy9ŸÏ§‡IIIåååÓ¦M©~HH-h.Bb8jÎS—––̉¬‘Çă‰Å∈gggzéܹsR©tl!̉ÔÛÛ»{÷n5Å⸸¸°°0µZ››[XXøôMÀ³#ÀÉĐĐX²··×÷çwîÜ™7õöíÛ^zé¥aë°lfûöílDsË–-—.]R©T—/_vrr̉ú‰D"IKK311‘Ëå±±±­­­„̀̀LŸ±=æ§Ÿ~C¹uëVDDÄßÿMihhĐ]q2.M[XXXXXđxsssvÉn»ºuù… """Ø<µæ²Ö%¥RY]]ƯØØxưúơ†††GcOè +!dëÖ­ĂVhkk … ˜|qNŒ---iYwzøđáƒæ̀™´̀fƠơ¦Œ‡=œĐ¦¹ ¤CztŸí騵Ïààà±cÇÄbq|||NNT*U©Ttj{\ôöö²Åà#ééé™ĐPÀäCâ\‰D"Z¨¬¬vK—//////¶₫% cŒŒŒ8 •J?ÿüóđđp@À.]½zU÷/éuwwkö÷÷³ùt;;» Å6meeEçĐ•Jå•+WèF11ñ§Ÿ~ºvíD"¯ǹ˜1ƒ Bçää”',,lBC“‰#pÅ>eëêê:}ú´ÖƠÊÊJ6ØF¿ĂÓËÀÀ€B¡P(¡¡¡)))R©477—MR³­ ™LFwÿ¡._¾Lç”mmm'4Ü›Öú»̉ZçØ°ÁÅ””úI¥Ö<5!äûï¿§…ƒFGG …BCCĂ;wîpoå‰=Ÿ={6-¨T* æææ@ Œ²<SH€+‰DâííMˇÎÈȸwï!dpp°¸¸˜-ƯupppuuƠ÷æ---ÿûƯÑĐĐĐÛÛ{ơêƠ´‚æ$588xèĐ¡ÁÁABȽ{÷>û́3z̃ÏÏOó!N„'6;€¬¯¯gÛ¡—••ƠÖÖ~[.­BnܸAÏh%=bÓÄ,ÿkjjâ² ÷³—á‡~`Ÿ;wÎÓÓÓËËK"‘Œï'•đ,ÀâĐĂ¾}û¢¢¢úûûƠjuZZZZZ¥¥¥R©T©T´‚©©iZZỤ́6¡Phmm­P(T*Utt´D"177ḯ́¬¨¨ uUVVæçç7wî܆†:Yl``°sçÎIÅèM³¸ûûû#""\]]{zzØj-€~/˜™™)“É6nÜhd4ÚÎÖÖÖ‹/f™œ““Û£‘233333£÷Ü¿II Ç«®®ưoÆèÛówß}7??_©T₫ú믱±±2™Œ}s¹yóf¶º^q=¸¸¸äææj®îééaY£Ư_|1†áFBˆAFFÜT(_ưuii)ơôô|çw´~²dÉ[[[¹\~åʺÑ]r&tQ3ǦƯƯƯW­ZEË}}}×®]kmmµ··g£tZw£…ºººääd.ă›éÎSóx<___ÖzEEÅùóçmll¼¼¼èI:T<,î=IIIt$¸¶¶6==ưܹstÇŸèè踸¸‰₫W€É‡ÄôóÆo”••%$$xzzZYY™˜˜̀™3ÇÏÏ/!!á́Ù³+V¬ó.\X^^¾cÇY³f ‚E‹9rääÉ“lµ5cnn——·fÍGGGkkëààào¾ùfíÚµ“.M'''ï̃½ÛÅÅ…Ï绹¹ÅÆÆæç绺ö{wÏƯ=—ùæî­V """"¢”؉®Y&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDdѰB^^^¢«@DDDiëúơ뢫 Ç4a›?LjæååÅ7Emø¦¨ß⛢B6{“ˆª‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ LÉ&ܹ́StHßuâû¢B|SH=˜8‘A˜8‘A˜8‘A˜8‘A˜8‘A˜8‘A˜8‘A˜8‘ADW€ˆˆ̉–———è*©Ươë×EWÁ20q$"²~üP$J¿\ª‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆˆÈ L‰ˆˆ+_¾¼F£Ñh4mÚ´]«2`ÀƯ ›?~Ñu±L‰ˆˆÄ+Y²dPPаaĂt‹/_¾́ß¿œœœjƠªuâĉ¤vŒrppĐÄ—#G¤Ê_¼xñ‹/¾È•+—““SÅgΜ-m5ü¼‰2j÷ưû÷×­[7gΜŸ|̣I56mÚ”LáØØØyóæ•-[ÖÉÉ©D‰Ó§OJñ¼_~ùePPP•*Ủ₫ ´œ«ˆˆH<.]ºèâW¯^U¬Xñ₫ưûíÛ·wwwß°aCăÆ÷ïß_¾|ù„;†„„ÄÄÄT«V­H‘"̉J''§DÏrçÎ:uêÄÄÄ´iÓ¦@{÷î1bÄ¡C‡tI›QçMȨƯ·oß̃¬Y³"EtíÚ5K–,6lhÛ¶íâÅ‹ưüümÙ²åöíÛ[·nƯ¤I“£G3æúơëK—.M₫¼¾¾¾¾¾¾[·n}đàèwØZhÉÜ/.º ¤ïÎ;¢«@úø¦¤Ëư£>çzÿ₫}LLŒ¨+-W®\:u¤Å‰'X¾|¹nñöíÛ®®®uëÖMtßmÛ¶Ø»w¯!'jƠª•Ư©S§¤5½zơ°sçNcÏ›Q»ûøøäÊ•ëÅ‹ºÅˆˆˆ äË—/ÑÂË–-(­ùüóÏܸqĂóv́Ø1©#ë˜đ;b¹¿V©ÄÄÑülö‡I͘£¨ß”tcq” *4lذ¹sç:99ÙÙÙ•.]z̀˜1ïß¿— üúë¯eÊ”É5«›››¯¯oPP̃¾§OŸöñññññ1¤¼¿¿ÿÈ‘#3eÊ”!CƯƯ©¨¨¨±cÇ–(Q"[¶luêÔ¹rå®pddääÉ“K”(‘%K– ôîƯûÑ£Gf¹d½ÄÑËË+wîܱ±±̉???;;»‡&Üwö́Ùî̃½kȉtW¤\sîÜ9'N4ö¼ ¾û»wḯííưüü”+u7\###¹Zµj… J*³Oñ¼L͈m‰ˆHuÖ¯_?dÈZµj3&GÓ¦Mkذ¡V«đƯwß1"GcÆŒ0`Àëׯ»víºeËißĐĐĐF½~ưZײ-Ạ̊AAA+V¬øæ›o&MtçÎöíÛ×®]{ß¾}ưúơëÖ­ÛÁƒ;wî¬+éçç÷í·ßæÏŸĈåË—_¾|yëÖ­Í~í¯^½ºqăFƯºu5´²^½z±±±‰6¼uëV¦L™²e˶~ưúE‹9rälj9::zĐ AƒV®¼wï€L™2{̃ÔTÛ̃̃₫Â… S¦LQÖí̉¥K>>>Y²dÑ+ü₫ưû3gÎÔ¬Y3::úرc{ö́yóæi/¥Û8ÙªÓ§EƯË ÎÎImüßÿ₫÷ă?~ươ׺ÅÑ£GÿüóÏk×®íØ±ăªU«/¾k×.Ư&ww÷;w¶hÑBWxăÆ“&M?~¼€ËGDD\¸p¡D‰FưæÍ›Ó§OgÈÀÅ‹9̣úơk;;»µk×öèÑC÷Ø€ŸŸß_ươèѣܹs›ñ…yüø±V«ơđđP®̀™3'€§OŸ&,ëÖ-;;»bÅ=₫\·¦dÉ’«V­úôÓOơJ:88üôÓOÊ5Ï=ûé§Ÿ́ííÛ·oóySSmooo]¼råÊ[·nmÛ¶íÑ£GüñGÂ#?zôèǦF§?₫Đ(Pà?₫¨^½z*«MÆbâHDd«|}E}çN4j”ÔFww÷¯¾úJZœ8qb@@Àºuë:v́xêÔ©̀™3ë²@ááá"##¥Â¹sç–²F)–÷ơơƠeêÖ­  S§Nº¬@ưúơ9é́́¬Ñh=zï̃½‚ X²dÉ’%KV>::Z×î0Q­ZµJ₫…ÑƠÍ9~Víââ"U^Ï­[·bcc'MÔ¾}û 2üư÷ßÇoƯºơåË—u{%åÀ}ûö½uëV@@€§§ç… Œ:o*«-™/™†‰#©··wÆŒ¥EGGG//¯Û·opss;v́Ø={®]»vóæÍ+W®(G“àåå%e†”www—b]¾˜p €,Y²̀5뫯¾*\¸°··wµjƠ7nܬY3e=ũ¼y“̀#lƯ÷dèÎ₫úơkåÊW¯^È={ẬÈœ9³´©W¯^ï̃½4hІ z÷îè)îß¿?xđà-[¶xzzîƯ»·^½zÆ÷öíÛÅ“—/_̃ A£ª-¹yófddäñăÇưüüªT©¬»_(É–-€¢E‹®Y³F÷j7kÖ́çŸîÖ­Û† 6mjÚyÉ4lăHDDÀÁÁáÇïß¿oÑ¢EÍ5ẃØáééùƠW_ëƯWsuu•bCÊnĐ Awï̃ ôññÙ¾}{Û¶m}||?~¬ẀÅÅ%™¾)ÅĂĂĂÎÎNï1kXX€¼yó&,Ÿ'O½ é³Ï>påÊ•D¿zơể¥KŸ9sfÑ¢EW¯^ƠeÆ×ĂĂ#H¡fÍÆV[)kÖ¬ơëן:uê³gÏ6õœđ\ªW¯®̀Ñ«W¯ 8885ç%đ#‘­º_äÙ“¡ÀƠ«W£¢¢¤»}oß¾ ®S§Î‘#G¶oß>kÖ¬¡C‡J…ơî *[>ááá·nƯ*^¼¸ŸŸŸŸŸ_lĺ‚ † ²páBƯp0Êă§æQµƒƒC©R¥>¬\yèĐ!F#µ ”Ü»woëÖ­ơêƠ+Y²¤´Rw¿-ÑǾ[¶léÖ­Û矾páB½Ç»F×ÉÉIuRbøîÛ¶mkƯºuPPĐ_|!­tssCbwd‹)̣đáCåJ]¦˜/_>£ªMf º[·ÚƯ¾}»xñâçÏŸ7|›í¢¯fùE…ø¦¤‹û£T¨P!Ó¦M“ÖŒ7À²eË–/_`×®]̉¦ơë×èÑ£‡´oëÖ­¥­Æ–?₫<€%K–Hkt=ÿûï¿£Gøæ›o¤M—.]đĂ?èƠÿÅ‹Æ~́ê Ç£agË–-ºÅÇ{xx|öÙg w|üøqæ̀™kÖ¬ùáĂƯ˜˜˜;:88H£IbccK”(Q¨P¡¤FÇ4ü¼©ÜưéÓ§5R¡£ë½~áÂ…„å'MdggwđàAéÛ´icgg§ûtNñ¼ÇŒxÇ1«V­]""›“;wî &;v¬lÙ²Çß³gOƠªU»wï₫àÁGGÇ>}úté̉%õ¼Çß·o_99²cÇ&Mè§nƯºF•OFÅK—.=uêÔ;wî”.]úúơë;v́È={§NôJêU§æ̣{ö́ùÛo¿ué̉eĐ A®®®Ë—/ŒŒœ4i’në´iÓ¦NúÓO?ơïß?gΜ“&M3fŒ§§g“&M\]]wíÚơï¿ÿ₫øă¥J•̉;lppđµk×J–,™pv–¶mÛ¶hÑ"ùó±Úîîîºñ*UªÔ¨Q#F³gÏS§N 6̀ÇÇ'ᑸ~ưú† vé̉%_¾|;v́8sæ̀èѣ˖-›âyÉ̀Dg®*ợåËÓ§Oûí·Å‹çG+À›[*Ä7%ƯXÜ%Ư]ÀƒÖ®]ÛÅÅ¥D‰#G|÷înëÁƒ«U«æääT´hQ??¿§OŸ.Y²$G5̉&¸ƒhlùdî8jµÚĐĐĐ^½z,X0S¦L èܹspp°Y.Yï£V«}ñâEŸ>}<==ƯƯƯ[´hqîÜ9iÓwß}`Ö¬Ỷ 6øúú:99¹»»×«Wolj寿₫J*˜2eJç5„áƠ]±b…¯¯¯›››n®ê5kÖ$säđđđ~ưúy{{;;;W«Ví÷ß7đ¼Z̃q4+6u߬UíÚµÿûï?iqƯºuº¯5†đ̣̣º~ưºè+ xBBB .,ºß”tcq” .\®\9ỨÉ6¢|ụ̀®®®û÷ï]ëÔ©S§#G„††&UÀ„ß‹ûµ2>ªNÜ?üđ₫ư{AAAÇ]""""ñ˜8&®Fº€ßÿȲ}ø€ĐPÜ¿÷oÍ”/çÏñâ…üO1²é́í‘% ²fE–,xô>>pq³³üïùsT¬wwäÈ÷_"Rx̣äÉÚµkóæÍ+}Qê9sæöíÛºiÉ,˜8¦ ///½5;wî])›öàÁÑUH+v¯_gÿùg-éÊ•Œ—.iRgäêƠ4©GL ""·xæL{$ó”:ÖÙ9ªP¡¨Â…uÿ́¢¢"Zµ̉ÚÛ§ÍKHªÓ¤I]Çj›rơêƠ;¶nƯ‰£-]ºtáÂ…̣åË—|Éd¶6nÜXô¥¨Ç4a›íTÎJÓÅÄ`íZlØ«n₫e÷êU¦‹3]¼(­q92^‰̀™‘1#†Gƒ৬ƠY°`è*¤·ÿưWt¬S@@@@@€!%“ÿŒHø±đ‘à̀1D–`çNT¨è̉ź³Fƒ¼{‡W¯0ijÖ„F#ÿËŸÓ¦Ázo0‰Å;Djơᆇi·^råBhÚ ~(€àæ&₫ÂÂđô©î¿oV®t,SÈÿ>|Hí)<Àر;6n1kVtîŒ>}àë+øÚ‰ˆ¬G"ơyùeÊ é‘#d9r ];´k‡ DWÚ3"OäÉ£[zR¹²Aíî̃źuˆˆÀÙ³8{ æNNd$–,Á’%q‹mÚ`́X&‘DD&câH¤&§O§Ö)‚öí1mèÆ‰ÂÇÉ„ÓL¡B=:ñMcï̃¸†<̃´I~Ê?p æÏOÏ×ˆÈ °#‘:ü₫;4$³Æ¡Cñæ ´ZܾÖYăµkèÙ: dÉx­ư—1cr[ @Ë–˜8›7ăÈ‘4¨«‡ºtÁ²e …V÷ïäIøûă“ORØwÁ‚¸Z˜¦¯'‘5áG"pwGxx"ë,À€izæû÷±n6nĉæ?xh(BC±e‹₫ú"EĐ¼9*UÊ’&=Ư}}áë‹Ù³ă/\À¢EH¦[e@@ÜÖöí±~}TˆˆÈzđ#‘PB£I$kÜ»ZmÚe¿ü''h4(X£F¥IÖ˜Œ;w0gºuË%Ư›́ÑǧÍÉÊ–Å‚q7#CC“»¿¸a4”+‡˜˜t}9ˆˆ,çª6?›¿RÍT:-̣˜1˜>=̃\º„üùÓâl§O£W/\¾lʾŸ|Ô­‹¬Y‘5+ă‚³gQ¼¸ÔO:.¸s'Uơ,Q?₫ˆ6m̉â5Pøưwôî÷ï“,p̣¤Ơt£á%¢äq®jĂñQ5‘ ™3ëg-iö-®O¹cq̣||Đ¾=ÚµC©Rf;{L Ö¬ÁíÛØº§O§\₫Ú5´m÷́‰DîÜiđ¢té‚.]à?Đ»7̃½Ó/P¹2üø#¾₫: NODd‘ø¨(ƯƯ¸&^ÖøÅi‘5nÛ÷ 8™¬±n],^,w,¹p&˜3k`o.]đí·8uJ>Ñ‹èÜùu•*)́»|9̣äFƒ̉¥¡˜GƬ:wÆÛ·Đj1~|"[ǃFƒgÏ̉æÜDD†‰#QúúóOèMTúÖ¬1ïI¦N…FƒæÍßZ¨–/Kàö탟Ÿ€—ÁÅS¦„?W‡ñí·È‘#Ẹ́W® lYh4hÔaaiS§É“¡Ơ&>+Ï'ŸÄƯ€$"²mL‰̉Ñ«Wh×.̃­U«ñ ›7C£Iü᪷7îƯƒV‹ôè!ú¥ˆ/wnL„'O Ơ"6Vù%¡Ư»‘#4Ô¬™6UiƯZ-îßGΜñÖŸ:S§~©È:•/_^£Ñh46ĩ¼×¶ 0@÷ÂæO›¶ă6ˆ‰#Q:rq‘ă–-Íûxúúuh4‰÷)™=Z-._F¢_h4øé§¸;‘Ç!W®Ä‹9EàÉ“4¨D₫üxüZ-2e·₫믡ÑàÚ5Ñ/Y¡’%K 6L·ø̣åË₫ưû(PÀÉÉ©V­Z'’û`ÿ₫ưuëÖÍ™3ç'Ÿ|R£FMÉNgñâÅ/¾ø"W®\NNN+Vœ9sftt´´Ơ¨ó&dÔîÉ×DOlĺ¼yóÊ–-ëääT¢D‰éÓ§GEE¥x̃/¿ü2((¨JÍbÈpZ2·âÅ‹‹®é»sçè*hµ€üòóÛÑ1̃áuÿræÔ¾}+úª“fÔ›rㆶR¥D®Qú·qcUtß¾DÎ7w®è×Ïü£¤~åÊ•«S§´ø̣åËbÅ蘱sçÎ₫₫₫ỵäqqq9wî\¢ûnÛ¶ @‘"E†>nܸâÅ‹X¼xq¢…oß¾íææǽ́Ü£G &T­Z@ëÖ­M8oBFí|MôÄÄÄ4kÖLwGv̀˜15jÔĐ«W/ÏÛ±cÇ|ụ̀%Ss~Glö׉£ùÙ́“‰OƯƯåœăÓOÍxà™3ÉjÊ–|¹†0íM9p@›7o’飯oU×ß_ÿd+{ñŒc¹”¢£££££Óç\ïß¿‰‰u¥z‰ăĉ,_¾\·xûömWW׺uë&º¯O®\¹^¼x¡[Œˆˆ(P @RyR«V­́́́N:%­éƠ«€;w{̃„ŒÚ=ùèY¶l€ÀÀ@iÍçŸàƆœ—‰£1q4?›ưaR3Á‰cÇñó)TH?™É˜Q›^Ÿ³©•Ê7凒LçÍK³Jgͪ2K`q” *4lذ¹sç:99ÙÙÙ•.]z̀˜1ïß¿— üúë¯eÊ”É5«›››¯¯oPP̃¾§OŸöñññññ1¤¼¿¿ÿÈ‘#3eÊ”!C__ß­[·FEE;¶D‰Ù²e«S§Î•+Wt…###'O\¢D‰,Y²(P wï̃=2Ë%ë%^^^¹sç•ÖøùùÙÙÙ=|øPoÇwï̃ÙÛÛûùù)Wvé̉@dddÂé®H¹æÜ¹s&NœhÔyeÔîÉ×DOµjƠ *”TfŸây™8Û8¥±¥Kău6S»Æ×¯¡ÑàîƯx+/]Âû÷°·}ÉébÜ8hµ8t(‘MƒC£ÁæÍipÖ7o°{w¼5 ưbX¡ơë×2¤V­Zcƌɑ#Ç´iÓ6l¨Ơj|÷Ưw#FŒÈ‘#ǘ1c đúơë®]»nQLmÚ¨Q£×¯_ëZ¶¥X>((hÅß|óͤI“îܹӾ}ûÚµkïÛ·¯_¿~Ưºu;xđ`çÎu%ưüü¾ưöÛüùó1¢|ụ̀Ë—/oƯºµÙ¯ưƠ«W7nܨ[·®F£‘VÖ«W/666a“A{{û .L™2EZ}é̉%Ÿ,Y²è4hĐàÁƒ•+ïƯ» S¦LF7•ƠN¾&z…ß¿æ̀™5kFGG;v,00pÏ=õ¼1á¼d¢3W+d³ßBÔLØÇ´¸;5y²₫m¯U«Ä\_j˜ñM‰Ơúú&~÷Qñ̀¬ôNÓ§Oz½l¦HêR2mFÓá_b$ă*TÀ?₫(­5j€Ơ«WkµÚ"E/^<**J·éÅ‹Tî;ỉ$éîTå3f̀¬[œ>}:€²eË~øđA·FלîƠ«Wööö={ö”jƠ»wowwwïÆ%OyÇñƆ®,°wï^‹-Jæ +V¬˜0aB… räȱgÏCÎîëëkooăÆ “Ï›Êj'¬‰̃¦Ư»w¯T©’”½(PàÈ‘#—w͈3Ç¥™ààxCiŸ9c–£æÈ¡?!ç Ơhp̣$4lˆ½{ăm̉Íh₫—H«…·7®^[\¼K– 6Vô+a=ÜƯƯ¿úê+iqâĉëÖ­ëØ±ă©S§2gÎ́à÷ù 22R*œ;wîñăÇÛÙÅ=RK±¼¯¯o‰%tqƯºutêÔ)C† º5ơë×?räHdd¤³³³F£9zôè½{÷ ,`É’%K^?::Z×a%Q­ZµJ₫ÚuusvvV®tqq‘*Ÿ”É“'ߺu @Æ u5L̃úöí{ëÖ­€€OOÏ .˜ṽTV;aMô¶¾|ùÀÊ•+Û´i³bÅüùóô27//¯ëׯ‹®Å’~Ï,”Ï•S÷û¥|ă”ºĐé•+˱^W^c´l)Ç™2aơjÑ×e¥´Z*$/₫öªW7Ó¡3dˆ7F¢̃XJ”’&M$́lơ®^½Ú±cG©×6™Å̉¥K;v́xüøqѱlăh~6ÛîAÍ̉©99Z7₫ưw¼[TVü *ª£)S0a‚¼èáÿ₫3Ó¡½¼păF\\·.öíuü£D”<¶q4ï8™‰rêˆU«L>Œ2kŒ}Q6`üx(Ç~üØ|÷•*û÷cĂÑ×JD”ZL‰̀áèQ}z”bVÖ¤Îûå—_UQ²E©¤%s+^¼¸è*¾;wî¤Éqù_úíj%̉êMI3Ê·¬_?ó+íñ’ú•+W®N:̉âË—/‹+–1cÆÎ;ûûûçÉ“ÇÅÅåܹs‰î{ûöm777ggç=zL˜0¡jƠªZ·nmBa£Î›i»Ÿ;wÎÎÎî»ï¾K¦LLLL³fÍtwdÇŒS£F ½zơ2đ¼;v̀—/_2Ç7áwÄf­lơ#+-Ù́“¥I2|¸üÙ?¾Q»fÈ ïºt©èWG‹Kµñó½#GRq •+å98¤uµ-÷Rttttttúœëưû÷111¢®T/qœ8q"€åË—ëoß¾íêêZ·nƯD÷mƠª•Ư©S§¤5½zơ°sçNc ũ„ŒÚ=**j×®]'Ǹ‘#€äÇeË– ”Ö|₫ùçnܸaÈy™8Gó³Ù&5K“ÅÔ›F»wóv£Vk™‰ăÿ™ï½Shï̃4­¶ÅưQ*T¨Đ°aĂæÎëäädggWºté1cƼÿ^*đ믿–)S&kÖ¬nnn¾¾¾AAAzû>}ÚÇÇÇÇÇÇ̣₫₫₫#G̀”)S† |}}·nƯ5v́Ø%JdË–­N:W®\ÑŒŒœÅó2q4#¶q$2Il¬gÉbÔ®Êq _¾}!d x¢R5@ÏóçrœÚV“VhưúơC† ©U«Ö˜1cräÈ1mÚ´† jµZß}÷Ưˆ#räÈ1f̀˜¼~ưºk×®[¶l‘ö mÔ¨Ñëׯu-ÛR,´bÅo¾ùf̉¤IwîÜiß¾}íÚµ÷íÛׯ_¿nƯºT®Ôeụ̀å3öå¢TbG"#)‡0æ¯̉wßÉñºu¢¯°K4Đè₫5Gs²F·pkF9ĂYwœº¨; ³D_Y:Y°ÙÙ²ŸŸIG¹rE9‘̀GOŸ>9s¦´8eÊ”W¯^µiÓæÁƒJ–,)mÚ°aĂ›7o’ºĂglùd\¿~½J•*3f̀Đ-ÚÙÙƠ©SgÙƯ£ê¤r®>}úܽ{wëÖ­ºÅ'Olذ¡aÆ… Ö+©ƠjG?₫U«V¥˜5¦XØđó¦²ÚÆêѣǾ}û:¤[Œ:uª®jÚ—âG"#)‡cQÆÉR>¤>÷ƠFĺ†noñ6-~àÀp đ~‹±‚¯6½z%?j^º³fÁÉÉÈCØÙ!sfyëóçQ®œèË/wîÜ&L8v́XÙ²e?¾gϪU«vï̃ưÁƒ}úôé̉¥K̃¼y?¾oß¾9r9rdÇM4Ñ;NƯºu*ŸŒ+–.]zêÔ©wîÜ)]ºôơë×ẃØ‘={öN:é•Lå£j={öüí·ßºté2hĐ WW×åË—GFFJ“̣M›6mêÔ©?ưôSÿ₫ưƒƒƒ¯]»V²dI¿_\Ú¶mÛ¢E å '^3VÛØdàÀëׯoذa—.]̣åË·cÇ3gÎŒ=ºlÙ²)—̀Lt·n+d³]ôỜœ#¿˜4´Fü>¡=‘W›×qṚkóWÖV®₫›ö·-Ú-ǵÇojo>Ô><®=¾H»hvPMmM­‹á¯ŒÑIÛ7E¨]»Rư₫̃¾¦?"÷G©P¡B­[·>xđ`íÚµ]\\J”(1räÈwï̃é¶©¤7¸V«}ñâEŸ>}<==ƯƯƯ[´h¡œ@ï»ï¾0kÖ,­V›L7í)S¦èÅÂÉœ×V[)ÅáxtÂĂĂûơëçííí́́\­ZµßÿƯÀój9Yi´©ûVD yyy]¿~]t-(³=³PúlدÏ̃½hØ0.Γ'^Ÿ́ô¡…6;²¿À‹¤ ÔC½ÎèÜ]2#³ Ç߃=‹°h#6¦X̣(VC\s¾)¢•*…àุK(ú Lùsơü9Ư;RÏâ₫(.\¸\¹r›6m]‘ôS¾|yWW×ưÑiÎuêÔéÈ‘#¡¡¡I0áwÄâ~­̀…m‰Œñ₫½תeàNRÖÈéEºñ‚—́ÍưᯅV í?ø§7z›–5hˆ†°Aw(-´ßà›¤JVGu 41јĂ[€«Wåø÷ßfü!öî•c¶è'"µbâHdŒ_~‘ăQ£ ÙCïiJ×Í©&jj ¹z뻢«.Ă›Ùiq̃)˜¢;₫ÏH¼ è÷ø^M»<íb“~/GSvµÏ‘Ăøưë×—ăø½GÉF|cÚ5ħüa3e\"¢´ÂÄ‘È0ÊÆµ«FcTqƒ́Æî2{vÿ‚_^⥠—Æ̀®àJÂnp›‚)&O˜V­ä¸S'cöüüs9̃˜̣DDDéÆAtˆ,Ä™3†—>\§O7]V`EOô”ÿÀ`Tb¢v%QR íHŒT>§€ 0Á‚oñ,gX³«W³sẠ̊ÜÉ“¨\9••ṇ̣̃ưz‘5ààæg³ƒ‚ª™—R€,Yi`Y¤Á ß?á§q'-îÇ₫:¨cæs¤ ß{ØÇ"V¹f6´C;ÑƠ7H` úơ‹‹ñ̉đ›ÂÿûŸ}ÚÎήN:̉{{ûZµj…‡‡Ÿ;—ø̀¶¹sç ̀µZí‹/́́́¤T’Hç̃=9®RÅôăxÀCă°è˲*ÊÜñÎå…Co§­̣åă-*'¶LYd¤èꑲ̣ÄQ«Ỡºu+{ö́Ù³gW®/^¼8€ĐĐĐD÷j̃¼yæ̀™øá‡ăÇ¿}ûöáÇ&LxđàA‡œE_‰Đ¶mR[”·~”“¥ ä©fê N Ô}ÁÖF™;>ÄC;uüé –ăd§%J¬Đ¢«OD¶ÈÊïŸEFFÆÄĸººê­wqqAü{J^^^«V­êÙ³gÏ=¥•]»v§lc”,///½5;wîưbØ´»‹ă®]9?ÆOêÔy£œ{PaëÖÂRüÉ'!I”JÎƠŒWïç½/-₫̣[Œ?2áMI;¸S¤p]¬…VÍC¦¡L™È??W¯̃Í’%¹~ôv£F\½ZèÛ÷»v¥E­̉ù}!CđM®qăÆ¢« V8êºN;::ê­wrrđ̣åËD÷zơêƠÔ©Sß¼yăíí]¦L™đđđ#Gl̃¼¹J•* 64ä¼×¯_}餯páÂÆí°¿æ<¦°Ë•ËøS ˆÿ‹M;ˆ…Jç‹Ơå‹̉b‘ÂE„x´c4‰‹[·.tă†¡;f¼y3í^=›ú!´|SÄJø±đ‘°̣ÄÑƠƠU£ÑD&h÷=zôÙ³gÇûå—_êÖ<|ø°cÇÇÿûï¿‹)²Ê.ƠId©ïO=¥¸8—C9Ñ—må´ĐÚÁNÊ3"£Øi •w1 +¶JyxÑ»wQ¨ÀÊ‘ RECŸ´ăàààââ’đÎâ«W¯Hư¬•đ‘â1#ú:mH"¤)­#áSGQ2‡‘#å8åo¦Ÿ*†ÚºU`µ‰È6YâX¿~ư˜˜˜Ă‡åñM´ZíÁƒƯÜÜÊë‡(T¨½½ưÍ›7µÚxŸtí+&ú‚(]<~,ÇIL6¨B~Æ £Ïđ?üï.I‹S1Uô5Û–(DIq8ÂÅÑÓ£‡§<u®\«JD6ÎúÇ:ØÙÙÍ›7O×®@```XXX»ví2dÈ [óæÍ›]·µ,Y²ÔªUë̃½{sæ̀‘F¿yóæ‚ 2f̀X·n]ÑDéBÙÀ1‰ÄqÔ(91Âè3äC>)>ă¢/ØéÑ£́¥”Ζ/—ă”g¢VûäïŸRi""s̉èƯW³J¿ưöÛ´iỌ́æÍ[³fÍ{÷î8q¢T©R¿ưö›4LÏöíÛ‡îéé¹uëVaaaíÛ·ôèQ¡B…J•*~ö́ÙØØØñăÇwé̉%ÅÓyyy±WµÚ„„„×'±fM9'ñ;¢́0ć¯Ñ<̀‚¸jnp{[œ‘Èè7%m(ûYçC¾P„¦â`¦«XgÏÆÅk×&ơmEªt*~øR¢’÷…”ø¦¨Í~Ö[ÿG½zơúå—_ .¼}ûögÏuíÚuåÊ• w”¸»»oß¾½_¿~xđàAíÚµ×­[gHÖHVBÊ“°~½›ĐEAÊØfÖ¨Êûđ >ê ©Æ™3rüÅ¢_"¢$ØÄÇtf³ßBỒèïë)ƯÑñđÀ“'ÉlON4øÿèâ/ñåoøMôË#†ªn¢(ï;öAå¼áé&sf¼_¹‚R¥’.úóÏ=:.₫ơW nÆj¨ê}!¾)*d³Ÿơ*½ăø₫ưû[·n8q"444&&FtuȆU¨èj)k4V¢¤¬€Ífj£¼ï¸‹§aZú×áüy9.W.Ù¢©l`KDd*Ơ ~øđá üûï¿̉­Đ 2Ô«WÏßߟ=)œ;'ljµ5;}Z[¶4îØ‘QÿÆß¢/•dÊyeÆblQmöéY%ä8*Êôă¥uƯq7nœŸŸß¹sç”Đ£¢¢víÚƠ¢E‹5kÖˆ® Ù†”ºT›| Œk^¸páyóæ?₫̀™3çÏŸĐÍÚ$º¦dBB’Ùøúµûø¤x,ÙÈ=µ5Đ@Ñ×I‰(ŒÂ{°GZt…k:W`¢<{9Lºœâ¯7g´"¢ô¢–ÄñÉ“'¯_¿5kÖ•+W6lØ0K–,2gÎ\¯^½•+W:998+ tF$ȤIrlÔ¨)ÅđHôuP’ ÁB,”•®ÓÁwßÉq@@²E«V•ă7ỏ³’Dd³Ô’8æË—O7°¢··wΜ9ơ¶æÈ‘£L™2té#Q:ĩ<á:ǻ‚ƒz$eOềÈ́´ÿ̀¢úUAi1sDzeåøàÁ¤Ë)g'T~¡!"J3jIÔ¬YÀ;w>|ø ·)**êöíÛ|}}M82‘¶l‘có ÄÜ ¤˜·-Âq/‡r̉â'ø$ƯN½w¯×Of<̣ÆåøçŸÓñµ!"Û¥¢Äq́ر ÷÷÷ôH₫d}̣äɈ#TvbH^34“b̃n´,ÊÁ·`ËtLÑ©;¤AæÍ“G}ể¿ÿD¹öí±aC\|ăûr‘ƠSÑ”ƒ^^^&́¥Â lv"53b®d'Li&ÂDl¦¶h«‹s"çc<ưb¨…Í¢¦lăxGª£zzœÔ¶Ë—Q¦L\ܹs̉ ¦,è}±|STÈf?ëUô¨H]ÜǛr)ko7Z,åW5̉ç¤5å^øø;©9†J—–ă?₫HÿW†ˆlULnÈ2¢tñü¹'hà¸k—iĐñÖ@î(?̣Ûñ«eÊ…\°APr™4̣Ï?r[‰V­ ½ĂMD”¦T”8:TtÈæ­]+Ç :¿˜ĐÀ±:Iñ}Ü}ydºvh7 Ăfa–n1rÇ  +7t(fÏ‹÷íC½zÂ^#"²¼ÿA¤ ́S·®̃ÆăÇåØE»£»{ÂSôµQjÍÄ̀,È"-–B©´>ăªUrÜ"©‰Í•_b¾ÿ^Ô‹CD6BđÇvíÚÈ™3g@@€.N‘̃|ÖDæ´¿!¥ lư¸ ̣Ç₫ Ü}md‘ˆ”:Ê#xÆưˆÓît]»¢[·¸xëÖ$ )“.œˆÈ '—/_7o^)&R§¥KåØçÔÇpL]à"ºúd6Êz~ÂO­ÑÚi81AóærÊ„®]+äèÈ)‰(}đQ5Qb”UÄŸAØæ¸Ê[‚,úzÈœB*Å•Q9MÏ¥œÉHºû¨OùUFùx›ˆÈÜßqœ4iGGG)&FyÏ;A—êŒ8̉;¼S.æFnÑ×Fæ”ùæbî Ñ-¦O'k¨¨Ä:ÍŒ…ч%Ÿ4)铈(µ';vL4& éÉ•#¡øø¤|¤ ¨ ÅÛ°Mô…‘ù ÆàÍØü₫Ñ-ºÂơ^¤Ñ¹₫ú ­ZÅÅơëăĐ¡dKß¾-úµ!"kÆGƠDưü³ÇŸÇÈØx”Ϧ›¢©è £4±{¥ø%^¦ƯƯR1EöáĂIâdƒD”.T4£NTTÔíÛ·ïƯ»“h¦Mù1LiăƯ»¤¶(ǶmS8Lt‘âɘ ²^Ê2;°c+¶6Gó´8QÁ‚¸w/.₫ưwté’ Äĉ̣Ú©S1v¬è׆ˆ¬“æªÖjµ+V¬˜1cƇ’)¦₫©!mv₫J53h¦×¤ç6jj弯éÖôÍYÇô»1ˆqP|O»w<åB©Dæ̀xûÖäYÇûbeø¦¨Í~Ö«èQơŸ₫ùÓO?%Ÿ5¥‡"E”K÷¾4k–®¿à)VÎRMÖÊö•_„Iú̃9Q*©(q\¹r¥ÛÛÛçÉ“'obDW“¬”̣ÎgŸ)·ƠÀqFIñFp°z›Đư+¢¢´Xẻâ,¿₫*ÇÇ'VB9×QX˜èW…ˆ¬“Ú8̃»w€½½ư´iÓêׯŸ5kVÑ5"[²g7l¨Ụ̈Ûor\©RrÇØ‡}R\|®dCNă´t¯ñ2.ÏÄ̀áºCê>#FÄųfaæ̀%&N”§>4 sç~UˆÈ ©èc‘"ExyyµhÑ‚Y#¥·Ư»å8~âh¸ú¨/ÅçpNô%QºR¶n¯đẾ§pw—ă'Ol®][çÍưz‘uRQâèëë àơë×¢+B6IyÇ1[6)<&Oˆ~ư’;Às&&F·xñâE)kÔ9uêÔÆEW“¬««Î%¯®R%ñâ;°C«£ºèÚ“ư…¿¤ø.îÎ…y¦V₫L?›̣‹g¬&"³RQâ¸téR]OêƠ«»¹¹íÛ7÷†Ï÷ߟ)S&*ŸĐ™b,_a’Ọ́øËÊéæˆ””ưáèÔSù%ºFøÛ¾øB•_€ˆˆRME‰cpp0€²eË₫öÛoîîî‡Å „6|øđ/¾ø¢^½zñ¼)ºduΕcEâ(Qv6H†Ùç—#k¢l̉RÀæ§â`ñn&öes "J{*J~ÿư÷V¨PÁÛÛ»_¿~ăÆ“¶º»»¯X±"gꦃ#JÎÇ.Ơ)ưƯr³Ç@®7Yåè<ƒ18­NÓO1ư•+¢/ˆ¬„G3f:tèêƠ«ÿüóÏ#F888pvṽ¼yóáÇ˕+'º‚du®^•ă]ªÿùG^—9±›‰k±Vû èk Ë€)Ö U³a}û­Ϙ¡Ø |ŒÍfDd&*Jgª\Ÿ1cÆ’%KÚÙ©¨ªd=”]ªÄ1¡}[ŒƠƯ’)ú£¿ä®~½ĐËäCM$Ç#G*6”(!ÇÊØDD© ¢¹ª7nÜøøñcuêÔÑơ°&JsÊAK–Dügz‰6köR¼œ“Lô₫“î5.Ă²!RåEWˆ(*º×®];]pÿ₫}Ñu!›±G¿Ct Ÿă¹§¾W,Ù²S8%ÅPÁäăụ̈‹Oœ¨Øđ±ơpö"2%ƒnÓ¦ €… >ỵDtuÈ6DEé­P>ÓS>ëÓ™ 9¯z\%­*}‚O¤Å:¨cÚq¾úJ¿ÿ^±£9‘¹it´¨Á Aƒ\¾|ù¿ÿ₫Ë’%KÉ’%ƯÜÜ4ưfăóç§jôtàååuưúuѵ xBBB .œÈå˜V›ØøÅư”}cÉI¾)6FùCu§+¢¢)IêçVÚđÉ' 3äP|_Tˆo Ù́g½Ú8îƯ»Wß¾}{îÜ9Ñ5"[R¯â?ÍS>å#J;÷p¯ âæº¬„J¦}! ”›äØíÅđpÑJDÖ@Eª‰̉ÛƯ»rܰ!Rjàø%¾”âeX&ºöd%  @tË Œ é£jÖ,ÅOOÑ×GDVEEw(º dc”]ª?û ñÇÆơ‹/Çr)kOÖcÖI¬/ặ.́j„FÆ$cÆ3V>̉ŸÖ?₫@ç΢¯•ˆ,›Ç¡C‡®Ùe—ê ́Ó¼„Hq]u²6¯ñ:²éâÆhlÂë•+Ññă”F½{́æ5`€œ8ΜÉÄ‘ˆRI¥ª¯_¿¾k×®5kÖDDDDGG¿|ùRtÈ%‹G’đùrøÆ Ø ºêdmœàÔư¥Å¼Èḱ¾øBû-±gΈ¾J"²xªK7nÜX·nƯ–-[úûûOœ8ñÙ³guêÔ™3gz:€“•ˆÿ…ä÷ßå8aÇs{kq fJ ÊyâáøĂØ#¸»ËñÛ·#=Y""K§®ÄqêÔ©ăÆ{øđ¡̃úÈÈÈùóçORN­EdnÊyb ˆ·i36Kqk´]S²ZÊ'Ô]ĐÅØƯW®”ăâÅ?FʯA¢/‘ˆ,›Ç+W®,_¾\ÛÛÛK륡W¯^}úôiÑƠ$kTµ*’YƒÏ©)Ư|ƒo¤ØÎFíÛ¤‰?xđ1R¶kÔj¥¥ l屮ËhÂd”ŒD̃o†̀Ă<]œùïă¾;ÆÿéNjUâø¾¨ß²ÙÏzƯqtwwŸ1cFö́ÙƯế́Ó»ƒ;Rœ™EW”lÎ\̀•âP„nÁÑ5""[§¢Ä@•*Uö́ÙÓ¿ooï¬Y³ptt,Uª”ŸŸß?ÿüS¯^=Ñ$kñê•7l¨|v§́ˆÚ=¤ø‰®4Ù¢÷x/Å-Ñ̉À½,ă @Ç{‘©Tô¨:¡ˆˆ'''ѵ0Í̃¾V3ư=7¢ưÇÆ‹»wk>“ÇqT₫Bđ9uâÓ7ơAŸ%X¢‹3 Ă|0d/ưGÓ¢N¸åÉ“1~|R;̣}Q!¾)*d³Ÿơêºă(‰‰‰¹ÿ₫•+Wîß¿“úÅÇD‹\ÄE)®ª¢kL¶k1Kq¢öc¿)G©][Ù?†ˆL¥ºÄñÖ­[ƒ *[¶lÆ »wï̃°aĂ²eËúûû‡„„ˆ®Y‘ăÇ]­ülU¼¼œ²ˆDº‹»R\5Ú™6M§O¿íÿ}ADd©Ô•8®Y³¦eË–{÷î›* ¢¢¢víÚƠ¬Y³7® Y‹‹̣ƯÄ¥KåƠÊ1pA=á)ºÆdÓ ¢`k´–ë¢n»Œ-ÇcÆ’èzHDd8%§OŸtèĐÿ₫ûOZÿäÉ“áÇ?~üØÎÎÎÏÏÏØĂ>}ÚÎή4̣-`oo_«V­đđđ¤ºÚ:tH£Ñ´nƯZ¹rúôéׯ_/[¶¬è׉RíĐ!)\¸]~xçë<Æcie6d3ô°Dé¢Ze‡Ü?z"&&Sxöl9î×/~3ÇuëD_ Y‡Ô"5 ¤\tqq°oß¾C‡yzzº»»‡……Ư¼yS×iÆÉÉé·ß~ûÔ˜òZ­öÖ­[Ù³g×›»xñâBCC+V¬˜p¯Ë—/»¹¹åÊ•ë̀™3ÿ₫ûï‹/J”(Ñ A]³K²xÄñÙ3ưâO)î†n¢ëJ”ˆp„KÓ}ï'a’!{EF~~èÓ'nyáB|₫¹èK!" #8qÜ»wo¢ë£££ƒƒƒơV¾zơ*©̣I‰ŒŒŒ‰‰quuƠ[¯ËPŸ%̀€>¼~ưºX±bß}÷ƯêƠ«¥ơùóçŸ5kVé̉¥ 9¯———̃;w¦ưËIIzđà₫÷ß„rå ¹ [¡n̉Dƒ“B&…€#ϧå›BÆúÖùÛï?ù^k ¹’äè<íÛ»oØwă|äÈçrăîưûXï‹ ñM®qăÆ¢« ‚Ç´¦ë:­ë‘­¤›ûåË— wyưú5€[·n=}útÚ´iuêÔy÷îƯ† æÏŸ?tèĐ­[·rßÑ6ç¯T¹„3½„ùäѯ¥ÎÇÄq!ä‘;w]+¢T8ÓR¼Ë-ïiu¿å…ÄF§""JUK}ƯÛ·o߬Y3©wsêơêƠ+G›7õ¾}{îܹ»ví:lØ0ƯˆÓÔ­[÷áǰ³SÑ­PcyyyqGµ ‰ícŸ'â“U«…4¬ €D[‰‘ÙÉo ™ƒbטg6fûĂ_¯@–,x÷..Ö*~àÿS€ï‹ ñMQ!›ư¬WQ~¦›ÚÉÉÉ¢³F²ÿƒÜÆ«GTˆH5¢!ù0‰Œt¦|Z=SD×—ˆ,’R´={:88ܾ}{åÊ•ê¹JV©äÉ$û÷Çïø]Z‚!¢kGd¢Ñ-Å…PHokï̃rü¾]Y"²H*zT `åÊ•?üđggçœ9sꤨ³uëVÑƠLÍ̃¾V³¸=/_êæÉÈ‹ÿ=DƯ&­p”fäsêtçoiAÙèâ8WA•x[•¨¥’[¶ ysi=ß⛢B6ûY¯¢Î17nÜĐů^½Jf(G"}ÂNÊu”óSY´xùtqUTƠû"4a&O‹£O]Ÿ°¥K•‰#Q2Tô¨záÂ…Ï8«¥©cñHœ± ›¤Å^è%ºD©’yk †´ØƯ•[¿ÿ^ăc›ÇÍ›E׈,†î8ù8NJ•*U7nlÆáxˆâ: %¥~~苾̉¢rP" u‡¥Ö«°j%V&Ź2®)Y%ööö\\\–.]êà ¢‘ơ8yÀøI+z÷Ư“íÔtÈdÉ ëØ½;V~̀$wă³Ï°[te‰È’¨èc̣ÓO?;wnf”¦–Bî\ú ”ü©ÙEWÈ<ô~˜•·̉ăM!#=­^·Nt•‰È2¨(qô÷÷wss»qăÆÁƒE×…¬ÙK¸HqÈ3Ọ95Yå]Fe{ŒlÙä27ñq6¬%KD×—ˆ,ƒîíựË/¹råz₫üyß¾}K—.íáá‘èp<óçÏ]S²¹să>îK‹NpJÅÁˆTg n¨r(wçuqíÚ¾_‡—®cÏÑ•%"Ë ¢Äq×®]R|ụ̀åË—/‹®Y—ˆgPQZÑḥ‘åă–h)º~Df¶ ¤Äñ.\Çu/x˜7eÊÄ•Œy{ĐPtM‰Èb¨èQ5QÚ:|ñ{Æî.?§D èú™ßeÈßÀK „.(]Z.° Dבˆ,‰î88PtȪ:„ø‰ăí פØ¢ëGd~̃đ.̉Rú8Cgc6€B…p÷n\™Ș°l¾üRt}‰HíT”8:TtȪ: öq‹ÎI[đ¦ Y¯K¸$ ë8st‰ăرèß?®ÀP̀À,]ÊÄ‘ˆR¤̉GƠׯ_ßµk×5k"""¢££_¾|)ºFdùS.eZ!÷3åsj²ns0G³"+€~ưä­ Ñ]M"²ªK7nÜX·nƯ–-[úûûOœ8ñÙ³guêÔ™3gV«MưñÉ–@)~_ú¬FaÑU#JCC0Dßâí6l]#"²TêJ§N:nܸ‡ê­ŒŒœ?₫¤I“DW,›<ôwẳʪ¨*º^Diî-̃Jqs40}º¼u6†À»w¢«IDj§¢ÄñÊ•+Ë—/ןéu¤ÑW¯^}úôiÑƠ$ „®qÑØ©̉JûM¶ 32ẹ̈EÖh=j”¼ufÀ̉¥¢«IDj§¢ÄqáÂ…Z­ÖÎÎn„ gÏÊ]\\æ̀™“9sf+V¬]M²H½[)µåÙ‰¼á-ºvDéa ¶Hñ_ø+Ñú%8 ¥DE‰cpp0€¦M›víÚ5K–,ÊM5ª]»6€k×®™vp²q™O’> —Bid;"[°›¥82ôê%oÚ…F8^t‰HíT”8†‡‡(\8ñn ÂÂÂDW“,RæÓ§·¡YÜÂyÄPi^ "[Đ ­2 ƒ´Xfüó?³E׈,€G///‰¶bÔjµ§NP¤HÑƠ$‹”ùÔ)yèïÏ×Iëë(úYÙ‚ø ÅĂ3É_¢®Ă =]A"R5%eÊ”pâÄ ÿ#GèV†††:thđàÁºÄ±T©R¢«I)óéÓ›ÑZoevd]/"BÎ3ưWPï¡ ›9Q̣4ê1,,¬U«VÉ<Œvvv₫믿̣äÉ#º¦)đ̣̣º~ưºèZP|Z˜;ƒçéÖ­ÅÚÏñ¹èÙ®¤¦PZ“æ’€¢·q§€VøksñÑ!;ẉ}Q₫²¨Í~֫裻»ûŒ3²gOü&³³ó´iÓÔŸ5’Ú}̀0k$›µ«å…ÛEuÿÿ ­pă†èª‘ª©(qP¥J•={öôïßßÛÛ;kÖ¬K•*åçç÷Ï?ÿÔ«WOtÉR­cH¤ĐăM˜4e¼è‘ep]}NNNÇ>|8€ˆˆ'''Ñ5"Ë÷áC\ϘñS¤uÊÙ{‰lĐÜ‘Xóƒî·c,¦zô|*JDIP×G=̀É<Úƒ†0y‚´N9{/‘mŒẸ́Âỵ̈˜†1ÙÖ­3ù€Ddơßq|ñâ…±»¸ºº­3YÇ¢+A¤:ă1~>~›ÊóUNàD•lk×bÖ,ÑU#"•œ8V®\ÙØ]l³¥Ê¡CĐ7PZ1lÑEđ ̣Å-¯ vƠ{®©–ªU™Å²ƒE `€´&̃:"–y+Cñ>°/§!¢d0q$ë·DÛ́bEW„HNà„¼Đgñ+8ƒvˆ( jéU­Ñh-Z®\9ŸlÙ²‰®Y•c¨†Ö›¥Å>è#ºFD겋ú¡_ÜB´Ă‰³ªy‰®©‘ZG­V{ëÖ­[·nưùçŸÅ«P¡B¹råÊ—/_¨P!ÑU#«°@c-¢kC¤.}ÑWNíc>Ïó¾è*‘: rđ̣åË>º{÷n®®®åÊ•Ó%‘>>>ºQÁUÎf§!R§g?|’+#´̣kZ¨eMÇYÔT%ÑAZ䯉ªđ—E…lö³^đÇ̉¥K—.]ºK—.^¾|yñâE)|ụ̀%€/^8pàÀ́íí===ÿúë/Ñ/Y’?~¼‡ª̣è­ĐJtˆÔÈvsÆz<Ñ-6‹j½-ĂfÑ•""ƠQË£j...5kÖ¬Y³¦nñ̃½{.\8₫ü… ®]»síÚ5ÑƠ$ ³d3vv`è©Ôî?5ø½·.̃á¯ÄØĂ^t¥ˆH]ÔÛ«:[¶lNNNNNNY³fÍ!CêH¶éÂ({AZ̀ƒ<¢kD¤Rơ§ÔE›M̉¢ƒî,‘J¨èïBlĺÍ›7Ï;w₫üùÿư÷̃½{ ˰¯ ­ø )¬‚*¢kC¤b… Ûo.k']µ‹9 ) N_½z¥Kÿư÷ß‹/¾yóF¯@æ̀™Ë”)S₫#777±&Ë̀ñ—‡a˜è©Úl l#u&닾L‰HIpâèëë›°[w®\¹Ê—/_¡B…̣åË—,ỶÁAE·Eɲ,] ŒÙ%-~/D׈HƠÙ1ø°Ä~Ktkª¢êq]/"R Á9™”5ê×ƯV̀;·F£qúôi½]ªV­*¶ÎdA½Å˜¸¸ĐĂŒlßH”‚̃½ñ Đg±”8À‰Gx”¹E׌ˆTA-7ó¤Àׯ_Ÿ|IÛ6‰Lsû+yÜïù[K#Qâüü3o£Ú1«¦[—y8¬#騷W5‘ô\.…MƯ»‹® ‘êå̀9CàxU<’ï2₫€D׌ˆT‰#Y­ûIÓ́>8 V-Ñ5"²vˆëR<¥•ă1^t½ˆH?ª̃ºu«èW€¬Vç»ăP .70–ä]#" đ¡xñ7öîEøqÆư¨[_Eoă¶èÚ‘`‚窶J6;¥Úh ˜ŸZđG]e8ư®:…ûíăɽq%nY1Ïû9œ+̣¢+h‹øË¢B6ûYÏGƠDD${ưÅ¥pU^.rG + ‚èÚ‘`LÉ:ÍÅ\)Î4ͳˆ ¥Í@><ˆ[)¬̀b IG%"+ÁÄ‘¬“?ä cMqûàå%ºFD–$®o5 ºÿY)@€èª‘HLÉúơÆ̉w¾¾¢kAd9*Wn‹?¥¥¹s± ¤ÅŒÈ(º~D$ G²B±Q^X0°®2q$2‚ŸŸ̃ ÅQˆú‹®"‰ÁÄ‘¬P¼fXƒæxW©’èJỸ½üˆq̉ùó…(i±Z‰®"‰!8q|ûöíÛ·o£££ÄÄÄ„„„„„„ˆ~MÈâ=Á)ÎGbræ])"Ë¡Ñø?I+†…”ùbK´]K"@pâX­ZµråÊxüøqăÆ7n,ú5!Ëv Çä…Mmü°Dtˆ,^L lÆfiÍly÷¢ëEDéMđ̀1ïß¿°gÏB… ½~ưZ·̣øñăÉ́RµjU±u&•Ó{NƯü!2^½zØ·¯;V®DÜ$ïÿüƒúơ±[Z …nMfdÖ‚ăêÙÁ3ÇÔ¬YóÉ“'Fí¢₫Úmv4y•PNV €;w8ï‚Úp2 u{_₫ø]º¼€«ëÖgÊ„wï 32K÷çã ]eëÇ_²ÙÏzÁªk×®-ú «EÙ“•ă‚R¥D׋È̉tî À/¤ï?>—~‡w̉ÊÁ,º¢D”®'cÆŒéÔ©S²fÍ%KƯʬÉư‘ªÅ{N=pA1Ü€ZµD׋ÈRU…ÜvHê»8T1<¸7¼Eבˆ̉à6Ù²eûî»ïtñÇëÖ­ àßÿư²¥Ú‰̣¹ ~ 5k®‘¥‡ÁŸ"næ˜Áƒ±m̀¬٘­[yW/ări”]S"J*Ç1sæ̀ 4hĐ è¥D¤¼í 7–¼ăHd’-TÀ9iÅöị́Æk¸&ÅePFt]‰(¨(q̀=ûüùóçÏŸ¯[Œ}úôiŒn"ôGy¡åßÜụ̀‰®‘êƯ[÷ÿ{ö¬è ’…ˆpPD׃È´Á&)ˆ·i!J±Ê>Pˆ(-¨è÷<""bÔ¨Qaaa‰n}úôéÈ‘#ß¼y#º¤RĂ0L^è¿RG"J3ưĐOµĐ®ÇzÑ5"¢´¥¢Ä100đÑ£GÜÜÜFŒñçŸ=ztÓ¦M#GtuuđđáĂÅ‹‹®&©”ÔÇ~ï n²A//ÑU#²X_|¡ûÿL —ÖM›¯ˆṛ˜Ïñ¹èQÚRQâxñâEY²dY¹re¿~ư¼½½ƯƯƯK•*Ơ§OŸ   Ư(©‡ —ov©&J??Ưÿ‡a–´ńXưRĐIk¿qDÖLE‰ă7øúú/^\o“§§gµjƠ` ó ’ßă{yÁN¼mÄ‘Èd†ö₫âĂ8üE×›ˆ̉G¤Æß‰`oo/º‚¤F1Q^˜;@Ü[äG"sP̃t\³FëFl”â\È%º²D”VT”8zyy8}úô¥K—ô6]¹råøñă<==EW“,Ăø&.*XPt]ˆ,Y† ºÿ+›9N0Cu[´-€̉âXŒMùÈDdT”8–/_Àû÷ï{ö́9{ö́³gÏ̃¿ÿ́Ù³³gÏîѣǻwï¤2DJó0O^ø8ƒeW‰®‘Uèß?áºđđD ̃Ă=)†i "k¤Ñjµ©?Y¼}û¶eË–÷ïßOª@₫üù·lÙ¢ë%£f^^^l‹™4Đ(â~µ̉J­@HHHáÂ…E×”âᛢNúïË•+(7uÛ¢6ƯöÑÅÇ¡jUư}gaÖđ7&3"ă{¼}5V‚¿,*d³Ÿơ*ºă˜%K–_ư5õ¼‰nÍ“'ϯ¿₫ª₫¬‘ˆÈªx{Ká¼ĐVRœđi5â§ú6`ƒèÚ‘™©(qP¦L™íÛ·ûûûûøødË– @¶lÙ|||† ²cÇ“¼~ưú:”/_¾zơêăÆ{₫ü¹áû>|øđÓO?5j”è—‡¡́ΉÙCuÿ—ŸS+&º‚DÖ#χ»R|î\âe”Ă:v@ÑU&"3s]}™3g4hĐ AƒDDD899¥₫˜3gÎ\¸p¡££c¥J•îƯ»·qăÆ›7o®\¹̉û—Z­v̀˜1œ)[µúCÑkج+?NƒÆ±xˆR¯xqܸ¡ +TSÆG;w"Å»¢kĐÇ/oƠQư(¾"2uƯqÔc–¬ñúơë;wî ܵkW÷îƯ/^¼øË/¿²ụ̂åËO:%ú• $½Æë„+«KT‹‡(ơưcæu9.ʼn>­° «¤øƯÅ]Ñ@Df£êÄÑ,Ö­[;lذœ9sêÖŒ;ÖÅÅeǺ±!“qóæÍ™3g–(QBôEPâvb§¼°ª["%˜8¥"q¬zpªÿùg’{œÅY). öê ²ÖŸ8>}ÚÎήN:̉{{ûZµj…‡‡ŸKª‘ ::zôèÑnnncÇr@2•÷œºÜă霙^Ê+‹]G"˧lƠó÷ߟ|’̣P¡J(E_™‡•'Z­öÖ­[Ù³gÏ=»r½nVĂĐĐĐdö;wnppđO?ưä́́,ú:(qÊqă™U÷ÿ₫ö‹E׋ÈÍS œ:th’Å‚,Åÿâ_ѵ&"óP]ç󌌌‰‰quuƠ[ïââàÙ³gIíx₫üùÅ‹wíÚµZµjW®\1ö¼ºYp”vîÜíA(yç3G¸8×ÙFÿ}\ß?̣W©LHHˆ.xđàèú’>¾)ê”èû’«V­,‡éâÊoqằ™ƒaĂB’:T›m69m̉Åhî„Ü}q–¿,Â5nÜXtÔÂÊÇ·oßpttÔ[¯ëvọ́åˤö=zt₫üù¿úê+ÓÎk›ƒ‚¦3oÈĂËư×z‰çÆ#)V™ËásUˆo:%̣¾ ‰cá]»¤Äɾ‰âOåøüÛ o„A¢/ÎRñ—E¬„ë ïÙ•>ª¾~ưú®]»Ö¬YT†—"WWWF©·^7¼î¾cBÓ¦M{đàÁôéÓ9̃¸½Å[yáA¾DJđï,‘¹´n-Ç .X /M˜Ü~Êac0ˆÈ©.qܸqcƯºu[¶léïï?qâÄgÏEDDÔ©SgΜ9&̀èàààââ’0ï|ơ꩟µ̉©S§V¯^Ư¯_¿²eË~1(IpAkAî:]¹²¢q$J —/ /M™’Bñ¯ñµçB.ѵ'¢TQWâ8uêÔqăÆ=|øPo}ddäüùó'MdÂ1=<<ÂĂĂu™¢D×ôÍĂĂ#aù›7oX°`×GmÛ¶đ÷ß{yy5õ\ô‹DĐ½¥¸ƠßK¥¸sEK ÅCdFiûưˆ¥ø1ïÀÑWBD¦SQâxåÊ•åË—ëb{{{i½æă_«Ơ«WŸ>}ÚØĂÖ¯_?&&æđáẲ­V{đàA77·̣åË',_°`ÁfñƠ¨Q@R™ƒ6nܸ¿̣Ï"©˜̣9ơoø-̃6Å­e"2'e³ï… Ư{ ÖHñ1»=Ad‘T”8†‡‡#é<==„……™pä^½zựË/… ̃¾}û³gϺvíºråÊ„ƒ;’¥8 ¹Å‚ëSù¶b§NÀ£G¦‘ˆŒ̣æ €ñăå)ï¤|V œW†ˆ,ˆÆqộ̣ú÷ßmŨƠjO: ˆ©3ȵhÑ¢E‹ImmÚ´iÓ¦I6»ñöö渌êq—¥¸:ª+o|ôï¬]?"+V¤îȃxO,w©8ʮ։*̉Qñ Îèë£₫?øGô%‘qTtDZL™2Nœ8áïïäc³µĐĐĐC‡ ́Sv!"‹ ¢Ä±_¿~îîîvíÚƠ»w\rĐ«W¯>}ú́Ư»€³³óÀEW“;…SŔ¯ÿư/‰r={®)‘ƠQv¬^¸€¿¿¼"(È clÄF)v„£Aû‘j¨(qtwwŸ1cFö́ÙƯế́|øđáĂDDD899‰®©ÈIœ”â(ÑK¯gL›Ựr·®‰(Uê×Ç?ñz´|ù%–-‹‹ÿ₫-[t˜µX+́¨F9¥5©™ºî8J®_¿¾k×®­[·FDDDGG'œllP0‚¥¸ ª̣Ç€üùŸñD”&”ưc-(¯èÛ×ĐĂ|ϳC₫v7ăD_Du‰ăÆëÖ­Û²eKÿ‰'>{ö,""¢N:sæ̀Ñjù•Ô¦%7î7¥öíåxÑ"Wq¤p„KñOøIô…‘AÔ•8N:uܸq>Ô[9₫üI“&‰® ‰tÇ¥¸$J*7U¬¿¨»»èÊÙ€ÿƠư_™L*»¨¥h1K±Ñ×CD)SQâxåÊ•åË—ëb{Å |MÜ_“Ơ«W':<8Ù‚kg›¬ŒÊÖȘA¶HöŒ!JGÊáT ́[­ă?ESû©˜*úRˆ(*J.\¨Ơjí́́&L˜pVÑXÍÅÅeΜ9™3g°bÅ ÑƠ$1ôúS#₫d¹½{'NÈËL‰̉ŸŸ_¿ø]Ññ4î`Qˆ’â¯ñµèk#¢¨(q Đ´iÓ®]»fÉ’E¹©Q£Fµk×píÚ5ÓN–îI±7¼<¿„r,Ï>]_"ëƠºµ/X ûƒ̣ºăÇ:f`†ó5‘Ê©(q P¸páD·zzz ]M@™5úÂ7ñBÊÄ1o^ÑU&²^ÍÉñܹºÿ/]*¯ë̃Ư¸ăÀåâ4L}…D”$%^^^mŨƠjusU)RDt5I€¯đ•ëSË#ó OÀáĂ¢«Id{>vQ €¼îÖ-ă£Çq,ƾ*"J’Ç2eÊ8qâ„¿¿ÿ‘#Gt+CCC:4xđ`]âXªT)ÑƠ$N@n¿X¥̀œ)o>\tưˆlMåÊ ×µi#Ç»v}ÈX Å|`M¤Z*Jûơëçîî`×®]½{Çơ„èƠ«WŸ>}öîƯ ÀÙÙyàÀ¢«Iéí(Jq=ÄM;¹XÄ%KÆß!kVÑU&²vʯkóæé₫¿r¥¼ÎاƠ`@fd–'`‚è‹$¢D¨(qtwwŸ1cFö$fsvv6mZ|øđá"""œ”ßaÉölÀ)î‚.º ‘Ê.ƠL‰̉AΜ ï+._i°ƯîƯÑ¡ƒÑGí†nĂ1\p8†ÏÄL£BDiFEwgª[쑔ϩƒ¤ fÍ’ 4m ؽ[^åé)ºÖD6@Ù̀qÛ¶„Ûß½3ñÀa‡]›…YÊ×D$œÇ7.X°`Á‚Ï=]R 嬒§O¬R̃q$¢t LO† ‘W+w4ÊFl”b;5}N‘~!Ûµk§ îß¿Ÿº#‘•˜ƒ9R< £(V́c¤å= ¢ô•)“ÿóΑkăÍMh”¶h[¥Åè)új‰(ÇÁƒ·iÓÀÂ… Ÿ˜Ö%¬ËP •â阮 V¯– –` [ÓYƒ»¸+Å+°âˆ®ªêăïï W®\·nƯú́³ÏJ–,éææ¦ÌŸ?_tMI$eϘAƒlfÏ¢tÓ·/ăâ+Wàí­ ¿ù?ü·zæLÓ‡è?‰“•7̉x~ägcG"5PQâ¨å[çíÛ·çÎ]#ék|-Å¿âW)NdNÊ›7嘉#Qº>\NgÍ’ÆåŸ2ENGŒ0=qô…oC4܃¸̀•Qù$N¾f"[§¢GƠDJS1U‡#‘O{û‘²g Gÿ&J7%JÈñ’%iq†ƯL8…SRID¢¨è#§¤D)ûTç¬VÜÆP&>>¢ëKD˜6 cÆÄÅ“&aâDÓơ ¯œá¬‹?2 Ë KâIDATĂg|`M$–Ç¡C‡¦₫ d”(•Ó &2ô7ââHDé©aCù›[d¤4SüèÑrâøƯw©J³!›?ü¥1œáü ¯D_6‘íâ£jR£X!ÅÑQ×­“ËÈó–GF®/‘­Jb4GóÙRü¯•‹D”ÎTtÇqölƒ₫ä̀™ÓËË«té̉3f]eJÊy#̣"¯èêQ̉4‘ăY³đÍ7̉R@ ˆ‹¿ú 3f¤ê­[·Î‘#€/^¬X±ÂäÓ‘:ÅQ)®ˆÊM³fÉqơê#e—j&DéO9ƒÓ(·üơ—'₫”ÀHO!OT¿ «®àè‹'²9*J»uëvụ̀e:tØ·oßôéÓ‡₫Ă?́̃½ÛÏÏÀ¥K—Z´h1mÚ´Ư»wW©RÀ‘#GD×̀¬3:KñOøI¹éÇÄvPv©®REtơ‰lr$µøưcZ¶”ă-[̀s¶`Kqi”}ñD6GE‰ă¬Y³BCCsæ̀ùư÷ßgΜYZooo?räÈüùóGFFΛ7@Ö¬YG àÊÇ”dîă¾7@ƒDË|ú©ba&R3gôVT®,ÇÇ›á %PâK|)-ºÁMô5Ù%Ç7o^;;ưZi4‰“ºÅꨮ“ˆ̉ˆ¾¥,X0 gΜ‰nÍ!Ăwß}§»+©óé§Ÿ6mÚTt­Él”÷¾ÀÊMÊO"å3±x=c>ûLôQº:R| ǾĂw¢kDdưT”8(_¾ü̃½{¿₫úëråʹ¸¸È”)SÑ¢E;uê´{÷î:è•)SfđàÁ¿ưög´ÇpL+¡’̃V峯x=c”‰cƯº¢/‚ȆùúÊqHˆ̃ÆeËä¸Gsöäaº&a’èWÈúi¤î&*áèè¨ÑhDWÄ8^^^ׯ_] “9¥¡}âanäVnU₫Äû-P¡¡‰mĐR¸paÑWIñđMQ'ß—sçävÆ=z`ùr½íI₫§Z4Ù‰̣Á­±£ YTÈf?ëƠuÇQrưúơ]»vmƯºơÍ›7ÑÑÑ/_¾]#J[Ê !ô²F¥¬Yă/KY#‰U¡‚'6§Wñârl̃OÛØQE¥Å¤Æ%"³P]â¸qăÆºuë¶lÙ̉ßßâĉÏ=‹ˆˆ¨S§Îœ9sÔ|s”RC9 ÛWøJokPOœ(º®Dd’rf´mkæƒßÂ-)₫ÿlÀÑ—KdµÔ•8N:uܸq>Ô[9₫üI“Ø~Å:}¯¥øü¢·Uù¶Ä!J•}D6O9÷`‚ù`K+fL0V¯(ŸPw@ѯ‘ƠRQâxåÊ•å›ÅØÛÛKë¥6«W¯>}ú´èj’™E!J5H¤=ë­[Íùîs,"á¾ưVûßYˆ¿ÿn₫ó/„<ÁT¢Lˆ(ơT”8.\¸P«ƠÚÙÙM˜0á́Ù³̉z—9sæèf¯^‘XÓ²h­ĐJ7cs2%•m¤€ø]ª™8 çá!Ç{÷&Ü®LÓb₫§~èWe¥Å*¨"ú!²B*Jƒƒƒ4mÚ´k×®Y²dQnjÔ¨QíÚµ\»vMt5É̀v`‡·DK½­S“Đê7pܽ[9ˆ#‘ˆ"í<ÎKñIœ\åbëCd}T”8†‡‡HjÄOOOaaa¢«Iæô₫‘âÚ¨°€̣y—̣9ÿc† ¢/…ˆâ½[»6áö_•ăJ•R> ”¿Ä—¢_"k£¢ÄÑËË @¢­µZí©S§)RDt5ÉœR|N­lǨÏ&Đ"Rµqăä8±fÊ™ŸÎœI«ZA‹‰̀KE‰c™2eœ8qÂßßÿÈÇy¡¡¡‡}ú́Ư»€³³ó@åpdá`€×A„”7,’Á±vm‘J¤4ÁÉ?rûÔ¯ŸVµxçRđ!"úu!²*JƯƯƯg̀˜‘={öD·:;;O›6-O<¢«If£;c?ö',0oתÛÁƒrüùç¢/…ˆ>R~É›1#ávebùüyÊÇ3™²±ă<̀;£¢_"k ¢Ä@•*Uö́ÙÓ¿ooï¬Y³ptt,Uª”ŸŸß?ÿüSO+­ÈnÈ}¢?ŧFï¿n3q$R=äøûï-̣ăr<`̉Î#<’â¨!ø•!² 5Ïăáää$ºF³Ù‰Ï¢l±₫¯ ÿFŸ?̣åăânƯ°reüÍîî‹ ø )œ̉4Jg|SÔÉ ï‹FÑ%‰_O˜Ç,̀¹Ḳ6¤á/‹ Ù́g½ºî8ê±Ä¬‘L0kD ¥¬‘ˆÔ¦†ẫ̃Ë—‰)+Ổ°.Ă0̀¾̉b1ûÚY:ѽ}ûö́Ù³/^|úô©î^£»»»O… E×̀©)JñJ¬L´̀æÍr\´h̉ÇrPÑÏ0Àĉ̣dN“&żñ£₫ûǾΠ :: «s'¥G·q»/ú"PôkDd©Tñ¡ûáÇƠ«W/\¸đÙ³g ·fÉ’¥uëÖC‡uss]S2ål1ƯĐÍèư•2làH¤6 Èñ̀™‰&Ÿ|"Ç11i^#-´R‡`H”ü*Y&ñªÏŸ?ß°aĂü1ѬÀÛ·oW¯^Ư´iÓóçÏ‹®,™Áb,–â¶h›h™­[åøë¯lfÏ"Ë7¾wé’æ§ †<®¤|D_=‘¥œ8>{ö¬OŸ>ÿư÷Ÿ´&C† ỵä)UªT#/ărz¿8DKpâ K–,)–ÔÍ@“Ă6Pù?Hñ¯ø5©b%{v©&²†5śÚU•Ă)¤µk¸&ŇÈpâ‡ă!qr‡—B(”T±wïäXr0µkå¸bEÑ—EDIpv–ă£G“)Ø\¶SW+yÁk6fK‹́(Cd U ₫₫ưûăÇ'_æíÛ·¢«I©¢œơ+™n1ĂO°7N¬ÄÙ³¢/…ˆ £Ñ2ơ–-̣ÔƠ " jçÿƯؽ Ûâ* …ÎdM”T‘8†……ớÙSt-(m)ÿ"D’Z.”ă]i"JU«äGÑ£Fá矓*èä©ûùó(W.*¸[ó Ï#ĵ)‚"wpGÔ«Edø¨̉CEÈÏ”Çïæ9hµj¢/‹ˆ’¥œæ—_’)¨œ,ñ6*iæ!JqB: CºÈ̉0q¤ôp̣óåÎèœT±éÓåxæ̀ÄJ;&ḈCd-·˜ÎƯ •ÏC6`ĂTLưz©—àGƠ[Ó³ ¢̀'"¹ÇŒ‘ăaĂ+¡́ĂÄ‘Hư&OÆ„ qñüù‰°góf´n—+‡K—̉µZh¥₫1_ăë ¨đ>KÿW‹Hư4ZZ.“Q¼¼¼®_¿.º*¢́®˜|Ûså´A‰ÿ`æÎ ifsc~tCBB .,ú• xø¦¨“ùßé[£Al¬!aÜï·y¼ÆkgÈ=ÁĂö >IïJ$¿,*d³Ÿơ|TMiKy‹1™‡ÔÖ¯—cÿ$ IY#Yœ”’Á)Sä¸S§ô®]6dÛử¢;ÜÓ»D–ÀVÇơë×wèĐ¡|ụ̀Ơ«W7nÜóçÏ“/ÿöíÛåË—7õ¼\¹r5kÖ́Ư»÷ÑdÇ!£¤|ï¥8ùn1ÊY'gÏY‰̃½åxûöd ~ó¯Y# ¦uPG9!w$JÈ&Ç™3g?₫öíÛ•*UrrrÚ¸qcß¾}“2::ºgÏ?ưôÓ“'OªV­Z¬X±“'OöêƠk₫üù¢/ÅÂ(3ÅJ¨”|áÇ9tö|$²sçʱ̣ bb:v”ă~@úMÑTZdîH¤ÇúÇëׯzxxܹ́300p×®]Ư»w¿xñâ/I ±nƯºóçÏúé§ X¶lÙ¦M›\]]çÏŸ,ú‚,IWȳ‰Â©dJ‘§•Iz¾ZåĂlöŒ!²ÊIeï¤0JâêƠr<~<„؆m ÑPZdîH¤dư‰ăºuëbcc‡ –3gNƯ±cǺ¸¸́ر#6‰fÚ;wîđÍ7ßH“h{zzöïß?&&†¬ §̀]à’|aåmåí‰x”]ªÛ·}}Dd°zơä8¥¯ß¥KËñ_‰©ïń.̉¢ |VÈúNŸ>mggW§Ni½½}­ZµÂĂĂÏ;—è.!!!̃̃̃Ê•BCCE_ŨŒÊR| ) ­qâ„LjZ™E_™Ä˜§ƠÊÁÀ¥z̉_0‚ᨋµĐ&3ß‘M±̣ÄQ«Ỡºu+{ö́Ù³gW®/^¼8’Î-Z´&AẮ+W®ÈŸ?¿èk² /đB¹˜ɽnáár¬¼Ù@DV¢T)9₫çŸäËÚÛÇ[¼}[X­#!Å÷q¿:ª « ‘j¨b®ê´ăêꪷ̃ÅÅÀ³gÏƯ«”̣oàĉ™2ejmØ÷_///½5ºÇß¶£Z₫j̉×ïÿự6$™ÂC‡æœtñ¸qBB̃%ZLÄ,ÆĂă~HrLèÁƒ¢_̉Ç7Ẻè}ÉŸ?¿ĂÇïêw¯]ÓfÊ”Lá­[36oWûøÄ^¾|OÔ«qw.¢‹áX‹7-æ<™“₫Ơà/‹p7]µ°̣ÄQ×uÚÑÑQo½““€—/_¦x„˜˜˜ßÿ}úôé1113f̀pw7hd/ÛTé?È.vÎƠ9ùÂ[¶Èq§N¹/ôPOÖ¾S'ÆÂåđ¹*Ä7Ẻä} @óæº°ĐŒX¼8Ù Èqd¤ØŸå¤2[·–(\âgüœ₫Ơà/‹X ?Ö̃!²V₫¨ÚƠƠU£ÑDFFê­ˆˆÀÇûÉ8ỵd‹-~øáww÷¥K—6mÚd€¨)Å0|Ǿ'$²hÍÉñ’%)W^¨àº+§¼ú¿ŒĂ8Á"ÇÊG—„w_½z@êgЇ~øá‡=z<|øpÈ!;v́¨V­è«±GpDû£̣…•C₫&ÙŸÀºur\µªèK$¢´¥üËpï^̣S¦eîø~RΉEdS¬Æă\È%-*ÿª&eÑ"9!,V 7o&]T£‘c“~bCBB8 ÚđMQ§4_ŒÿuVîqÿ>Ô3—tß@Oô\†eit"₫²¨m~ÖĂFî8R:Pf‡qØ]”·“ˉȌ+Çô­p̣¤(`ÈéDù y9–7GsÑ5"JsLÉ nà†r±j˜óèÊñÛëƠ}­D”:?ư$Çô­àëoñÆ CvJ'ÊÜq¶UFeÑ5"J[LÉ ¼ ϼ¤'Ư»Ëñ²äïü¬˜ƯkÔ(Ñ×JD©fo/Ç>²ÇÅ‹r¬¶™̃”¹ă)œ* >S&kÆÄ‘RëN)K£´!{­Z%Ç={&[ô—_ä˜Ó̀YÍ›å¸ukCö(S&̃â… ¢/!>eîxwà$ºFDi…‰#¥–̣Ñ̀}Ü7d—K›’¥J¥TúăœDd%+Ú*‡jL–²%t¹r¢/!eîøo”ưfˆ¬ GJ•mØ&Å™)? êŰi“Á'Ság™¦V-9̃¿ß=‹·hÄŸô¢7sG²JL)U”½ĂĐA.ïÜ‘ăâÅ“-ªœÜ– ‰¬†2ïSÎ-˜¬×¯å¸m[Ñ—˜„¹c$"M=‘1q$ÓơE_)®ƒ:.p1d¯… åØÏ/¥̉Ê)M2AD#{v9~ù̉Àœœâ¬Đ·¯û¥+-´%QRZt„ăq])"³aâH¦[ŒÅR¼=l0`€â‹S*}ß F“DdyŒĐÀ?ÿÈqÊ@¹«ÑQZ¬†j ±0Ç#R&d"åƒ313Íϧªa‰(ơŒĐQGù"_>ÑW‘„ƠXưä €0 Ç#R &d³8ûO¥ÅafàƯºÉñ²gçúưw9fG"ëcü€¾úJÿ÷?‹¾$ŒÅØíØ.-.Ä‚((ºRD©ÅÄ‘LQ¥8!†ï$Ç) ߈ø7}ÑDdnÆè¨sơª§<¤—8MĐäøŸ´x÷ÙƠ,G2Ú·øVK D!2pGåÜư­?^ôµQZ2i@G%K"o^yqÆ Ñ’´<È‹Xå 4ÏđLt½ˆLÄÄ‘Œ6“¥8F<%R¹¡¼Ñ2'NĂ@d¥ŒĐQçÁ99RôU$K̃0=Ÿà“ßñ»©Ç#‰‰#Ç>R<cŒÚW9|£§gJ¥•·ØÀ‘ÈZ™4 £r<¯ D_HJ´Đ*ÿ~vE×nè–ă‰ÁÄ‘Œđ?üïäé§bªáû*‡óÓÇ€” U~?ˆLf̉€:Êáx₫ùZ­Q{ pFc´´„ ;~ “¥á,!ä¡/Œ̉V9|c` ;́Û'ÇY³¾t"J3Ê»t1j×?ÿ”c;Kø@›†iÊQoµĐj yƒ7¢ëEd(Kø=#uøßH±+\« áû̃¼)ºöD¤ZÊÿøĂ¨]ơnO5â)ˆ0uPG¯É£œæb®©Ç#JWLÉP?âG)~çFíëí-Ç.°ĂÉ“r¡₫úkÑbxµăç₫đ/̣¢+E”2&dåØcÆvŒFT”¼èăcÀ>làHdS+¾|ù¥±{ÏŸ/ÇË'Q mtÏăÁ'#0Bt½ˆâaâHIzˆ‡«±ZZ¼«Æ¡96¢o´r˜Gƒº̉‘UøôS9Œ4á¯_˱rK±[ơ[ÏÄLö˜!UaâHIÊ‹¼R| ÇL8¢Erlèsj"²eë×Ëqé̉&`Ơ*9¶¸Ö:Zh룾rM‘ÂE†c¸èzL))yG«¡ZUT5öÊ‘xèsUq_³Y3ƒw#"«Đ¾½+»Ë¬k×x­%‡ }E&Ù‹½Ê f̀Â,¸ˆ®GJ̀ßøûI‹GqÔ„ƒ(Gâ5tƒËq£›T‘Åûùg9ñÜ„„…Éñ́Ù8{Vô™D7ÁŒ=́¥5¯đJÍ2,]5²iL)­ ß!¼ŒË&aíZ96®™â~Å—́AƒD¿D”î”]â¶m3íwïÊqÅ¢¯(¢Ư­•kz¡—œL<Qª1q$}ʆØ+°Ẫ&¤cG96hAsç个ÑljÈJ ”'À!& `A|ÿ½¼h¡u6aÓ;Ê5ođFÍ,1ơD¦câHñ|¹qP#4êî&dÓ&9vv6fÏ.]äøwă&6$"로Cp̃<Ó1a<=åEålØ–H í8Äa¨ú°Ă5¥?&$‚!Êñfwb§iÇiÛVkƯ~í.,úơ "q6•cÓ¡œ¶êäI,X ú¢Rçü 7X 4ŸăsÑU#ÂÄ‘âÇñy¿Ù'üód Ù³å8Gc&V6fRæDdƒ”æÎ5ù0ZÅ_²Aƒâ ôh¡´ĐêMf½ë5Đ́ÁÑU#›ÀÄ‘âTC5)6aBj‰rđ‹'OŒÙ“Ï©‰HéÇå¸P!“£œ¿Ê¸Æ3jơ=¾OøƯ₫3|æ WÑU#ëÇÄ‘€øb~Á/¹‘Û´ăÔWŒYÛ»·‘;¿|)Ç™3‹~IˆH4å˜^÷îáúuÓÓ°!ºv•-º£Œ’Ú Ø \ó/5Đ(§%2;&„"("ÅPá+|eÚq¢¢°oŸ¼¸Ä¨K—ʱ²C%Ù²ËáÀJ”0ù0Êéd4j$úº̀¤Úi¡ư Ÿ)W®Æj 4 `á-:I­˜8Úºº¨‚iñ,L*7cF9₫ë/#wöó“ce‡J"²ẽ̃È+Ï}olp#);î̃mUßOwa×+¼̉[9ƒ4Đ\ÄEѵ#kĂÄѦơDÏ8 -Ü!ÀÆñ[¶}mDd<ăÑ£Ss$eî€_~}iæ“ Ù´ĐÎÂ,½ơeQ– ɼ˜8Ú®oñí ¬S“5"₫³Zc4eO,ú…!"•éß_kƠJÍ‘”F7謡ZhÛ£½r¥®á£ŒÂ‹(ILmÔR, 9EKeÖØ³§›̉xh‚bh‰ñăE¿6D¤2r|ø0̃¾MÍÁbcå¸m[c¦¶²ë±^ m.äR®¼„Khê¡èÚ‘Åcâh‹öb¯ä6…©̀¬o\b§‰£†%mûv9Î55G̉hpó¦¼X®""D_]x„G7pCoå~́×@ó¾];²`LmÎE\lˆ†̉âK¼LÅÁ {v96¥[Ë Arl\Ol"²MÄ[\¶,5+V »vɋٲ‰¾º´á O-´à½ơë°NM34]A²HLmË œ(‹²̉âE\tFªÆĂ=|ÏŸË‹¦tTTÎfôØDd3”í{ơJåÁ>û,̃ßïßÿ¿½;«¢úÿ₫¸ ±ˆ¹@b¦$"˜ â’¤©ôÁ­ú”Z¦Yá'³O¢‚¶h.¥Ÿi¤Æ×µÜr'Ô2Á’PÑTR@Pà2¿?††Ëeq€Ë–×óÁĂÇ̀™sgÎ̀áÍ™™sÔ>Áº‚â,Ñ+ÿ?0}¤`âØ„¬Çúè)¯îÄÎÎè\Ë}ê>§₫×_Ơÿü½{¥Ë¶¶ê^"ªïƠÉŕík¹³É“ñöÛ¥«5b¼˜©åç*Ä?é£î̀aDUcâØT|ˆÇb¬¼ú>̃¯ưº0|đœ«¿‹1:3|óMơ?ODMÉΥ˷ocÖ¬ZîoáB̀˜QºêáQævă#ÍUèư¡Ôá˜Á9hø“yScâØ$ŒÅØ9˜#¯ÄÁÿà?µÜ§îø;-[bΜíEw0Œ!CT»@DÔPè̃°7W¯ÖrŒ%:wq Â_¨}úü!B,?IØ}Ü·a?ö«ƯFª¿˜86~½Đk=ÖË«WqƠ~µÜg\\™¿oܨÑ^t<»¹©x‰ˆ¨!9v¬tù‘Gj¿¿©S±cGéêäÉWûë̃",!F"²ü¦₫è/@X€j·‘ê#&\k´>†̉²"DG8Ö~·ưú•.ß¼YÓ½L\ºÜˆŸ-""ẶơÅØ̉o`eUû]¤¤̉Ơ¨(ü¿¦1dM"Dˆ+°¢ü¦÷đ¡-ÚªƯFª_˜86f„ dÈ«µ¯±d·:6Î[Ó'Ôuÿ¢×ÍC‰ˆhƯº̉å¼<̀œYû]>ñrtđÛ´©̀ϺÆm&‰÷ ‚<¯áA€°ÛƠn&Ơ L§Ä(ó3ÏPYă°a¥ËmÛÖâÙô¨¨̉å4̣ơ!¢O÷aÇE‹–Vû]Z[ëϘ*8wNí35–@oáÖăx¼üÖa&@AˆÚÍ$•1ql„`ÀŒÑ-1TÖ¸g¶ëüÍ™^Ó]º̀±‰¨fN,]nß̃P{Ơ“@‡efEmố`wçDˆæˆßâ[©21j·”ÔÁı± üˆ̉¼¾èk¨¬À A¥Ë9µ´aăÆ̉eÎCD5óÔSe₫̣41̀o4A€(Âή´dîÜ 7ÖÀ}ƒoDˆë°®Â­c0F€Đ]Îă¼Ú-%£bâØxÇq½ÛÓ_ăëxÄjÿºû,XkëîÈ×·tù?µˆˆ4Ư¿å·ÆiW¸ Fctơ÷M ÇF¢+ºúÀG·D„†0Cí_7küôS¼ûn-öơóÏ¥ËMêƠQ„¹yÉr^Z¶4Ô?ư§N•)Ñh0q¢Úç« 4p@„8ó*¬°¥[ØoâMµKu‹‰cƒ·Û¿á7¹Äμ=²Yă¼ye₫ ¯¶6mJ—×­«ù~ˆˆdºóLgeđ¾r—.ú¯Ë¬] A¨Å̃ Ü{xO„(B¬¬‹ñ3|&eˆP»±T'˜86l­Đj†é–|€₫B &®”nÖ8{6̃{¯ûÊÈÀơ륫º#±Ơ†n~wåaçEtêT¦ÄÉ C‡ª}ʪAŒñNµGů%ÍÇ|)ƒœŒÉZ4½{üdžjVn ̀œ-—pIwjÁÚÓÍgÎćÖnw­[—.iÀ}''—SÀ÷ßCđÛo5Üaă ½#B\ơ¦0­°ÎøBa0óMF€‰cĂ“†4ÂLÑ-ñ"ÄGñ¨¡r÷n™¬qêTDG×n‰‰eVưj;í!‘>ƯÜ1)©ôÙGC ‚(¢sç2…]»ö U(B‹P$B\…U•ƠÙỬ›4mÑö+|¥v“©†˜860v°+_ …k±Ö€GY¾¼̀KÓ/¿Œ%Kj½Ó=J—ÿ2äÍt"¢Rº¹ca¡Á§9}º̀\Ụ̀AyFí¯^ÆË̉C#0¢²:×pm&H7²Ç`̀%\R»ƠT L ox îàn¡4ͨ¨G¼öZéjh(V­ªù̃Jè‰fmƯ‡D#"£)?ưKŒ!G«öơ…("  LáÁƒ¼̣Úç^oÄ"VÊ ·bë#x¤²j1ˆq‹”DÎǼBªƯpz& ÀhŒ œÄI½̣{¸‰HĂKÊÜR Áúơµ̃é¨Q¸£“ïÖjèp""ôrÇ1cÊL``û÷cófưÂU« øøcµO¿>†a—qYz“Æ6UÔü™Ă\€à‡WÀ¼bâX¯ùÁO€°ơÊO⤱đX ú·tvïÆ7ßÔz¿+V 6¶tU4ä8ADD•Å2Éâ=¿m=jDkÖè—¿ư6“&©}ê™.èrw¤nȹ˜[EÍ›¸¹ «¤nHs˜‡#<j7ŸJ0q¬Îă¼ l‡qXoÓFl!>…§ {Äöíѳg™QÄÀµ̃oj*¦è¼Ä쑈Œi×.ư›ÔuĐ8aDááúå_~ AÀÓO«}ê¥Y˜%eÇqÜUÔ,Da¢Z£µ”GÂ(ƯiuÉø˜8Ö/±ˆ ¸Â5ú÷s#)B|/öˆkÖ@–VZâîn¸Ow(µÓ§ëâUeôhưŸhR`~¾a3>DÏ?¯_~ô(66ˆ‹SûRÔK̃đ>ƒ3R¹Û»£{Ơơc;¤$̉öˆH@‚Ú'Ñ´0q¬ná–?ü¥¿¥Êo"DƒÂë/¾X¦p̃<œ=k è̃úäưA,ˆˆŒFËŒ#  ysôíkđăüßÿéß!—ää _?^}UíKQ!(‰Rù ¾ñ†wƠơoăö|̀ï‰RÙmÂ~†úFc⨲p„ Z ÅOø©üÖ¯đ•ñc₫Ak__´h¡_¸cGí&†Ñ¥›5>û,̃ä́¥D¤ªk×àêZ¦äÀ/6ø¡ví‚(bæ̀ 6­\ A€ `íZµ/Hư‚ă8.%‘qp8†?đ#×q= QÑQÊ#M`‚mئö©46LƠñ9>—¾³£U~«áN‰ÇaœÁƯ½;?ÿ\¦08¢h ´̉ÓËdÍaçNƒŸQµ¥¦Vđ Îôé„ ̃p©µèhˆ"Ö­«xëĉ˜›óäƒùÁo ¶HI¤Ô˨d¶ â·øv8† %¹ºđ›†iñˆWû„6&F5Ó¥oß7đF…˜‹ÜbwAĂº¸^^œ8Q¦ÜÜ¢ˆM› t˜đp89•)¹wϰ'BDT+¢ˆï¿×/|ñẼ}×àG;¢ˆ¸8¸¸T°µ°AA%yÍ矫}e[؆#ü.IyäWøê5¼f k%Ÿư -Á’È©¤ L¶nâ¦ÚgÖ`0q¬sq°ZIߣ‹Qñ=[ØîÇ~ấ±‚•apü8¦¦8uJÓ₫ư¸ßpGj̃Qe;Pù5ƠCC†@ñ¯é—GGCĐ¯ŸÁèï´4ˆ"–/¯´Îo”¤3aae^X¤*ŒĂ¸¥Xƒ)<ƒ3ïàŹq6„!̀r6i ëWđÊFl¼jŸ_}ÄıNÇñçñ¼ô-ø ©â›oæI}ï¨Î™6 ‚Ÿ 6ùøT0óAÍ?¯ÿ–bù7‰ˆê••++₫1W’B`₫}“'C! «´Î† hß¾¤ Ó§ă³Å<á…(-´RYˆÂơX?Ơ{ ë.î®ÂªÑ-wúLaÚ}ßÇû{°'yjŸ¨‘¿Ư MÀƒÇ˜ùáW°³˜6­ª©¥gÍÂܹƠØÛäå¡m[dg—)y#F< rANŸFŸ>ÿÜIĐ¹3>ú‡©}  øG#:ÉbIDâ˜Ù½Ñ[íÖƠ;́q¬ÔæÍ›7mÚtîܹæÍ›?ó̀33gδ··ẈA‹3ă;Ÿ…YJÆ ¨–{÷°a6l@¼‚ÁLLđ¿ÿaÂĂ>1ï½Wé́ヒ {¾Ô¤;Qê+¥~b\J½öZU/³È̀̀ĐPôïođ&:„7̃¨àƠF%ÂÆèbà:¨»¸{‡ăđ!:(…¦˜A1q¬Ø§Ÿ~úÅ_XYYy{{_ºtéâÅ‹O>ùäºuë,--øYww÷”””Ú·!??₫ˆ}û°jU5Æ´15Åÿ₫‡ñă w->üsæTUá‡0x°áW'ø»°bPê'Æ¥¯¿e˪QßÖ3gbÀ€_N¬>)(99X¹_~‰ÔÔZíÍÄ=„ е+¼¼˜SÖ¡~×78L+’’2|øđ‡~ø»ï¾kƠª€ÈÈÈuëÖ………½ÿ₫ûüxu¿™nÜÀÉ“%_Û·C«­I›‡ Cx8|}k}̣……ؼß}‡-[PÓÂIIú31ÔWü]X1(ơăR•µk±`j–.ØØ`Ô(tëṾ¥Ñ(ÿh…AÉÈÀæÍؼø,~îîđđ@Û¶è̃íÚÁÅÖ†JlB˜8R©>úhưúơóçÏñÏc&Z­¶gÏæđáĂ&&x0T₫fºs—/ặe\¹‚'pí₫ü₫‰âbĂ´óùç^‹?h““qü8Nœ(ùWùwB³f nXo₫.¬‡”ú‰qQjƯ:̀Ÿ³ÙÖnnpsCFƃ³sÉ—™eçN\¸€={°gO û jÀÂNNÈÊB` Zµ*ó¥Ơ¢S'88©%FÆÄ‘J=÷Üs©©©Gi¡3óÛo¿½cÇ 6x{?`ÚuáÁ£ñÔĐ˜1 Å!ÿ¬ß¿ÜÜ’¯œ¤¥ÁÄ™™ÈÊBffÉ¡ChÖ ·oàđ¡¡˜?ÎÎuuzu‰¿ ë!¥~b\j";»ä ô#GŒ}h++ØÙ•|edÀÛÖÖ°²‚µµôµwgáu×^Gε>â”Ö0º ML hÓÍ›—ùºxO= XZÂÂÈχ£#5ƒ¹95+ùJNFÏ03ƒ¹9̀ÍKnÜÀcÁ̀ M™k¬É&µ¸f”(çÎkÑ¢…nÖÀÍÍ ÀåË—˜8ÄHî`_üh‚’̉o€oª¿/Ưq¹«ËÔ_}…ĐP#œ2QCecƒÉ“1yriÉåË%O©ÿøcƯá}÷.î̃ÅƠ«%«å”†}[ÑGÏÁơº₫ ¯Sèß›húAº/÷÷ßl:S½sêTS̀Áı¼¼¼<­Vkgg§Wnkk àæMCNgé‚‹OăH7œ”¾¬pWƯs-,î|wÈ<½·₫́WW®\Q» ¤A©ŸƒéÛ}û"2R·LsíyRR³äd󤤿́Ñ¥qÅ9Wœ…ï*«ƒ‡̉áx.ih'ư›†v'Ñ­˜cù5aLơåçç°²̉Ÿ0ÚÚÚÀ;w¸‡AØíŒËº_àJóz2C‘FdfbÂx{£{w¸¹ÉÀÊæo€x÷­bPê'Æ¥µk÷à‰µ²²Jÿç«èĐ!nÜÀ(*2ZcB;Rܫٵ&BÈ@« ´ºÖÙ°É‚ĂM´¸‰Yp8Œ̃N¸z¶Ù°¹Û;°½fF;2&ú́́́AÈËÓÏórssñO¿cƠ–{ÜƠ‚Knøûo<̣Hi¡‰ î̃… LMabSÓ’…“'Ñ«42Oa=₫ưѬ,,Jÿ=ỵS,%_̉Ă.DDÔp98ÀÁAw’…˵|đ´ ùù¥_÷î!1¸¥ÿ̃¹33¡°……(*Bb":w†V‹¢¢̉ú ½zA«Eq1´Ú’…£Gáă#•ÅÅ­‹‹[wÎÈ€ƒˆâ[ECquÚ¶Ơf[€ädxz–)E¤¤ÀÍ­¤‚\3#?\¦0'§ô}oQ,Mï‹æå7Ä¡PÔˆf…Ŧ0/Í~MoíÑöN‘hZ(j )5E¢ịMGWû¬"Ñ´¢b“"hnX[›Ư×ÂT+Èÿî¿ƯÍÏöt1JJ¤…;9yÀ$µ¿WTÀÄQŸF£±µµ-ß³˜ @§jC\\RêÓSDDÔ¤I/‰èv|<ơ”Úmª@T˜bw«¨đAô”ø@¹)dÜƯƯ›fâÈÇ*Đºu묬,)S”¥¥¥I›Ôn‘:˜8V _¿~Z­öΔŸ¢(8pÀ̃̃̃ËËKíÖ©ƒ‰c‚ƒƒMLL–.]*=×`åÊ•™™™#G433S»uDDDDêà3pttœ9sfTTÔsÏ=çççwé̉¥„„„N:ưë_ÿR»iDDDDªaâX±_|ñá‡̃ºuë?üжmÛ°°°éÓ§[sªN"""j˜8V*(((((HíVƠ|Æ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&Ô$ 4Hí&>¥~b\ê!…ê&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD¢(ªƯ†ÆÆƯƯ]í&QƯJIIQ» *`âHDDDDđV5)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤GƒÙ¼yspp°——×ÓO?qëÖ-µ[Ô´äçç¯]»vèĐ¡]»vơóó{饗9R¾ä–ôôônƯºÍœ9³ü&Åø’’’^ưuÿîƯ»‡……ưüóÏåë0.ÆTPP°jƠª#FxyyL›6-55µ|5Å.\¸àîî₫Ûo¿U¸UIw˜Lç̀™£vƒO?ư4:::77·{÷îùùùÇKLL 233S»iMBQQѸqă¾ûî;­Vëăăccc“˜˜¸e˹äQ_{íµ´´4ww÷ÀÀ@ƯM ñÅÅŽụ̈Ë.\hß¾½‹‹Kbbblll§NÚµk'×a\ŒI«Ơ7.66Ö̀̀¬{÷îfffܸq£“““\A1%K–$%%·iÓFo“’4₫0‰TkgÏơđđđóó»~ưºT2wî\77·ÿüç?j7­©Ø°aƒ››[HHH^^ṬçŸúøøt́Øñ÷ß—J&­^½ÚÍÍÍÍÍíí·ßÖ-gPŒïöíÛ̃̃̃]ºt9qâ„ṬÛo¿=ñĽzởjµR ăbd̉O°iÓ¦J%GíØ±c`` \‡A©kwîÜ9~üǿÙ³¥V§N̉« $M!L¼Um›6m*..>}z«V­¤’đđp[[Û]»v«Ưº&a÷îƯfÍeii)•tèĐả¤IZ­V¾aÍ0©%55ơÓO?ơđđ(¿‰A1¾ØØǾ́́I“&uëÖM*ỵÉ'œ™™™””$•0.FöË/¿?~¼F£‘Jzö́Ù±cÇ‹/̃¼yS*aPêZPPPhhè·ß~[Y%!h abâhÇ711éÛ·¯\bjjÚ§OŸ¬¬,éÇƠµ´´4++«N:évèĐÀåË—¥U†IEEEï¼ó½½}xxxù­ ñ+++ KKKỰ₫ưû8{ö,£ËÈȈwuu•³FS¦L),,ܲe ”z@IH˜˜8@ëÖ­³²²¤ï YZZ´IíÖ5 ÅÅÅo½ơÖºuëúơë·wï̃×_½|/ĂdL̉¤Ë—/wÿLj#lß¾ƯƯƯ}èĐ¡R5ÅøZµjeff&‚n¡ôÿ¥¨¨HZe\Œ)++ €‹‹‹^yûöíܸqCZePT§$M!LL  _¿~Z­öĐ¡Cr‰(°··÷̣̣R»uMÂ×_½wï̃1cÆ,[¶¬²¿ê&cź±Ç-«wï̃Ÿ}öÙ>}úHƠăó÷÷ÏÎÎ₫óÏ?u ¥Bä±6crqq155MMMEQ·<%%€«««´Ê ¨NID˜Ô¼1¸zơª‡‡Ç Aƒrrr¤’/¾øÂÍÍ-::Zí¦5 ÅÅÅưû÷ïÖ­[~~~Ơ&u%''—Ÿ9†A1¾ßÿƯÍÍ-888++K*9}ú´——W÷îƯ333¥ÆÅÈ^}ơU77·Ï>ûL¼çÏ?ÿôơơ}â‰'Î;'•0(F3kÖ¬ gQ‚¦&A,û'ỜêƠ«£¢¢œœœüüü.]º”àéé¹zơệ¯å“ÁeddøùùYZZ>₫øăå·>ÿüóaaả2ä¢3gÎŒ1â¹ç[¸p¡n9ƒb|_~ùå'Ÿ|bkkëíí——wüøqA.\8xđ`¹ăbL™™™£Fúûï¿]\\<==³²²NứÙ³JveeeåäääääÔªU+µO«°µµíÙ³§´|àÀ½­”œœœ:wî¬vc‰¨ÑbâHDƠ•——'-9rÛ¶mIII‡ŒŒ´²²ŸŸ?}út%» ‹‹‹‹‹[±bEívåÊ•‚‚U®‰Ñ-w%üđĂ£Fúä“O¤Miii/^”–u¡Ójµ‹/îÓ§ÏâÅ‹QÉ3EEE111!!!½{÷îÚµëĐ¡CgΜ©×…©»Ï̀̀̀·ß~»GưúơëƠ«×Ê•+kp^º;̀ÎÎ^°`ÁÈ‘#½¼¼† öÅ_ƠàĐ•=;8cÆ Ư'?₫øcwww9Ÿ0a‚»»{~~~…í”ïVgee%''ËåùùùÇ—–‡ "—ÿư÷cÇơ÷÷ïܹ³¿¿ÿرc·lÙ¢{FU_*Z.Ë̀̀ŒŒŒ=z´——Wÿ₫ư§Nzæ̀™Z~§Q½¥Q»DÔ`ÄÄÄH ¶¶¶“'OÖÛÚ·oßgy&##@JJ‹‹‹^…Y³fmÙ²¥ư„††>}Z.IMMMMMƯ±cḈٳnj£W?777$$䯿₫’Vsrr>₫øă‹/Λ7¯f'˜=zôèóçÏK«gÏ={ö́ü!eºuzh%́́́|}}¥8 ß’NHHº<;uê$ן1cÆ®]»äƠôôôôôôÄÄÄøøø%K–¤I o½ơVff¦´——wụ̀å}ûöM˜0!<<¼î.©…=D¤Ô/¿ü"-6õ¼|…•+WnƯºuëÖ­ÔÛ”œœ\uÖ`ÅRÖhaaѯ_¿±cÇvé̉€(sçνpá‚^ư„„„¿₫úËÁÁ¡{÷îr{bccåû¶Ơ•˜˜x₫üyGGÇ.]º4kÖL*ܽ{wRRRú¥—^Ú·oŸ¥¥¥´µoß> ‹Êê4HZĐ} I~ÀQ÷>ơ®]»¤¬Q__ßáÇwèĐAÚ´gÏ„„„]"]¹¹¹o¾ù¦”5úúúN:uèĐ¡&&&¢(®Y³&66¶ö‡ ¢ú†=D¤HQQ‘ܱä́́\Ư_»vÍƠƠủ¤I>úh‹-*¬#g3“&M’{4_|ñÅ#GhµÚ£G¶oß^ï#₫₫₫K–,177ÏÈÈ7n\ZZ€åË—ûùùỚ4ßÿư°°0.\>|øưû÷$%%•ăÄ ‡¶³³³³³AZmƯºơ£>ZEừ™3G«Ơ&''gee988 ’å‰'¾ûî»̣̉ˆ#¤ûÈÉÉɾ¾¾5»D²U«VIă 8PîÂộ̣úè£,]ºÔ˜-‘q°Ç‘ˆÉÍÍ•—kđ´¥¥å5k‚‚‚ºtéRỸ)ei¶mÛ+å©ÑÑÑ;wîܹs§ÜÙ&355ưàƒ̀ÍÍ¥&½ơÖ[Rù¯¿₫*ïªZ:tè eÚ·oïíí--ë¾E^G‡VÈ̃̃̃ÇÇ€(RjxñâÅË—/x́±Ç<==åC† Y´hÑ¢E‹Æ'•äææÊm̃¹s§ö‘sÓ^xA.9r¤ô fzzz£ QÅG"RDziZRÅ8Ơ•騱ăÓÍ̃½{Kưaiii‚ xzzöéÓ' àÉ'Ÿ,_ßÍÍ­mÛ¶º—DQ¼|ù²««ku©×Ûgkk+ï°®­Ü Aƒ¤¡Ëúé§áÇË÷©u_‹‘›”}èĐ¡äääßÿ=))éîƯ»l‰ÔÉ à¥—^ª°ÂÅ‹ƯƯƯëîR‘ñ±Ç‘ˆ133³··—–Ë÷ÀIrrrnß¾}ûöị́ïËŸ­Âo¼*uăEñ̀™3+V¬ -Ÿ­¶lÙRwỢ̉̉¡‡’–å»êƠ"ß2®pµN­Ü€¤.=é¾<¦£̃@<……… ,đơơ1cÆêƠ«´Z­tkÛ rsså—Á+sëÖ­:½Dd|L‰H)///i!>>¾Â!] Ô£G=zÈï_˪HÂdfö́Ù Ÿ}öYPP¼éĉåg̉ËÊỂ]½wï|?ƯÉÉ©N/…‡vppî¡ggg;vLˆÇÅÅE¯ooÅkÖ¬ÑjµÎÎÎsæ̀Ù¾}û/¿üâïïo¨fX[[ËĐ«W¯̃W‘¡C‡Öé¥ "ăcâHDJɲ¥§§ûí·z[ăăăåÎ6é9¼j)((È̀̀̀̀̀,((5€o¾ùFZøàƒBBBÜƯƯMMM¯]»¦ü(lùc=&-hµÚGuØÚÚÚØØØØØTñz85PL‰H)ÿ^½zIËsçÎ]¶lÙ7nÛ¶M~u÷ÑGíØ±cuw~₫üù§ÿ!hjjÚ«W¯Q£FIt; %………}ôQaa!€7n,\¸P*б.<đĐ̣§OŸ–‡Cß»wobbbƠ»Urô˜˜˜øă?¤½ÄñîƯ»̣mb9ÿ;s挒Qx”·\₫fظq£üè={|||zôèáïïoØG*‰¨>àË1DT ï½÷^ppđ½{÷DQ\²dÉ’%Ḱíí³³³µZ­T¡Y³fK–,©Ãæîî̃²eË̀̀L­Vâïïokk{ơêƠ¸¸8©Â€Êjï̃½?₫xRR’t³ØÄÄä7̃0Â¥¨úĐ̣@Ü÷îƯ>|xÇoƯº%¿M¢ÇÆÆFz^pụ̀å©©©ăÇ×hªúáܲeKooo9“kß¾½µ¼O777&&&&Lغukÿ₫ư¥­;wî”oC—§¼åÛ¶m îÔ©“¥¥¥³³ó€Ö¯_?gÎ%gAD P~|2"¢úlñâÅË—/Đ¿ÿeË–5‘C×@QQQ||<*¹ËODT|Æ‘ˆ¨q̉h4L‰È°x«ˆˆˆˆaâHDDDD0q$""""Eør )ÂG""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E₫?Ú×0ßXIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/sigmf_101.png000066400000000000000000001135631466512601400221270ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\ƠVđç2DYEpa…ëVªâ¨ qà̃­(âxqï­E눻¤îQ'Uë@«UQTÜ{ "ª ²¸Ü÷Ô$\Ö.œ¿ïÇOûää$9IDÏINdJ¥’²£ÅºP8 qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµè°n@$—ËY7̣W`` ë&0€Ä1_ÏßLR&—ËqS¤7Ep_$7E‚m'†ª@-H@-H@-H@-H@-H¡X8}ú4ë&€*ÜiÂ}‘ Ü$ $ $ $ $ $ $ $ Ö P%—ËY7—ÀÀ@ÖM(8€á/r(0ø‡ú0T jAâjAâjAâjAâjAâjAâjAâjAâjAâ9fgg'“Éd2YÏ=Y·%c£FâZX±bEÖm):8@nÔ¨QcÏ='N䣣£GY©R¥̉¥K·lÙ2 ‹m/\¸àààP®\¹ï¾û®yóæGQçˆÉÉÉM4iÚ´©¸0³ă2dÏ=M4a}$æææ hƠªÅÄÄ4lØpûöí-Z´øßÿ₫÷âÅ ''§»wïf¸á©S§Ú´ióêƠ+—‘#G~üø±W¯^[¶lÉöˆ³gϾ~ưº¸$‹ăÚÛÛ0 J•*¬¯S‘‚Ä@c …B¡(˜c%%%¥¦¦²>ăÿ¬Zµ*88ØÛÛ{ï̃½k×®½|ù²L&›2eJ†•gÍU¾|ù;wî¬ZµjñâÅwîÜ©T©̉üùó³>ÄÙ³g===uttr}\È;$yemm=ỉ¤ơë×—(Q¢N:3gÎLJJâ+¬^½ºnƯº¦¦¦7̃»w¯Ê¶·nƯªW¯^½zơÔ©?a„iÓ¦êéé5nÜøäÉ“)))³fͪQ£†¡¡¡ƒƒĂ“'O¸Ê‰‰‰‹-ªQ£F©R¥*W®́ææöï¿ÿæÇØ¿¿………««+·XµjƠ>}úøùù½{÷N¥æ×¯_?~Ü¥K###®ÄÀÀ E‹¯_¿NLL̀lÿïß¿8p ››[… rw\Đ$pèĐ¡qăÆµlÙrÆŒeË–ơđđh×®R©$¢yóæM<¹lÙ²3f̀5jTll¬‹‹ËñăÇùmĂĂĂ;tèË=—mư={öܹ́ÓƯƯ}₫üù!!!}úôiƠªƠùóçGŒ1pà@??¿₫ưûs5ƯÜÜ~ươ×+N<ÙÎÎnÇ=zôĐø¹ÇÄÄ<₫ÜÁÁA&“ñ…mÚ´IMMMÿ¤£¶¶öưû÷-ZÄ—¤¤¤<|ø°nƯºúúúî_©Tººº˜˜¬Y³&×ÇĐÉû. HHEF²l@£F™­yóæÍ’%KfÍÅ-NŸ>ƯÓÓóÀưúơÛ½{·­­í™3g¸aÖéÓ§›™™>}ºk×®\eŸùóçÏ=[KK‹ˆ²­wÿ₫ưêƠ«‘ÎôéÓăăăõ¼©««KD<đ÷÷Ở̉:pàÀ Aƒ¶oßÎmèææv́رwï̃YXXhđª¼ÿ^©T››‹ Ë•+GD?~T©¬££S«V-.̃µkWppđÉ“'ß½{÷Çd¶OOO??¿€€€R¥Jåú¸ H đpw§ưûY6@©̀l™™™øÑº¹sçnÚ´éàÁƒưúơ»qă†ÿp^dd$%$$đ•-,,ø¬‘ˆ²­oooÏeDäàà@DÎÎÎ\ÖHD₫₫₫ †††2™́Ê•+aaa•+W&¢-[¶døJJJÊÉ“'3;µîƯ»g}U¸¶ ¹‘èÈ,ư… Q»ví¸¦wăÆÙ³g{zzÖ¯__SÇ…\Câ µjƠ*Q¢¿h`` —Ë_¼xAD&&&W¯^={ö́³gÏ‚‚‚?~œ’’"̃V.—óY£:ơÍ̀̀ø˜ËÓ—‘¾¾₫5k¦L™bmm]«V­fÍ999uîÜYÜNN|||CØỀÓeq{bccÅ…111DdjjņAAA ×®]sssk̉¤ÉÓ§O¹₫BñNœÛµk7~üx r Ï8ä ¤¤¤¯_¿víÚµE‹¾¾¾666S¦Lyúô)ÿ^ÇØØ˜Ơ©¯¾1cƼ|ù̉ÛÛ»nƯº§NêƠ«WƯºuß¿¯RÍÈÈH™¹lbnn®¥¥¥2:ADVVVYo[ªT)GGÇeË–}úôéèÑ£*k7õR½zơåË—{xxxxxDGG¿yóÆĂĂcß¾}y9.äz đذ–/gƯˆŒ=ỵ$99™ïíKLL|úôiëÖ­ưưưO:µfÍ &đ•UzÅrZ? ‘‘‘ÁÁÁ¶¶¶nnnnnn©©©7n7nœ——×ܹsÅ5ó8T­££S³fÍË—/‹ /]º$“ÉøÇy'ÓÑ£Ç={~₫ùg¾ĐÄÄ„2êÚä̃L_µj•¸0**jæ̀™­[·vvvVÿ¸ H đ05%©A~üøqơêƠÓ§Oç-ZÓ³gÏׯ_Q5ø‡Ϭ'/§ơ³øă?º»»s¯0kiiµnƯDcÙ¼<UѰaĂ&L˜pâĉ.]ºч>Ü®];kkk•7&¢íÛ·ÿôÓOüÛĐ;wî$"•O‘»»»»»»¸ÄÚÚº|ụ̀×®]ËéqA#8h€……Åœ9s®^½Z¯^½k×®={¶iÓ¦®®®¯_¿6006lØ€¬¬¬®]»v₫üù²eËúûûûúúv́ØQe?9ªŸ…† Ö®]{Ù²e!!!µk× ôơơ555uvvV©É Uçåô¼mÛ¶Œ3ÆØØxÇ üœ̃Ë–-[ºtéÈ‘#Í̀̀¸‰„5jÔ¡C™Lvö́Ù7nLœ8±nƯº=.hqĐ€ÆŸ={öóçÏk×® Ÿ:uê… ´´´*UªtêÔ© *üöÛo«W¯Ö××đàÁ̉¥KcbbÖ®]›~?9­Ÿ…%Jøúú4èêƠ« ,¸xñb»ví®\¹’½q†††~~~?ÿüóáÇ===«U«æççÇ'úË—/Ÿ?₫úơ+·8wîÜ;wjkkoÚ´ÉËË«D‰û÷ï_½zµÆ 'Ëă¿0 =¹\ȺFhh(†-¤7E$r_ Ư¤ÖÖÖơë×?räë†;;;ccă .°nH6œưưưĂĂĂ³¨“‹ßo…î·¨¦ ÇÔ‚g 7>|øpàÀ++«æÍ›³nKnƯºơâÅ‹°°0Ö )R8äUÇ«T©ÂºíÉ“'ưúơëÑ£‡4Ç­[·zyyQ… X·¥è@âW7ndƯ„‚v÷î]ÖMÈÆ¦M›6mÚĺE qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ q€³³³“Éd2™¬gϬے±Q£Fq-¬X±"ë¶H 7jÔ¨±gω'r‹ÑÑÑ#G¬T©Ré̉¥[¶lŶ<øùçŸË—/_ºté† ®^½:%%%Û#&''7ỉ¤iÓ¦âẦ;dÈ={ö4ỉ„ơu*RtX7 %ssópqLLLÆ _½zƠ§O33³Ă‡;99]¸pÁÎÎ.ư†!!!­[·V(={ö¬T©̉¹sç&O|é̉¥#Gd}ÄÙ³g_¿~]œ fq\{{{{{û'N¼~ươ¥*:Đă 1 …B¡P̀±’’’RSSYŸñV­Źíí½wï̃µk×^¾|Y&“M™2%ĂÊ“'O>wîÜ;,XpơêƠ¡C‡=zồ™3YấÙ³:::¹>.äG€¼²¶¶4ỉúơëK”(Q§N™3g&%%ñV¯^]·n]SSÓÆïƯ»WeÛ[·nƠ«W¯^½zêÔŸ0a´iÓ ơôô7n|̣äÉ”””Y³fƠ¨QĂĐĐĐÁÁáÉ“'\åÄÄÄE‹Ơ¨Q£T©R•+Wvssû÷ßóă ́ß¿ßÂÂÂƠƠ•[¬ZµjŸ>}üüü̃½{—¾̣ùóç[¶lÙ¨Q#¾d́رDtíÚµ̀öÿ₫ưûº¹¹U¨P!×Ç…¼Câ ‡7n\Ë–-g̀˜Q¶lYvíÚ)•J"7õäɓ˖-;cÆŒQ£FÅÆÆº¸¸?~œß6<<¼C‡±±±Ü l¶ơ÷́Ù³sçNww÷ùó燄„ôéÓ§U«VçÏŸ1bÄÀưüüú÷ïÏƠtssûơ×_+V¬8ỵd;;»;vôèÑCăçóüùs™LƶiÓ&555ư“)))cÆŒá2E^XX•,Y2Ăư+•JWWW“5kÖäú¸ xÆ ggÚ¿Ÿe”ÊLW½yófÉ’%³fÍâ§OŸîééyàÀ~ưúí̃½ÛÖÖö̀™3Ü0ëôéÓÍ̀̀NŸ>ƯµkW®²ÏüùógÏ­¥¥EDÙÖ‹‹»ÿ~ơêƠ‰HGGgúôéñññ7õÔƠƠ%¢øûûÇÆÆjii8p`Đ AÛ·oç6tss;v́Ø»wï,,,4xỸ¿¯T*ÍÍÍÅ…åÊ•#¢?ªTÖÑÑYºt©¸äÓ§OK—.ƠÖÖîÓ§O†û÷ôôôóó (UªT® Ä@̀̀̀ÄÖÍ;wÓ¦Ḿׯß7ôôôø‡ó"##‰(!!¯laaÁgD”m}{{{.k$""rvvæ²F"rttô÷÷OHH044”ÉdW®\ «\¹2mÙ²eË–-韒’ṛäÉ̀N­{÷îYŸ;×6CCCq¡‘‘ßø,\¼xqøđáÁÁÁ›6m²±±I_áÆ³gÏöôô¬_¿¾ ¹ƒÄ@jƠªU¢D ~ÑÀÀ@.—¿xñ‚ˆLLL®^½zö́ÙgÏ=~üXeê¹\ÎgêÔ733ăc._L_BDúúúkÖ¬™2eµµu­Zµ5kæääÔ¹sgq;9ñññY a+³èhµ'66V\CD¦¦¦™mơêƠ«±cÇ?~ÜÆÆæÜ¹smÚ´I_'&&ÆÙÙ¹]»văÇ×Ôq!/8@¡1h¢Yùtttâăă¿~ưÚ«W¯S§N5jÔ¨}ûöƯºukÚ´é?ü ®ill̀ÇêÔWߘ1cz÷î}âĉ .œ:uÊÛÛ[.—ûùù© ïe›fÁÜÜ\KKKet8""‚ˆ¬¬¬2Üdß¾}#FŒ(]ºôæÍ›‡ª̣®4oóæÍ!!!=zôX¾|9W­P(<<<*UªÔ·oßœ̣‰#NNääĺ™x̣äIrr2ßÛ—˜˜øôéÓÖ­[ûûûŸ:ujÍ5&Là+g1ÙuNëg!22288ØÖÖÖÍÍÍÍÍ-55uăÆăÆọ̣́;w®¸f‡ªuttjÖ¬yụ̀eqá¥K—d2Y­Zµ̉×?~üøÀúé'///•fÜ›é«V­FEEÍœ9³uëÖÎÎÎ9:.äG øøñăêƠ«§OŸÎ-.Z´(&&¦gÏǗÓ5jÔàk>|8>>>³¾œÖÏB``à?₫èîî¾hÑ""̉̉̉jƯº5‰Æ²yyª&¢aÆM˜0áĉ]ºt!¢>>|¸]»vÖÖÖé÷6}úô+î̃½[[[;ëƯº»»»»»‹K¬­­Ë—/ÏOÜ£₫qA#8h€……Åœ9s®^½Z¯^½k×®={¶iÓ¦®®®¯_¿6006lØ€¬¬¬®]»v₫üù²eËúûûûúúv́ØQe?9ªŸ…† Ö®]{Ù²e!!!µk× ôơơ555uvvV©™Ç¡j"|ØÓÓ³Zµj~~~ü·¿|ụ̀ùóç¯_¿Qpp0=}útG:<Đ́qAădyü¤'—ËY·̉ Ű…Ôà¦H“DîK¡ûƒÔÚÚº~ưúÙ~j¹(±³³366¾páë†dĂÙÙÙßß?<<<‹:¹øưVè~‹j z@-xÆrăǰ²²j̃¼9ë¶dàÖ­[/^¼à>f‚Ä ¯:v́X¥JÖ­(hO<éׯ_=¤™8nƯºƠËË‹ˆ*T¨Àº-EG€¼Ú¸q#ë&´»wï²nB66mÚ´iÓ&Ö­(jđŒc6BBBärùưû÷Y7€1$ÙØ½{7ë&H†ª3óüùóăÇïß¿Ÿu[$‰cƺvíúï¿ÿ²n€„ q̀ØâÅ‹¹ î÷́ÙsơêUÖͰ/_(>âăéñc²²¢/_̉üˆ ’%))‰’’èëWJJ¢»wI.§”JN₫{ñ"5mJ))¤PBÁú” Ø)#‹#¢T̉̉¢T•Uñd`@ñ鶸ͺÉl q̀?³€ôçÄȱÄD &??̉Ó£7oèÍzû–̃¼¡×¯­##‰ƠÅ^¼b[[Ö×—¸{©TU£¸̉¤Ÿ(ü̉ûBÍưă×"½/ª¿(u«@â˜/är¹JÉéÓ§Y7ªX{ưú5ë&€*Ü”|¢¥VâÉ“OŸ–xö¬ä“'²ÄDÖÊÔ'2 "› ²ÙJÿ«J!¯¨÷«ƠcƯ4(f¼Ffµ¶å%Öí“ $ù¢x~¿Râ¤đù]P›’WkÖĐçÏäçG/²nJ’¨ÄirzMQí‡Tç!Ơ‰&£,ê_¤Ö¬› Ù@âPHܾM‡ÓáĂ\ ÇƠÓ£ ÈȈ ÉÈè¿à̃=ể… ÈÀàA„å…  ç•ûç¶qüWüµP”á'@ÂÖ¬¡µkéåK ́JW—¾ÿªU₫««KÍ›“¸Vhhh=Áбct́Ư¾Mt™ơÅĐ%ǻÑ^¹\NÅrp‰#€Ä̀™C‹årÛ¦M©~}êĐ4 <Ÿ7$„vî¤%K(%E“ç§¥E5k’ ÙØPµjÿVViê¤{P$ÇÎÎî̃½{DÔ£G#G°nNFÅ«:<<œus$đáOä`“¶m©Ort¤jƠ4ƠC‡èôiÓ£GéÓ§<íÇÄ„́íÿûơư÷T£F~]6`«Fîîî¾ư%::zÆŒ§NúôéÓ?ü°|ụ̀&Md»“–-[:::Î;W#&''·hÑB&“]»v/̀́¸C† ĩ¼ùúơëñ*!q`çßÉÑ‘<ɾf¹rÔ mÜHUªh¶ §OÓªUtö,_`¤₫¶eËR›6äà@mÚMÁ\2ssópqLLLÆ _½zƠ§O33³Ă‡;99]¸pÁÎÎ.‹=ܽ{÷Ê•+jqö́Ùׯ_ç£Y×̃̃̃̃̃₫ĉH5‰# ë×Ó¸qÙÔiÑ‚&N¤^½4~đ₫!7·?9Ù¼9uïN=zh°‹³R(D¤­­]ÇJJJ̉ÑÑÑ̉̉b}̉DD«V­ ̃±cÇ Aƒˆh„ 4˜2eÊùóçÓWNII9₫üƠ«W7nܘªæ!Î=ëéé©££“ëăB̃Iâw@q¡TRëÖ$“e5ĐÖ­¤T’RI—.i6kœ5‹d2’ɨmÛ́³Fcc0îÜù¯-J%]¾LS§"k̀˜µµơ¤I“Ö¯_oll\¢D‰:uềœ93))‰¯°zơêºuë˜6nÜxï̃½*Û̃ºu«^½zơêƠS§₫„ ¦M›fhh¨§§×¸qă“'O¦¤¤̀5«F†††O¾uc'&&.Z´¨F¥J•ª\¹²››[>}Pwÿ₫ư®®®ÜbƠªUûôéăçç÷îƯ»ô•###;tè0₫ü?ª¹ÿ÷ïß8ĐÍÍ­BÚ‡wst\È;$ÙX´hQ`` ÿ“ Kï̃‘LFZZäç—ÁÚúơé̉%R*).†Ơàaß¿§öíÿË—-˦̣È‘´{÷¿\EkÖP–ĂŒÆ¡C‡ÆײeË3f”-[ÖĂĂ£]»vJ¥’ˆæÍ›7ỵä²eËΘ1cÔ¨Q±±±...Çç· ïĐ¡Cll,7›mư={öܹ́ÓƯƯ}₫üù!!!}úôiƠªƠùóçGŒ1pà@??¿₫ưûs5ƯÜÜ~ươ×+N<ÙÎÎnÇ=zôĐø¹ÇÄÄ<₫ÜÁÁA&“ñ…mÚ´IMM H_ßÜÜ\©T*•ÊgÏ©³¥Réêêjbb²fͼ̣CƠùÏ̉’2́ÿ(Q‚.\ fÍ4~Àäd80û—mŒịd<™ ₫+ •îgfˆÈ™œ÷Ó~† Èb̉–7õ,Y²dÖ¬YÜâôéÓ===8Đ¯_¿Ư»wÛÚÚ9s†f>}º™™ÙéÓ§»víÊUöññ™?₫́Ù³¹qçlëÇÅÅƯ¿¿zơêD¤££3}úôøøø›7oêêêуüưưcccµ´´80hĐ íÛ·sº¹¹;v́Ư»w¼,ïß¿W*•æææâÂråÊ‘ú}Yđôôôóó (UªTẢCâŸÚ´¡ ?yß¿?‰5hÈÚ±#›:#F‡åà5È™™Ù”)SøÅ¹sçnÚ´éàÁƒưúơ»qă†ÿp^dd$%$$đ•-,,ø¬‘ˆ²­oooÏeDäàà@DÎÎÎ\ÖHD₫₫₫ †††2™́Ê•+aaa•+W&¢-[¶lÙ²%}ăSRRN<™Ù©uï̃=ësçÚfhh(.422âŸ7nܘ={¶§§gưúơ ̣¸!$ùcôhÚ´)ƒ̣?ÿ¤=5~´gϨU+úđ!Ó ––´v-ơéĂú²]µjƠ*Q¢¿h`` —Ë_¼xAD&&&W¯^={ö́³gÏ‚‚‚?~œ’vnL¹\.~Ç%Ûúfff|̀å‹éKˆH__Í5S¦L±¶¶®U«V³fÍœœœ:wî,n''>>>‹!lnÀ= ÜÑcccÅ…111Ddjj—«ắ́Ü®]»ñăÇäq!3H4-*2üKëêUjÚTăGóô¤éÓ3][¥ íÙC?₫ÈúhHuª̃œ³n…ºtttâăă¿~ưÚ«W¯S§N5jÔ¨}ûöƯºukÚ´é?ü ®ill̀ÇêÔWߘ1cz÷î}âĉ .œ:uÊÛÛ[.—ûùù© ïe›fÁÜÜ\KKKet8""‚ˆ¬Tævϡ͛7‡„„ôèÑcụ̀å\Itt´B¡đđđ¨T©Rß¾}óé¸$5m­X¡Z¸m ¢ñC•/Oïßg¼ÊĐö́¡oOÄsiî\Rk¦è‚÷äÉ“ääd¾·/11ñéÓ§­[·ö÷÷?uêÔ5k&L˜ÀWNÉük<9­Ÿ…ÈÈÈàà`[[[77777·ÔÔÔ77ÎËËKeÂí<UëèèÔ¬Yọ́å4Ÿ¡¼té’L&«U«V^®*÷fúªU«Ä…QQQ3gÎlƯºµ³³s>2ƒÄ@sD¯v₫gÚ4úÖS¢AtñbÆ«–.¥™3Y_‡béăÇ«W¯₫­ûwÑ¢E111={öäfŸ®!ú~ÎáÇăăă3ëáËiư,₫øăîîî‹-""--­Ö­[“h,›—Ç¡j"6lØ„ Nœ8Ñ¥K"úđáĂáĂ‡Ûµk—ŧÏƠáîîîîî..±¶¶._¾<ÿå˜|:.d‰#€&œ9CNNiJéÜ9'³—m¾ûüü, YXX̀™3çêƠ«ơêƠ»víÚÙ³g›6mêêêúúơkƒaÆ 0ÀÊÊêÚµkçÏŸ/[¶¬¿¿¿¯¯oÇUöăàà£úYhذaíÚµ—-[R»víÀÀ@___SSSggg•yª&¢ÁƒoÛ¶mÀ€cÆŒ166̃±cGBBÂüùó¹µË–-[ºtéÈ‘#5{Ù³>.hæqȳV­T³Æ₫ÑxÖèèH2YYăàÁ¤TRD²FÆ7n|ö́ÙÏŸ?¯]»6<<|êÔ©.\Đ̉̉ªT©̉©S§*T¨đÛo¿­^½Z__ÿÁƒK—.‰‰Y»vmúưä´~J”(áëë;hĐ «W¯.X°àâÅ‹íÚµ»råJ~ôÆúùùưüóχöôô¬V­ŸŸÿmÀ/_¾|₫üùëׯ|\Đ8Yÿ…éÉạ̊ÀÀ@Ö­€4BCC1l!5E禤ÖôŸ«¿₫J fP¾l͘¡á³‘È})tZ[[ׯ_ÿÈ‘#¬Rṕ́́Œ/dØ.%ÎÎÎ₫₫₫áááYÔÉÅï·B÷[TSĐă*Yă¬YÍŸ=#™,ƒ¬qéRR*5Ÿ5d Ï8ä–JÖK¥Kkp÷¶¶¤Zˆw_@:>|øpàÀ++«æÍ¥8G̉­[·^¼xƺ!E zrEœ5™‘R©Á¬q̃<’ÉT³ÆÙ³I©DÖ(Q;vl“tJÜ“'Oúơë·råJÖ ÉØÖ­[ûơëÇ¿ G€œgµjÑ£Gù´oÎ÷ßSp0ëS†,mܸ‘u ÚƯ»wY7!›6mÚ”á×› ĐăCầÎÑQƒYăd!k©@â ¶ÀÀ4™]ÿ₫œs§Nê×/M‰»;)•˜d$‰#€ÚªWâÉ“iï^́ơư{’É̉t\–)CJ%-ZÄú| \%t 2’å}W8¨GÜ×èáAz!`üx*_>MɲeĂúd Ü<'#™üM³n d /ǨAœ5öéCß¾GœG*Đ›7iJÛ7^Ñ+Gr &<Å P8 Ç ;]º±®.:¤‘½Êdi²F'§â•5®¤•2’U¦ÊÈ $Yúưw:yRXLJ̉È^Ũ¾|™|}YŸiA±&kɦ̉Ôô«JRÉStJIÅ)ƒ(T0T ¹÷ïiøpaQ]‚wï̉?¤))&wèNCj˜YR8•¦z’§¸D.—³n2¨Bâ9ñ{+—/ç}kÖФIÂbƠªôâës̀̃ä=‚Fd¸ª •ù‡₫iDTÊY·ZBBCC­­­Y·€‰#@¦ÄĂÉÓ¦Q¿ÆÛ«9",BÛ¶±>Ç|V“j>¥§®JC·̉VÖ €œÁ310b[[Z¾<ûëƯ;MÖ¸}{ÏÉYF² ³ÆƒtPIJd…z̉9q‚„Å<›öíK₫),†„Px́D|)ƒ7}LÈä6Ư¶¦¢{æÅG€tºvâ¯_ó¸³~ưèđaa±¿ ÓŒ]£kéËÛQ;Lë P4`¨ -ñ³ŒưúQ‰yÙYÿ₫tà€°XT³Æ¶ÔVF²ôYă¡$%²F€"‰#€È‹tå°¸o_^væâ’fE2käeü‡₫Q)ŸA3”¤ô"/Ö MBâ R­ß»——= D{÷ ‹E/kOăe$ÛOûUÊ—̉R%)—Ñ2Ö ÍĂ3ß &ÄơêQ½z¹̃Ó!´k—°XIJÆÔñ4N_¾–Ö§ñ¬[ù‰#À7[¶qº *²YăMºiOöéËgÓ́…´uë ß!q ¢´Ó}çáÑÆíÛ‹lÖ¨Oú_è‹Jáp¾™6³n$D+W q‰Ô¯_îvJC‡ ‹E&klKmÓ¿₫R‘*¾¢W¬› /ÇM*Äy˜¸±jU!¾}›ơIiÂrZ₫¥éÊTYIJdÅz Ø+_^ˆư5×»u¯\I?üÀú¼̣& È }y…U¢J¬[l Ç·¤$zÿ^Xœ??w»g]ºĐäɬÏ+o:Q§ôYă^Ú«$%²F€â =P¼YY ñ_ånÍ qé̉tü8ë“ʃ3gFÑ(•ºT÷>ƯgƯ4`‰#c‰‰!,?Q­6wwº&ú̉^l,ë“Ê-̉R–KóFO)*Oñ¬ÛR¡j(ÆÄƯ'OæbÿMK–‹…÷5êơ´^F2%¥9St Y#ˆ¡Ç«¸8;uÊÅ>:tâ˜Ög”[2’©”ô¢^>äĂº] 9èq€âJÜƯxút.v ~!föl*S†ơåÜ*Z•>kL¥Td!ô8@±¦‡PÜs¨1c„¸D ZX¿·—>e\D‹ú‡ö—YËrµ?(úĐăÅ’¸»ñ́ÙœnF7 ‹y˜2œ=´'}Ö¨$¥;¹³nHG(~>}¢xÑ;mÛætUªñ­[¬O'‡ä$HÅ%Ëi¹Êk1ÂP5?âîÆóçó²ơO?Qƒ¬OGm/é¥5Y«"eơ¡Ç™éËaÑÁ!G[¯]Koß ‹°>µư₫§’5z’'²FÈô8@1#î0ôóËéÖ' q!µ1Ă'Y7 ô8@qrơ*%' ‹-[æhkñü;üÁú\Ôs‰.©dƯ©;²FÈ$Pœ8; ±¿6(zŸ¤~ư4{’¬4°µ—Ü¢[Gé(ëv@a…¡j(N^½ầѦ{öñƯ»¬OD *Ú¤B)¬…z Ø˜>]ˆgÍÊѦâAêÇYŸHv‚)X%k\BK5@̃I´ÇñëׯáááVVV–––ÚÚÚ¬[…Ÿ§§/Y¢₫v+W ±ơîÍúD²4ƒf,§åâ’ôÑŒ̀X· É%—/_̃¸qăƯ»w•ß̃WÔƠƠmÓ¦Íøñă«U«ÆºuPhƯ¾-ÄU«æhÓ©S…81‘ơ‰d©2U~EÂp| *ñ• Ûgm@¤5TưË/¿¸¹¹Ư¹sG)å"99ù̀™3]»vƯ¿?ë@¡%₫<̀?ÿ¨¿¥¥ÏÍú,²$#™8kCc5€fI(qôöööññ—”)SFöíÁ¢ÔÔÔ ܸqƒu3 púüYˆÅ_ ̀̉?ÿĐ»wÂâÂ…¬Ï"é£ÊC÷è̃zZϺ]PÔH%qLJJ̣ööæbkkëơë×ß»wïÖ­[÷îƯÛ´iSƠªU‰H¡Ṕ¿Ö ¦‘#…xéRơ·wSFE±>‹Ll£m娜¸DIÊzTu» ’Ê3>|ˆ%¢R¥JíÚµ«\¹ÿ₫ÔÓÓkÓ¦M:uœœœââân‹ŸRPÓæÍBkä•-[¶N:DTºtiÖ-€ÂæÂ!®__Í"#É×WX<~œơYdD—tÅYăt¬̣•TG"jÑ¢…„„$%%©¬JNN~ñâÙÛÛ³n&6¹z-ÆL4}8ó”ÉÄS3^¢KäÁºQPÄI(qœ9sf¥J•"##ÇÿNô8ú‡&OüáĂKKË1cưn&6©©BljªÎ¿ÿ.ÄÔº5ëSHGåU%)[P Ö€¢O*Ï8Ñܹs---_½zuáÂ…K—.ÙÚÚ™™EFF%''‘••ƠÂtï4nذuĂ@Âú÷bµÿ¸>\ˆăâXŸBZÁlC6ü¢Œd©”‡ư䀄ÇsçÎñ±B¡xúô©J…›7o²n#6ûö ñèÑêl1v¬;9±nZûi¿39ó‹ ©áMÂŒPp$4T  aư%Ä-[ª¹‘¸_Rü~ sSiª8kI#‘5@“Păhơ:ÔƠ½»«÷ZL у‚3f°n¿¸aÔŸüùÅ-´åô?Ö€bGB‰ă„ X7.µ₫¸ór3Z¶Œu›¿©MµÓc~ñƯĂü̃À„„GM7NˆÅo»d®L!₫ăÖíÿƘŒ£)_T’’u‹ øbœ8öîƯ›ˆÊ•+·iÓ&.ΖÊ÷¬ƠtèĐ¡ƒ—*UªU«VÓ¦M311É¢~RR̉Î;}}}CCCMLLêÔ©3v́Xµ¬­}©Yüå˜L<}æjgçl·(é§ƯaƯ"(Ö'=""+++>ΫW¯ọ̣̈200hÔ¨QXX˜OPPĐ®]»ôơơ3¬¯P( tçÎKKË-ZDEE9sǽÙ³;wîlÔ¨Û+9¦««N­5…ø‰4>¿‚¬¤¦è¿Uèíímnn~úôiooï3gθºº>xđ`Å™mràÀ;wît́Øñ́Ù³ëÖ­Û½{÷öíÛ‰hö́Ù¬ÏÔ3j”oßmơưû…¸tiªQƒuû‘5€$1îqœ?>đ±ÆT­T*ƒƒƒMMMUº mmm‰(<<<Ă­ºt颧§·xñâk×®%&&¾}ûvΜ9¯_¿îÛ·¯¡¡!ës€́ &ÄjŒSߺ%Ä—/3n»8ḱNƯ‘5€¤H®ÿ,99ùÅ‹aaa …"Ă :uRo …ÂØØX¥ÜÈȈ̉ö)Éạ̊Ư»wuttŒŒŒ̉÷,ÆÄÄÿµØ‡.\¸P­Zµ!¢¿~,--Gœœ|äÈÖ× ²´c‡g÷Y_â“'™5Yœ5. È@²$ÔăFDÚÚÚ¥J•̉ÈnÍÍ̓ƒƒcbbÄ﵄††r«̉׌Œ$¢*Uª¨”s?~d} s))BœåסˆH<—«ƒ³&‹³Æ%´dÍbÖ€́H¨Ç‘Ë̀äry×®]5•5‘£££B¡¸,zUR©Túùù™˜˜ØÙÙ¥¯_¥Jmmí   ¥2Ít»Üó ƠªUc} sC‡ qvăÔÓ¦ ñùólÚ+Î=ÈY#Hœ„G{{{"ƠôÜ»}ûöỞ̉Z¿~}Ü·ÏĐz{{GDDôîƯ[÷Û‡ÈâăăCCC¹×Öôơơ[¶l¶nƯºÔÔT®BPPĐÆK”(áÀ°_²µ{·wïEÅ „¸I6g+hÅtΦj“ĐPơ¨Q£üüüBBBvíÚåêꪩƯZZZN›6ÍĂĂ£[·n-Z´ ¨U«Ö0ÑLo~~~“&M²±±9qâ-Z´¨OŸ>7n.Oå̉Ă=<€&`¨mí,VN*Ä¡¡רúT?‰’¸X—tßÑ;&× $—8†„„́Ù³'""‚ˆ>}ú4sæLGGÇ={nܸ1))‰uë@’æÎbÑÇKU¼K›­éÔˆ‹39ß§ûü"ŸA:Ç‘ˆ₫øăE‹)Æ›™™7îÖ­[ܪ'O\»vm×®]2ñûD´`÷ïŸY­F„øÊ•jÚ|¿Ÿ„÷q”Är" €<’Pă³gÏ,X P(¸ÅđY#çÆ>>>¬› …Ơ›7BܬYAñ œGóøEdPØI(qܺu+7©ä?₫hbbr₫Û·cëÖ­»`Á‚’%KÑŸ₫ɺ™ 1—. ñ!™ƠêÓGˆW­*ˆv=¤‡?ÓÏü"²F($”8>}ú”ˆêƠ«·mÛ633³Kß₫2˜4ỉÏ?ÿܦM" bƯL˜3„ØĂ#³ZâáI“̣½Q)”R—„̉<§‚ø H(q|ưú5Ơ­[—ˆ"""¶$ËP*ÀIÆ̣Ÿ„Ǿ}ûr8K  7G³ø+³ÙINN³X®\>ËÜ)_|Cọ°3)’ĐPµÎ̃½{7mÚđơë×æÍ›?_kff¶aÆrùú§>./ ñÿ₫—añ¤ßư•mÙA;¶̉V~“ï@‘$ẵA‘²¤¤¤/^Èår-- ơfA.—æ}? A¡¡¡ÖÖÖ¬[ihà¦4nL7nüGDĐwߥ¯"₫ÔT₫ưiDA¶d+¨0gøa‘ Ü *¶×K¨ÇqíÚµ\Đ«W¯+̣å%J”¨Q£ëÖ€ôđY#Q†YăˆBüË/ùØqÖ(₫,5@#¡ÄÑÇÇçưû÷DÔºukqâ*U2,ööâÅ‹óëàâר7̉Fñ¼ßEŒ„{÷îͯ^½bƯ’Pâ8v́Ø={‘——ׇX7¤mÉ!Îèk0âÉyÎË—&´ a‚0-̉ÚK{Y_€ü%¡¡jîệåË·oß¾F&&&2ñ“íDD´aĂÖ- ̣đ'~QA Ö-ÈwJωúïÜ¹ĂºE UçÏ ñ°aé×wê$Äû÷k₫øOèÉLÉ/êרÔ'¡¡juÍ}Ç/£}}…øçŸ5üZT‹ŸĐÖ— €H¨ÇqôèѬ›…Ä­[Blb¢²̣?„¸KÍ\üB̀rZ^ƒ0_J'L˜Àº PØT­¾lÀ!>~\Ăü„ #[P‹i4ơ%(8JÅ_¾|Ơ¥K==½øøx###Öi˜5Kˆ3§Î?U¨Ê'úÄ/^¢K¬¯@’\âèăă³~ưú·oßr‹Í5344tpp2dȸqẳ¿d ÅβeBܧÊÊ„øàAMö £0~/Ä@1$­ÄqÙ²eÛ·oO_°aÆOŸ>Í›7u@̉₫₫[ˆûöƠä{P>FÖÅ“„̃ª~üøñ;¸X[[›/ç{÷íÛwóæMÖͦÄ_–êÙSeåîƯBܽ»&+~!fí`}ØPâèåå¥T*µ´´æ̀™sûöm¾ÜÈÈhƯºuzzzD´sçNÖͦČ?́HDD®®B|ô¨ÆYÊóq[j;ˆ±¾ lH(q|úô)uêÔÉÅÅE___¼ªC‡­Zµ"¢gϱn&0µy³7j$^£̀ŸÑă©4ơ=½çÏ̉YÖ—€ %‘‘‘DdmmáZ"ˆˆ`ƯL¨ví„ØÇG3û¼G÷V̉J~6@1'¡ÄQ.—Q†O1*•Ê7nQƠŒæl€ââÅ !N÷æË?ÿq¯^9 Ù §yØ@Q ¡Ä±N:D0~üx®0<<ü̉¥KcÇåÇ5k²n&°³t©ỵ̈‹xÍ·7ëˆ2xg&—Ä/Ä̀§ùU ÿp€âN¦̀§Ç‚r.""¢{÷îY F;v̀̉̉’uK³!—ËY·̉ Í́)`%77E<“kÚ?»2_“K¦dEQ\lC6Ïé9£ëTĐđĂ"A¸)Tlÿ®—P£™™ÙÊ•+MMM3\khhèáá!ư¬€-´…ω¨ødY“ÖàM49{ö́ï¿ÿ~ụ̀åĐĐĐ„„ƒÊ•+7kÖlĈ†††¬́ˆ'Uèß_¼¦_?!₫ă j ăc¼À“VâHD¥K—4ỉ¤I“ˆ(..®té̉¬[̉ù±³s^#~´q?íg}Ú"¡¡j1…BñêƠ«Ç¿zơJ¡P°nHÀ®]B\«̃»'×­›×ƒÈIÎÇ­¨ƠÏô3ëÓÉơ8¯^½ÚÏÏ/99™+ÑƠƠmӦͤI“đh0¤'yçÏ?ó´«5´Fü8ăEºÈúä¤EZ=û÷ïïÖ­Û¹sçø¬‘ˆ’““Ïœ9Ó¹sgMMé …Î£GB<(ÍÿBC…øûïs„¯ôuMâñh#@zJõ¼¹páBñÀt™2eøX¡P̀;÷Î;¬› ,ˆ?Q-zÀÑÛ[(vsËÓôHOĐ Ö' EJ÷́Ù“’’BD•+W^·nƯ½{÷nƯºuÿ₫ư 6pƒÔÉÉÉ»Ä9@ñ±oŸÛỤ́áˆBñï¿ç~÷¨w¦Î©3ë" =ăxûöm"̉××ß¹s§……W¨§§×¶mÛzơêuèĐ!>>₫Ö­[¬› EÍ,ơ†̃đ‹ènÈŒ„zơôôˆ¨víÚ|ÖÈ+[¶lƯºu‰H[[›u3 ÀƯ½+Ä¢iñØ´x̀:G)q-ăñh#@$”8ÚÙÙQHHHRR’ʪ”””·ª'ñ³fñáÖ­Bñ°a9ØŸX)*ÅÇâ ̉“Pâ8mÚ´J•*EFFN˜0áßÿåË?|ø0ỉ¤÷ïßkii¹åñéw(ŒâªU¹ÿ§/˱º$Lü؆Ú̀ ¬O@̉?ă8f̀ñ¢‘‘?₫̉¥K666fffAAAÜK3¥K—̃¶m[ƒ ض¤ gO!>r$7{ØE»̉C~ñú‡ơ9HăÄñܹs–§¤¤<}úT¥0&&&³úPdƯ¸!Ä£Fñ¡xbÇÜ}0f óAâÑFuHh¨ =à¸w¯P–»S‹?H½‘6²>I€ÂqăèÑ£Y_¶cÇ„¸bEîÿ..BÙäx—Ư¨W¥ª£hTwP,1N'L˜Àú @ñr‰.§ăüâ zÁºE…†ª@Â._âqă¸ÿ;9 e«Wçx—­¨¤¬Ï 0‘Đ—cˆèÆëׯ₫üyLLLfu}:wî̀}º¯7o„¸_?îÿG e;æ`g%©$‹_ơI(q400ˆ677_¸p¡––„ºB€5k„xÂ"  jÔÈÁÉ‘Q£.Ô…ơ¹JÊÏêƠ«GD¥K—FÖDiÇ&Mˆ¨¡@ưéưÈï<çoĐ u·€´$”¢ Oă¿£ïXŸ @!&¡Äñùóç›6mâ☘˜,¦r€¢oóf!8‘r5N½Œ–%R"¿¸–Ö²>+€ÂMBCƠ^^^Ÿ>}bƯ ñ..Dôê•P`n®Ö>fÑ,>Æü;y'¡Ç[·nqA“&Mœœœ0@±ö́™xéđa!Oå˜ñGb₫ µ_¥€̀I(qÔÖÖ&"##£­[·êèH¨aÀ’‘¥M÷́É~#Wråă*TÅ™œYŸ@Q ¡¡ê ‘……²F€âxâD"JJÊÁÖá¾›vó‹¡Êú| %ăÇ711y₫ü¹ŸŸŸÆw~èĐ¡¾}ûÚÙÙưøă¿ụ̈KTTT¶›<|øṕر5rqq¹.̣•øljûMX:5û­+Q%>¾NøÉĐ ơí­X±¢|ụ̀QQQǯ]»¶¹¹y†Óñlذ!§{^½zµ———A£FÂÂÂ|||‚‚‚víÚ¥¯¯ŸÙ&çÏŸ?~|jjj:ulll®\¹âêêºiÓ¦6êϹ&uËØxüxaÉÓ3›M¤ùØ‘íÉơÉJÏœ9ĂÇ=zôè‘Fvèíímnn~øđáråÊÑâÅ‹wíÚµbÅ9sæd¸IttôŒ3ttt¶nƯÊ  ?xđ`À€sæ̀iƯº5>l YéâUºÊ/£s¬[P¤ưèàÁƒ©©©'Nä²F"9s¦‘‘‘¯¯ojjj†›øøøÄÄÄŒ9’ˉ¨nƯº;vŒˆˆxøđ!ë(ê„xÀ€_~–V®̀fSràc|$@ă$Ôă8zôèüØíÍ›7µ´´Z·nÍ—hkk·lỤ̀øñăwîÜiذaúM.]º$“Ézôè!.\¾|ụ̀åËY_$€b íK K“'gµ9 ³;§áøH €ÆI(qœ0a‚Æ÷©T*ƒƒƒMMMMMMÅå¶¶¶DaâøèÑ#“̣åËߺuëîƯ»Ÿ?®^½zÛ¶m³x&4Fœ8~B3zæYàJ®è¿¸™6h„G±ÀÀÀ—/_FEEué̉EOO/>>̃ÈÈ(ûIHHP(ÆÆÆ*åÜ̃2üPMRRRlllµjƠæÍ›·oß>¾¼bÅkÖ¬©]»¶:Ç•Ëå*%§OŸfyA‹½×¯_³n¨Ế¦X‹b‡úö±é5k>††Æe¶·ƯÖÂü;!¡!˜‚'×đĂ"A¸)̀999±n‚TH.qôññY¿~ưÛ·o¹ÅfÍ:88 2dܸq²¬û̉ILL$"•̣̉¥KQtttúMbcc‰(88øăÇ­[·₫̣åËáÇ7lØ0a„'N¨ÓïÈúB‚*kkë¼ï4+››̉¸ñÅ‹¥ø¥ñăË•Ͱ¢ø#1Ư©;îuáJn [éÿZOßCTLHëå˜eË–ựË/|ÖÈKHHذaĂüùósºCccc™L– RGßúUđŸ:\¶lY=ŒË—/?v́Ø={¾~ưúäÉ“¬/@‘&o+eÜ$>61Ét‹¥´T¼x”²>€"KB‰ăăÇẃØÁÅÜç9|/ă¾}ûñ¼™£}êèè¥ïYŒ‰‰!"₫=k1===}}}qyÛ¶m‰èYÚï瀆‰prúg>̃¾=Ó-~!á½k%)YŸ@Q&¡ÄÑËËK©TjiiÍ™3çöíÛ|¹‘‘Ѻuë¸À;wæt·æææ‘‘‘\¦È åVe¸I¹råtuuU†Å¹ê””Ö×  H æCñ7©»wϸºx/Ää7 %OŸ>%¢N:¹¸¸¨5Ø̣o>₫ö ‹ª´‚c(† ŸIè­j¹\~÷îƯ ŸbT*•7nÜ ¢ªU«æt·–––Ó¦MóđđèÖ­[‹-ÂÂÂjƠª5lØ0¾ŸŸß¤I“lllNœ8AD5jÔ˜®L•ûPÖM(dJ¥T^BŒˆˆè̃½{ƒÑ†††Ç³´´dỬlÈår̀ă(5¡¡¡˜Mj2¸)ß̃HëE¡\|ö,µm›¦V…|Oßó‹x“Z³đĂ"A¸)Tlÿ®—Đ3fff+W®Tù6 ÏĐĐĐĂĂCúY#äR@̣Y#‘jÖHDâ¬ñú‡u» UQ“&MÎ=ûûï¿_¾|9444!!ÁÀÀ råÊÍ51b„¡¡!ë@¾9ôßsEŸ‡IÿTs?êÇÇú¤ß†Ú°n7@1"­Ä‘ˆJ—.=ỉ¤I“&Q\\\ÖO"@Ññí›1CH˜́[ẽï÷ô₫à(A­=€†Hh¨:=dÅÈׯÜÿORg¾¬eË4UÊSy>ö'Ö-(v÷8~₫ü9§›³m3䟷$<Ç,—§Y%~uº5ø‘~dƯX€b‡qâØ¸qăœnR<_b(â¾=à8˜vđeây¿_ÓḳáoÑ-Ö-($=T ÅÅúơÜÿÏ’đq¦&M„ơ©"P€º»Bâp齤*|A:ÂÊîÔSăÆ”ă‘ Đ©¼U-“ɾÿ₫ûúơë×­[·L™2¬› dø>ơKzùưÅ—£»€!©$J¥288888øÏ?ÿ¬V­Ú?üP¿~};;»*Uª°nä³W¯¸ÿ_¤Ö|YƒÿÖ$|06°Å8qôññ¹ÿÍË—/‰(55ơùóçÏŸ?ß¿?ׯ_ŸK"ëÖ­[ªT)ÖW 4mĂ"z@uù‚~ø/èB]øÂæÔ¼5ÈÙ@£'µk×®]»ö€ˆ(::úÁƒ|MDŸ?¾xñâÅ‹‰H[[ÛÆÆæØ±c¬/hÔúơD4~ă ~ù…ˆè%½xđ >>^¥‚^:ú¾111aÛ`а ˆè9đ?ü@2ªÀ/b₫é`œ8ÚÛÛ+•J•ẬåËÛÙÙưđĂvvv5jÔĐÑ‘P·(hØù󯨿T§ưD?ñ‹ ©!¦ûÆ9Ÿ5r€sƯ2™Œˆâââñ¼©²IÓ¦MÙ¶4˶đñ]:Đ!~ñ&ỪÍ H¥3ŸüĐ¡CY× dƯXĐ·o)í÷©;Ô7çc̀¿ 5̉}«¾ơëß’%¿dtb×¥ºÍ©9ëö@Réq€âhĂ7Úÿ_lƯù~Í}ºÏºq qâxâÄ ÖW؉‰ñ¥ÿÅŸLùâótuË ŒGÖW˜ù@å₫‹¶ å «SuÑ́< xÆØ(uîÜó~ë}¡!Ûụ̀§ô”uÓ cxÆØ0ܵë÷̃t¢>_x’N²nd =ÀF‚ÿS"¢ cø’ÊT¹ubƯ.ÈG`ă¿y¿GoäK^̉KÖ€¬ q̃¿?J=H)ă ÓaÖm€làG` zƠVZñ‰_,GåzSoÖ€l0N‰HWWWGGG¡P¼zơˆ¬­­Y_È_ÿ[S‡¾văßÓ{Ö-€́1ªnÖ¬Yưúơ÷́ÙCDïß¿wrrrrrb}M ßùˆ²ÆƯ´›us@-Œ{¿~ưJDgÏ­R¥Jll,WxíÚµ,6iÚ´)Û6@ÍLCºßb˸”qaƯ"P ăÄñ»ï¾ûđáĂ­[·nƯºÅ<8‹MÙ¶̣ÈCwŸ²¼Y7ÔĂx¨ºU«V¬¯( oRÓpïë:³n¨‹qăŒ3ttt®\¹¡T*¹weJ•*Åú²@¾XBK„…dỰ¿w%o=Öu1NË”)3õ<.~ûö­ƒƒƯ½{—ơe€|áNîÂB‰¤-Ô…èëF€º$4£^Û¶mY·̣KAê k‰¨sư\ï „GSSÓ 6đ‹©©©‘‘‘¦¦¦ÚÚÚ¬›yµV§Y^7̃Œ"h́XÖí€Pâȉ÷̣̣ºxñbXXØ×¯_uuu«T©̉²eËÑ£G—.]uë —&ÓdaA¦$¢-äF­²n䀴Ç›7oNœ81""‚/INN ú믿֮]Û AÖm€ÓOà0s÷ÿîtŒu» gOÇ#7mÚ4qÖ(öñăÇ©S§ÆÇdzn&äLê¯$¥°́1ƒˆŒés…ë¦@ÎH(qôöö~÷˜L<ùÏ?ÿ¼råÊ‘#G¦NjllLDoß¾ưư÷ßY7rfídÿe[é1²n䌄†ªkäÙØØ4kÖŒđ½A€Be+mưB_„e‡ ÜÿËP,)1Ơ?@a#¡Ä‘£P(2,OMM%"LÍPˆ¸‘!<æ¸ET…ˆ„G¹\ND7õ|øđ¡ÊªÇ_»vˆlllX7ÔR†Êđñlíí-¬ú‰RϬ9&¡gí́́®^½úơë×Áƒ»ºº6õ¼lÙ²?~ô÷÷ß½{÷—/_¸:¬› ÙÛI;ă(_\H }‹ơ)‘ˆh̀Öm€“Pâ8lذăÇ¿zơ*..năÆ7nT©P±bÅádzn&do0 æc%)GVm¥ÿ9:Rh(ëf@ÎHh¨Z__ƠªUVVV®µ´´\µj•¾>¾l u¦$¼-=ƒfѦMÂZgñ́<P¨H¨Ç‘ˆêÔ©sêÔ©­[·^¼x144466¶L™2ÖÖÖ­ZµrssÓÓÓcƯ@ÈÆôGEñ‹Ëh™xm J""²´dƯLÈ i%D¤§§7f̀˜1cÆQ\\¾O P¸  |̀}0füxaíïSăG€ÂIBCƠé!k(\ÊQ9>BS¸à·ß„ i7G€ÂJ̉‰#"ûhßGúÈ/® *dü«ŒX7r‰#hFêÏÇÊo9¢ø}ê]äʺ'H@ÄoRO£i|,~ŸÚ…öuëÆº±KH ¯vÓnñ›ÔËiyú:ÿÍûMxÀ Câyå*ƒæ©‰ÈMôIêü”àíÛ³n/ä’ä¦ăá¾|ù2**ªK—.zzzñññFx@’ Ég̉Lñª­[…ø':Ⱥ¥W’K}||Ö¯_ÿöí[n±Y³f†††C† 7nœL&cƯ@l§í±Ë/.¥¥|œ*T3¢èÿ¢råÔÜ3H´ÇeË–mß¾=}yBB† >}ú4õ<ÖmÁPÊÇâAj"2Dˆ·Ó·…±cY7rOBÏ8>~üxÇ\¬­­Í—ó½Œûöí»yó&ëfÀôIøvül­²v×.!îIG₫‹đf @a&¡ÄÑËËK©TjiiÍ™3çöíÛ|¹‘‘Ѻuë¸Uïܹ“u3€ˆÈ›¼¿Đ~q!-¯ư"¬¡²¢YÁÉÔ4Û=€dI(q|úô)uêÔÉÅÅE___¼ªC‡­Zµ"¢gϱn& |¬2HM™S@!'¡Ä122’ˆ¬­­3\kccCD¬› $#á5µ%´$}…ưû…¸3ü/êÙ“uĂ O$”8Êår"Êđ)F¥RyăÆ "ªZµ*ëfwä!^œE³T*ÄıUÑÂĉ¬Ûy"¡Ä±N:D0~üx®0<<ü̉¥KcÇåÇ5k²n&@q'¬1ư 5©ŒS' Z¶dƯvÈ MÇ3bĈS§NEDDœ9sæ̀™3\áĐ¡Âd†††£GÎƯÎ:tđàÁàààR¥JµjƠjÚ´i&&&jnûöíÛ®]»¶iÓÆÓÓ“ơE`L|xbb¢:Û*•Ê3fÄÅű¾<́‰û È`$L_Gür•*¢uê°n>ä•„G"j̉¤ÉÙ³gGY«V­R¥J‘AÍ5ƯÜÜ₫ùçŸ6mÚäbŸ̃̃̃æææ§OŸööö>s挫«ëƒV¬X¡Îæ;v́àFÉ@ütceü¯)ñ8ơŸ}…<àPøIh¨SºtéI“&M4‰ˆâââJ—.Ç®H¢Ÿ2¬öîÛÚ=xÀºá I’ëqôññY¿~ưÛ·o¹ÅfÍ:88 2dܸqüçƠ¤T*ƒƒƒMMMU´µµ%¢đđđ† f¶ío¿ưöôéÓmÛ¶²¾*,}¦ÏOè ¿ø^eV³kW!̃±ƒ¨Ù·…´Sú@!%­ÄqÙ²eÛ·oO_°aÆOŸ>Í›7/G;LHHP(ÆÆÆ*åFFFDôéÓ§̀6¼wï̃ï¿ÿîâẩ¬Y³ÇçôD¸9)ÅNŸ>]0×2ôúơkÖM(ĪZ ó§Î‹œYÍÛ·… ü«„äăσG…ªn…›"M¸/„›Âœ““ë&H…„ÇÇïØ±ƒ‹µµµ ó½Œûöíëܹs£FÔß'÷ê´J9÷èdf#à‰‰‰Ó§O¯X±â”)Srw.Œ®"d*³AÖœHøẳ́ç~7—¾Ë¸¦x\ºQ#²8 <iÆ× x»M·ÏĐ~ñ:]Ï¢̣ÑTß{÷¦Î1£¬  %OŸ>%¢N:¹¸¸¨dl:thƠªåôíf##£ô=‹111DT.£¿̀nܸ±oß¾#FÔ«Wơ%`¬! ‡RhÖ•=bÖM€| ¡Ä122’2ï·±±!¢ñäÂê177ŒŒŒ=—(44”[•¾~PPmܸQ₫M¯^½ˆè¯¿₫’Ëå]ºta} H5ªÆÇÎä\…ªdQùï¿…¸[·´ïW÷íËúT@3$ôŒ£\.¿{÷îÍ›7Ó¯R*•Ü,ÜU«VÍén/_¾Ü¹sg~o~~~&&&vvvéëW®\™¯É‰ö÷÷·´´´³³+_¾<ëëP̉Áô‚_üƒ₫Ⱥ~ÿ₫B¼w/ÑÂ5Â2¦₫(*$”8Ö©SçîƯ»ăÇÿé§ÿf‰ ụ̀å¸Ä±fÍ9Ưmß¾}½¼¼Ö¯_ߪU+îoo777]]]®N||ü‡tuu+T¨Đ¼yóæÍ›‹÷đøñcÿ† â[ƠP|üL?ó±’”ÙÖŒẩ¥‰Ö¬–›5Ëvs($”81âÔ©SgΜ9sæ¿çñ‡¾6ahh8zôèœîÖ̉̉rÚ´iƯºukÑ¢EXXX@@@­Zµ† Æ×ñóó›4i’Í ñW/+ñGbæĐœlë‹_Z>œˆˆ’’XŸh„q433[¹r¥ÊLƯuêÔ§OŸ\\\víÚ•~rG ¢ÔQ¼¸€d»ÉàÁB¼ysÚu=…”L©̀~ª ÅÅÅư₫ûï—/_ MHH000¨\¹r³fÍFŒQX¾à"—Ë1£Ô„††b45‰»Ơ¤&"ñ”J¢ßÿÖñH´s'¹ºf¸n4á¾HnÛ¿ë%4TÍ)]ºô¤I“&MDDqqqÜS‰P0ÄYă¡Î&Ë– ñܹD”öÇL²F(Œ$”8®]»– zơêU±bEúö}(=©'Û’­y©³Ơ¬YBüß7AŸ°n@1R„™íÓ`kR÷1üo˜IDipœ4‰ơ™€&Ih¨züøñDT¾|ùàààöíÛרQĂÄÄD&~]“ˆˆ6lØÀº¥EÊFÚø̃ó‹Ûi»¦¤±Á·è¯¿„RÖ'$¡Äñܹs|œ˜˜xçÎÖ-(ÆĐ>Vs₫΀B¼w/ëÓ€ü'¡¡j(xâùw6Óæm{đ wïNDDááB‘øóƠP$H¨Ç1Ÿ€¼p!>¶"«á4\ưmoƯâjƠ¾E=… }đf @Ñ#¡Äq„ ¬›PŒÜ£{{I`~M¯s´ù¨QBüË/ߢ۷…̉FXŸ"h†ª);¾"LÁ9Ư\Üă8dë“€!¡ǵâ‰=2W®\9¹\^»ví%J°n2@a¥Gz|<’F~Oßçhs!îƠë[ôîPÚ¹3ëSÍ“Pâ¸qăFơ+ÛØØ¬ZµÊÖÖ–u« ŸÙ4û+}å7Ѧœî¡O!’È¥K…RaôÂ:T4pàÀ¸¸8Ö (d>ÓçÅ´˜_̀Ñü;Ùøí7!nÖŒơ‰€æI¨Çqøđáááá¾¾¾DôƯwß5õÜÂÂ"""" àơë×DÔ¸qăºuë~üøñÊ•+?~üüùóÎ;ÇŒ“×'&$LÊ}ÎåbÓ§ ñ²e¬Ï „Çöïߟˆúöí;{öl=½ÿÁR(«V­Ú²eËÇƯƯƯåryBB¨Q£üưư‘8¨¯:Uçc'rr$Ç\́ÄÓSˆg̀ø‰gṕуơ‰@¾ĐPơ5kÂĂĂË•+·`Á>k$"mmí©S§V¬X1!!aưúơDTªT©éÓ§Ñ›7oX· ĐØB[)_ô%ß\́äÓ'!66­X²DˆgÍb}®/$”8^»vˆ¬¬¬´´T[%“É,--‰è₫ưû\I™2eˆ(**u« a4Œsưh£đ5ÑŸVxy ±½=ës€|!¡Ä1>>ˆ=zôäÉ•U!!!< "¥̣¿¿íNŸ>MDeË–eƯj€ÂAüiÁ-´%×ûñóbÖgKBÏ86jÔèܹsÉÉÉ®®®...Í›7/W®\TTÔơë×·oߘ˜HDơë×'¢ùóçÿñÇDT±bEÖ­(‘đ—è‡ÿÑÿr·ŸÓ§…¸}{Ñ!OƠE‹„ÇéÓ§ß¾};***66vÓ¦M›6©Î-§££ăêêJDwï̃åJz?Œ ÙFÛn‘đ™—Ût;×»ÿÀ9"Z UW®\yÓ¦MåÊ•Ëp­®®î¼yó‰¾~Û AƒN:±n5€Ô‰ûó8kă—/B\ª”hÅÑØ·Úû€BFB=Ddggwîܹ}ûöùúú†††FGG—,Y²B… öööÇç̃!¢:uê8::6 _ÈøÑÆ?è¼́j₫|!3‡ơ‰ ̉J‰¨dÉ’ƒ=`DBoU?~üxÇ\¬­­Í—ó½Œûöí»yó&ëfH]Y&Æw"§nÔ-;ô}›ĐÄ$íºÇ…xà@Ö§ùKB‰£———R©Ổ̉3gÎíÛÂTsFFFëÖ­ă¾^½S<(éL¤‰Á/æîƒÔ*ÄÓ^½~vfp(N$”8>}ú”ˆ:uêäâ⢯¯/^Ơ¡C‡V­ZѳgÏX7@ºnÑ­µ´–_̀û£é¥™¾‘ˆöîâêƠY_È_J###‰ÈÚÚ:õ666D‘£}+âO †Q˜FöÙ¯Ÿ{{³>C`JB‰£\.'¢ ŸbT*•7nÜ ¢ªU«²n&€D‰çú^L‹+Q%́öÀ!6,íºû÷…xèPỌ̈„Ç:uêQ@@Àøñăưưư¹ÂđđđK—.;–KkÖ¬™—CU ¨× ¿f7e*T³F(~¤5x“&MÎ=ûûï¿_¾|9444!!ÁÀÀ råÊÍ51b„¡¡!ëHNªÂÇyü® ¾}…xË–t«ÿøCˆ‡g}  H+q$¢̉¥KO4ỉ¤IDWºtiÖ-.ñ 1¨S j¡Á>,Äÿû_ºƠ›7 1G€âABCƠé!kÈÂôW¢J'é¤w~LôB‡Œj\ơn6hƯ₫ (PcbbâíÛ·}J¿V__¿G&L0QưJ.@1u“n.¤…üb₫½ĂÑIÿçÄ‚B́áÁúz@a?T}ï̃½víÚ-Y²$쑈÷íÛשS§{÷î±n,€$Ø“=k¼¯‘ˆzơâíÛ3ª1w®»º²¾P@'Ÿ>}6lØ¿ÿ₫Ë—èêêZZZÖ¬YÓ̉̉RWWW\søđáQQQl Àœø…˜ ´AS_ˆ;rDˆf} Œ‡ªwï̃ĂÅíÚµsuumÔ¨‘L4«đíÛ·wîÜyæ̀"̃µkׄ ض€!=̉ăc'rM£5~ˆ?ÿbGÇŒj\½*Äèn(N÷8̣Ÿ́Ư»÷úơëíííÅY#5hĐ`Ưºu?ưô“J}€b¨/ơưJ_ùE_̣Í£ôî-ÄgÏfTcÆ !ÆÅ ăÄñƠ«W\0nܸ,ªñ½Œaaœ  PXKk“0³b>½“˜˜f1í¿ă¾ÿû ¯T'ŒÇØØX"255µ°°È¢™™YÙ²e‰(..mƒ˜¸M·'̉D~1ÿ^£nÔHˆOf;/$> P̀0N éëëg[³T©R|}€â¦!5äă—ô2ÿôø±wê”Qyó„ăÔÅ ûéx kâר÷ĐÊT9Ÿ$₫®à¯¿fRi₫|!vqa}m @Ibđ¯_¿^»v-ë:‰*Ï^â¬q@̣ïXÛ¶ ±8?àH"qŒˆˆŒÉẩ)Keù¸ƠÙHóïX¿ÿ.Ä:dRIüZ ~f UHTSjAüâz¯‡>\ˆOŸÎ¤&â(̃8HÑrZ@üb~ú()52ʼxêïråX]`…ñPơ‰'X_É9NÇgĐ·—ßY#¥…çæM56¨PÅ…Æ'666¬¯€´Sp7êÆ/&QR4ItL(Å/Zcœ XÂP5€´Ø¸Ư§ûº¤›ßGlÙRˆwïμ̃Â…BÜ¿?“‹l!qñä;ûi]ª[½|Yˆ13#d‰#€Tˆ³Æ¹4÷gú¹:}º›y=??!:´à/HGIg?ÓÏóh^Á×ÓSˆû-óz3g 1p(®8°'ÎëRƯư´¿`ûË/Bܰa–U„¹È̀¬ /HGƪRU>Ö%Ưût¿À½t©g5 O|¼›˜äÅIAâÀ’=Ù‡R(¿X0“ïp.\bCĂ,«"ÄûöX @j80Ó‰:Ư$¡£¯&úkÓFˆ_¾̀²ê¡CBœéw¬ èCâÀ†+¹ú’/¿XÀY£ø‘E]Ư,ÇŸ££…¸bÅ‚l$H G&ѤƯ$̀µ]ÀY#5m*Ä¡¡YVSoß^ÀíIAâPĐÓâ5´†_,ø¬ñÁƒ4‹VVYÖ>rDˆ ¸© )Œ¿U Pܸ“ûZÂ/|ÖHDơê ñóçYVŒbkë‚o*HJqI:tđàÁàààR¥JµjƠjÚ´i&YÎ*’˜˜xàÀÇ¿~ưºL™2¶¶¶C‡ưñÇYŸn[h ó¬188Í¢M–µÅăÔÛ¶|k@REâ¸zơj///ƒF………ùøøíÚµK__?Ăú)))ƒ¾wï‘‘QÓ¦M¿|ùrưúuÿñăÇ3†ơÙ@aµ™6¤‘ü"“¬‘̉f÷³2̣øq!nƯIƒ@:₫3̃̃̃æææ§OŸööö>s挫«ëƒV¬X‘Ù&¼wï^ƒ üüü6mÚ´}ûö#GoذáéÓ§¬O ¥´Q Yă›7iëÖͲöû÷BœMÏ$ E?qMDîîî|—¤ÍÈ‘# Å•+WXŸ>¿ÑocHè«f•5RÚǯ]Ë®6Æ© ­¢Ÿ8̃¼ySKK«µh”M[[»eË–‘‘‘wîÜÉp“ĐĐPƒZµj‰ mllˆ(<<œơ A!³V§ñü"ì1*’“…Å&M²ÛÀW˜f’7gƠl"₫Œ£R© 655555—ÛÚÚQxxxÆ ÓoµyófƠ+óøñc"ªˆ !'VĐi4_d˜5RÚîÆ₫É®¶xT»zu†Íé(â‰cBB‚B¡066V)722"¢OŸ>e¸UÍ5UJ¼½½K–,Ù£Gu+—ËUJ¸áo`åơë×Đ_¿ûuá~1$4DüYêöơ«Vtte~ÑÚ:4ëy¿Ë»º̣ï½]¼øk¨æ[Îä¦@¶p_$7…9'''ÖM"8&&&‘Jyé̉¥‰(Zü-µL(½{÷._¾\¡P¬\¹̉̀̀Lă²>uPe]°Óö Ç迨$%1Q܇~â„WĂߟ-{ơʧVđM5á¾Hn [éÿZOßCTLñÄÑØØX&“%$$¨”ÇÅÅÑ·~Ç,\¿~}₫üù/^¼°°°X²dI³fÍXŸ ©ámºÍ/²¡&¢Û·I¡;wÎnƒ°0!®]›mă@:x⨣£cdd”¾g1&&†ˆø÷¬ÓKJJ̣ôôܽ{·̃¸qă₫÷¿ÿe6é#€ ²ø—₫å™gD$~”÷åK56:Tˆñ}jø¦ˆ'DdnnchhÈrw™››g¸Ijjê”)S₫₫ûï¶mÛÎ;7‹ü@…ŒdâE)d[· q¹rT¹²Ûœ?/Ľ@ÅSÑŸÇÑÑQ¡P\¾|™/Q*•~~~&&&vvvn²{÷î¿ÿ₫»ÿ₫6l@Öê“`ÖHDnnB,̉;S/^qưú¬›RôǾ}ûjii­_¿{®‘ˆ¼½½#""z÷î­««Ë•ÄÇLJ††r¯­)•Ê={ö”)SfÆŒ¬Û…‰4³Æñ ’Ô¾½zÛ´j%ħ‘¢?Tmii9mÚ4nƯºµhÑ",,,  V­ZÆ ăëøùùM4ÉÆÆæÄ‰?~|ơꕾ¾₫€̉ï­gÏ...¬Ï ¤%âÊP~јŒ£(u£₫óÛoB|æŒzÛˆgpD#ˆưÄ‘ˆ†Z¶lÙ£G:uÊÂÂÂÅÅeâĉ܌<éqư‰‰‰=J¿/Vƒ‹tÑøE]̉•NÖ(î:œ6M½möíâYŸH‹L©”Ä€ZQ"—Ë1£Ô„††æÇ,h*†éA=ĐÖç*‰ÏƠưAÏÍ6¹”O7̣÷E‚pS$¨Ø₫]_ôŸqÈ'ư¨Ÿ8k\D‹$•5g)Ư»W½mRSY·$­X UhÜ÷ô}…đ‹§étêÀºQ‚gÏ(&FX́ß_½Í…øÏ?YŸHG€Sy:‚"¾£ïX7*5„8£‡u3qñ¢÷́Éú$@r0T ‘™~Ú©eë× ±Ơª¥̃f^^BüóϬO¤‰#€ºvĐ32—Hd²FăÆ ñ·ÙKƠ0j”ïßÏú$@8¨¥ơBCøE9É¥™5V©"ÄêNÁCDQR™B¤ Ï8d¯$•L¢$~q MYA+X7*₫₫&,._®ö–â×b₫ù‡ơy€D!qȆÊCéb+j•Ûå¯-„X­ÏRóî̃â6mXŸH†ª2µ¶¥F²YcBܾ=•+§ö–B<|8ëóéB#@ÆRÓ —Hó¡FNl,;&,ªûYjÎ̀™B¼y3ëSéB#@d$gí¨”³F"24âœeâ‡"Å_›H‰#@gèŒÊđôA:ø7ưͺ]Y™;WˆË•£öís²1^‹µa¨@ІÚ\  â‰w4r,✽CD/^qƒ¬O$ ‰#ÀT:kRÍÇô˜u£²§«+Ä9˜‡Ó²¥ç`ÖG(¦0T @ä©’5®¢U…"k\¾œRR„Åç~—/§Ù@–ĐăÅ!ÆR¬¸$ˆ‚ªQ5ÖíRËŒB¬̀é ú¯¿ q§N¬O ô8Bñu®ÉH&ι –¬Q&ê$ơñÉùö  ñÉ“¬Ï $PL}Gß5£fâ’=´ç=cƯ.uưø£7nL½zåp{ww!î̉…ơÙ@အj(vîФúúp¡x{ẃ]½*,ä|K–ññă¬O ô8Bñ̉”ªd#idáÊ)í×Å/ǨKü©˜îƯYŸ èq„ââ]S›&¢Kt©µ`Ư´œ?Ú¸d ikç|âS=Êú„ Đ@âÅBW«®*Óët¢N'©đ½2t¨Ó¬Y9ß…xÎ? ņª¡ˆÛJ[e${\"MÖJ¡…1k¼w¶o£¢rµ—+„87/c@ñ…G(ÊT¦ơ&¢ÔóOú“u»rÉÎNˆçnẓ)S„¸o_Ö'… z¡hú‰~JŸ5¾¡7…7k?ÚX¿>Ơ¬™«½¬Z%IJ>'(d8BQs–ÎÊHvˆ‰ ưIIJK²dƯº\*QBˆèîƯ\íeâD!î×ơ9@სj(:’(©$•L_®$ehD(•aƯ¾Üjß’“…Åóçs»£µk…xß>Ö§…z¡ˆhBM̉gé`¡›£QÅ̉¥tö¬°˜ăRóúôâ₫ưYŸJH¡Đ›JSe$»N×Å…í©½’”}©p¿ÿ@¿ü",æ>kŒOóỡ½¬Ï % UC!¶‚VL£iéË£(ʘŒY·N6â7ọ°£̉¥…Ø×—ơi@a…G(”.ÓeÉ̉gÇ鸒”E#k¿F½w/YæúÅ9s„¸\9rrb}fPX!q„B&e$kI-UʧÓt%)»PÖ Ô qÖèæ–·‡-â÷ïYŸbª†Bă}ú¾K_̃Œ]¡+¬[§Iâ¬ÑÀ€~ÿ=û̉ƠâƠ«YŸnèq„Bà}Đ"­ôY£ ™¤Rjλv¥¸¸<́ë?(%EXÏăsHẢ¸is2O?«Î{zÿ‰>¥ÿ?( đr HÈ/ôËRZáªËt¹95gƯÀü"ÎÛµ£Ó§ó¼Ç~âÖçEG„öÔ₫,ÍpƠCzX›j³n`~¹r…‹̣aGGúûï<ïÔÊJˆ[´ kkÖg E†ª¥ô $•”‘,}Ö(#Ùkz­$eΗ,I“5V«FçÎåy§£FÑÛ·Ââ¥K¬Ï$ÀÆl-#Y=ª—DI*«~ R)5•R­È*Wû.œœÈƯ]X=‚‚̣¼S__̣̣ñ&5h†ª¡@½¦×m¨Meœ" §á›©X¼Æ¡¯O_¾‹ĐO?ib¿: qBë³€¢‰#94g-ÊlífÚ<œÅ”1 é¤ư±{÷Ê—×ĮůǾÛGúú¬Ï UC₫:E§¸§3̀+RÅ R’²˜d ªfJe>dÎÎÔ¯ës€"=/‚(h ó#¿̀*L¡)+hëf(==úú5M‰ÆÁĐAˆ è?XŸ+MèqMúB_~¦Ÿe$³%Û̀²Æët]IÊb•5^¹B2Y¬±aCÍe®®i¦đÉÓÇ­²‚Ä4c “‘LŸổÁ +̀§ùJR*IiOö¬[ :uJ3ç9B7ojhïË—ÓîƯÂ"^£€ü„¡jȽCcöĐ,ê8‘Ó:¢Gz¬ËÀÍ›dŸ.IÖdj7e ­Z%,úùå~Wj@#äØzâ@2’‘QfYcªr‰.)IéK¾Å3k,_^5k7N£Yă€i²Æ¸8jÙ’ơI@‡GP×.Ú5“f¾£wYÔ1%Ó]´«3ufƯX–&O¦Ơ«U ÿư—̀Í5wŒ¶m韄EŒP@@âYù—₫A3vÑ®¬«•¢R hÁº½Œe86]¿>Ư½«ÑĂÔ©C ‹È   q„ ¬¤• hA Åd]Í–l7І¶Ô–u{Ù{û–¬2ú>â«WT±¢F$¯‘5@Â3đŸ=´Ç–le$“‘l*MÍ"k4&ă§ôTIÊ@ DÖøö-iie5zxR©Ñ¬ñäIdÀz‹µM´i­¡u*ϧù¿̉¯¬›,!ï̃Q… ”ªZ®ù±i"úñGºz5M ²F(pH‹—·ôv#mô$Ï$JR§~*ăK¾?̉¬.-ÿüC:B‘ÁªcǨ[7́ëW̉KûZº%'³¾Pa¨ºè;@ZQ+n Ú¬Ó⬳ÆjTmíâ&ë¡db LFmÛf5^»FJ¥¦³Æ¹sU³Æ_EÖ¬ Ç±ú‹₫ÚNÛ̉Qơ7±$ËÔà/ú‹uÛ%*!Zµ¢[·2^{ơ*5mªéC̃¹C ¨~ùB%K²¾P|!q,ô(a?íßGûÎѹmXêM¡)i ë3´åËiÆŒL׿Kʘ@ª…M›ª>ăPà8>ÿĐ?khÍuº₫‘>æt[rM£›’Æ“¢fË6,Óµ+’ŸY[çĂ«W§À@ƠÂăÇ©KÖ—‰£´¥Rª/ù.¥¥Ïéy.̉D"jDœÈi-`}*…ĂäÉäåE‰‰™V56ǹŸc÷èAÇ©˜Đ§O¬¯ À8JÈ5º6›fÇSüuºë4¡&ChÈ¢Kº¬O¨pøô‰f̀ -[²©vêú˜‡¿qƒ(!!ƒU!!ùÓ« KHxOï/Ñ¥E´(‰’ѳ¼́J—tɹơëHù‘Ôe¿₫J»wÓË—ÙT›;—æÍËŸLŸN¯̣ơ%''† CHóÑCz@àG~/è…FöÙ•ºö¤=©§1³>¿B&1‘V­¢U«Ôû?֮͟v?N½zQJJÆkW¯¦‰™]#€,!qÔ¼çÏe$Ëû~¬ÈªuêHÈibî8@;vĐéÓD¤Ö˜¯»;-Z”?MY½&OΦRF6$’`I–m©­#9:’£Yå}‡ÅÓ‹t́-X@ÑÑ9تqcZ¶ŒZ·Î‡Ư»GÎÎô,˧ªU£ ¨B…½R¹‚ı@AKjÙ‚Z´¤–ø"K^¤¤Đùó´b½}KçxóêƠịä¬&ÜɽưûiíZ Ⱦæ̀™´ti₫_*A☩C‡¤û÷s3®bÜ80¾ÿ>O !q̀ÀÁƒSSS'NœÈeD4sæ̀cÇùúúº»»kii±n ÄÇS|<ÅÅ ÿ½v*U¢˜‰¡ØX‰¡wï()‰¢¢èóg¢¨¨<kPƯºäà@mÚƒ•)#Z‘’BÑÑtåéêRd$EDü÷߈ˆJGR•*ôö-½yC©©ùƠ2ccZ¼˜Ff}…̣Ç Ü¼ySKK«µè=[mmí–-[?~üÎ; 6̀zóˆ ‹¥¢S•2…Rë¿ÿ’Ö—m-¥B©¥H•)51YO‘W₫µ§éº=Ư°§†#¬{@ô€('ó,jÑû÷n¢µ5ơéC}ûR£F¬¯@A@â¨J©T›Ëmmm‰(<<<ÛÄñ“̉‚2úØq‚ơ¹IF9ú`CAÜ/k ­IOêĐC-Ê·À<²´¤jƠ¨[7jƠ²»ûEGU …ÂØØX¥ÜÈȈˆ>©óƠ‘bCŸÍ(¢,} £Ê蔽³ wåé_.0 x+zĂºÙH±²J®\9¥re₫¿ï¾S”-›é¡¡¬›\t¼~ưu ¸/„›Âœ>û GU‰‰‰Dd`` R^ºti"ÎÑỔùF‡R¤mH1%(©$}-AI%(I—’ơèKIúªG_øàưІÎëS"ÿ«%ܦíéï̉g@ñÜ (>•´¬èŒ”¬O.mm̉Ó#==úü™¾ÿ ₫ûUªĐû÷dgG††ddôß/™Œ*V¤ï¾#33úö|foUëàg€©¼¾êù÷E‚pSØ T)‘Ëå¬Å₫̉Tell,“ÉTÊăââè[¿cÖlmåé‡iwă²o ƠȨpx>·¢đ‚°féèè¥ïYŒ‰‰!"₫=k€â‰c̀ÍÍ###¹L‘Ê­bƯ:68fÀÑÑQ¡P\¾|™/Q*•~~~&&&vvv¬[ÀÇ ôíÛWKKkưúơÜsDäííÑ»wo]]]Ö­`/ÇdÀ̉W^.IDAT̉rÚ´iƯºukÑ¢EXXX@@@­Zµ† ƺì q̀ØĐ¡CË–-{ôèÑS§NYXX¸¸¸Lœ8‘›‘ xB☩®]»víÚ•u+¤Ï8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8B±àääĺ   7Ep_$7¤‰#¨‰#¨‰#¨‰#¨‰#¨E¦T*Y·¡¨‘Ë嬛ù+00u@âjÁP5¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰£Æ:t¨oß¾vvv?₫øă/¿üźEÅKbbâ;ºtéR¿~ư-Züïÿ»råJúj¸M¬¼}û¶AƒÓ¦MK¿ 7¥à=|øṕر5rqq¹~ưzú:¸/)))é÷ßïƠ«—]›6m&L˜”¾nJ ‘Ëå÷ïßÏp­:· hß&íyóæ±nCQ°zơêåË—ÇÅÅ5jÔ(11ñÚµk7nÜèÚµ«®®.ë¦ )))®®®‡V(ööö†††7nÜ8r䈖––½½=_ ·‰¥R9f̀˜ĐĐP¹\̃¾}{ñ*Ü”‚w₫üy77·ªU«V©RåÆ>>>µjƠ²¶¶æëà¾$…Báêêêăă£««Û¨Q#]]ƯK—.8pÀ̃̃̃Êʯ†›R0Ö­[÷đáĂ¾}û–/_^e•:· èß&%äÙ³gϪW¯̃¢E‹÷ïßs%‹-²µµ]°`ë¦{÷îµµµuvvNHHàJ?noo_£F'Op%¸M mÛ¶ÍÖÖÖÖÖvêÔ©ârÜ”‚÷ùóç† Ö«WïÖ­[\Éưû÷k×®Ư¬Y3…BÁ•à¾0îO° &$''s%W¯^­Q£Fûöíù:¸)ù-::úæÍ›¿₫ú+÷‡Ơ½{÷T*¨s ĂmÂPµ>>111#GlĐ WR·nƯ;FDD<|ø+Á})`wîÜ!¢Aƒéèèp%M›6­Q£ÆË—/?}úÄ•à¦ä·®]»0`ÿ₫ư™UPç‡Û„ÄQñ¼©¥¥Ơºuk¾D[[»eË–‘‘‘ÜßBCC jƠª%.´±±!¢đđpn·‰‰”””éÓ§›˜˜̀œ93ưZÜ”‚wé̉%™LÖ£Gqạ́åËëƠ«Ç-â¾0 "âsD"R*•Ÿ?Ö̉̉âSIÜ”ü¶xñâ7nܸ±Y³fVPç‡Û„Ä1¯”Jepp°©©©©©©¸ÜÖÖ–DY ä«Í›7§ÿgâălj¨bÅ„ÛÄÎo¿ưöôéÓ¥K—ª¬ÂMaâÑ£G&&&åË—¿uëÖï¿ÿîééyüøñÄÄD¾îKÁë̉¥‹̃âÅ‹¯]»–˜˜øöíÛ9sæ¼~ưºoß¾ÜnJh̃¼¹££££££ø¹R:· ˜Ü&Ö (ô …±±±J¹‘‘¥ư$äŸ5kª”x{{—,Y’ëYÁmbẫ½{¿ÿ₫»‹‹K³f͸<^ 7¥à%%%ÅÆÆV«Vm̃¼yûöíăË+V¬¸fÍÚµkî r¹|÷îƯƒ}zŧL™’YÂM)X±±±D|êÔ)ëׯûùù7îÍ›7&LàîîKÁ‹‰‰Y¶lY|||­Zµúơë×®];}}ư£G?«€›Âœ:· ˜Ü&ô8敱±±L&KHHP)‹‹£oÿ΀sưúơùóç¿xñÂÂÂbÉ’%ü£*¸MÏĂĂăơë×ûöíăßXR›Rđôôô¸`Ù²emÚ´áâ±cǾ}ûÖÇÇçäÉ“}úôÁ})xÓ§O¿}ûö̀™3‡ •¼}û¶_¿~“&Mú믿ªV­›Âœ:· ˜Ü&ô8æ•‘‘QúIÄÄÄÿ^ä·¤¤¤Å‹4èíÛ·ăÆóơơ?àŒÛTÀnܸ±oß¾#Fđï[¤‡›Rđ ôôôôơơÄåmÛ¶%¢gÏîKûđáĂ… ªU«ÆgDdii9zôèäää#Gn¨s ÉmBâ¨æææ‘‘‘Üï ^hh(·uë…ÔÔÔ)S¦́ÚµËÑÑñï¿ÿ;vlú^.ܦ‚Ä}ôbăÆ̣ozơêEDươ—\.ï̉¥ W 7¥à•+WNWWW&“‰ ¹Ÿ—””n÷¥ EFFQ•*UTÊ«V­JD?~äqS˜Sç‡Û„ÄQ ÅåË—ù¥RéççgbbbggǺuÅÂîƯ»ÿ₫ûï₫ưûoذ!³Ơá6¤Ê•+wN«yóæDdiiÙ¹sç–-[rƠpS ƒƒCLL̀óçÏÅ…ÜD!ü\›¸/©J•*ÚÚÚAAAJ¥R\HDƠªUăqS˜Sç‹ÛÄẓ¢àÍ›7Ơ«WwrråJ¼¼¼lmm—/_κiÅBjjjÛ¶m4h˜˜˜E5Ü&¶=z”₫Ë1¸)ïÉ“'¶¶¶}ûöŒŒäJ>>)))2R½zu₫-Ü&†>~üxàÀ¹\̃¾}{q9nJÁkذ¡¥¥eHHÈ£G¾~ưÚ¤I“U«V5nÜX\÷¥ •*Uê§Ÿ~"¢ÿư÷̃½{ÉÉÉ 6\¾|9÷̉7¥`œ?₫É“'}ûö-_¾¼Ê*unA‘¿MèqµàåP GP GP GP GP GP GP GP GP GP GP Gȱ¤¤¤}ûö :´E‹uêÔiß¾ưđáĂ·mÛöåËơw²ÿ~¹\.—Ë{÷î]`- ’síÚ5×.#.\øçŸ₫ùçŸOŸ>eVÇÇLJkvÍ5cbb̉Wpppà*,_¾\ưC¯]»–Ûj̀˜1¬/H g?~́ää4õ¼+W®|øđ!))),,̀ÏÏÏĂĂ£}ûö/^dƯÀÂg̣äÉ£G=zt```fuÚ¶m«­­MD …âÊ•+*k_¼xñöí[.îØ±#ë€" ‰#ä@hh¨‹‹Ë›7oø.›á¼ÿ~âĉÏ=SgWVVVVVVåÊ•c}Z…€‘‘QÓ¦M¹ØÏÏOeí¥K—¸ÀÊʪN:¬ EGÈ„„.îƯ»÷±cÇ>|èïï¿xñb"JLLœ8q¢:»êÚµëùóçÏŸ?¿iÓ¦¼7́ơë×IIIL®IïJ¼té’R©¯º|ù²J€ü€ÄÔuơêƠ .pñđáĂ—,YR½zummí²eËöéÓgƠªUܪĐĐĐ—/_r±ø:…B±víÚ–-[®]»–2yÆ1%%eß¾}ÎÎÎÍ›7¯_¿~—.]¦M›¦̉…)̃gDDÄÔ©S7ńèèØ¬Y3ooï\œ—x‡111Ë–-ëƯ»·]÷îƯ½¼¼RRRrqè̀œ|˜O‡₫ßÿ₫wö́Y}}}nÑĂĂắÙ³zzz™ƠwrrâñKHüâqj___.k”ÉdM4éÑ£‡ ·ề™3¹»Dbqqq“&Mâ²Æ&MŒ7®K—.ZZZJ¥rûöí>>>y?H z@-)))|ÇRÅsºù¿ÿ₫[­Zµ‘#GVªTÉÔÔ4Ă:|63räH¾GsèĐ¡W®\Q(W¯^­ZµªÊ&ëÖ­+Q¢Ä‡\]]CCC‰hăÆ-Z´ÈƯiΙ3ÇÅÅ…ˆBBBzôèñơëW"zøđaú7N4rhcccccc™LÆ-››WªT)‹úíÚµ›7oB¡xôèQddäwß}G™<àÈ2dÆŒ\Ü«W/nùÑ£GM4ÉƯ%âư₫ûïÜüA:tà»0í́́.\HDëׯ/ȉ– ` ÇÔÇǹxZ__ûöí]»v­W¯^fy'—¥ѱcÇ|||¸ZM&&&öööD¤T*¹ÔđåË—áááDT¹rå5ḳ5;uê´bÅ+V¸ººr%qqqüD›ÑÑÑyo Ÿ›₫ôÓO|aï̃½¹1ß¾}›ǺBPH¡ÇÔ½4ÍÉbềÔ¨Q#Ût³yóæ\Xhhè/¿ü"“ÉjÖ¬Ù²eË6mÚÔ­[7}}[[[ ñæ\ T*ĂĂĂ«U«–ÓFªôöñ;̀ïC«ÏÉɉ›ºüâÅ‹=zôàǩůÅđM‰‰¹|ụ̀£Gxđ€Ÿưï¿ÿ¾qăFÖ»UçèíÚµÓ̉̉"¢§OŸr%*‰c|||È kii?¾.EÖ‡æ'â₫̣åK=jԨſM¢ÂĐĐ{^păÆAAAƒ ̉ÑÉêg33³† ̣™\ƠªUù99¥J•*Uª·Oww÷'NÈd²Ë—/gư͘œ¶|ĈŒ‰‰9w««½½}PPÿ̀å!Cø·‹ È@#䀭­íöíÛÅïGGEEñY£••Ơo¿ư–‹îF"̉̉̉Ú°a7¸qèĐ¡-[¶øúúrC±ööönnn*›4jÔẸ̀̉̉Ç×®]ăR7n–œ|}©YÍCתU«sçÎ\œ˜˜xçÎĐĐĐ+̣½t*{ă‚»wï._¾\~GñäDéÇ©e2YëÖ­ù£Ÿ?₫Ÿ₫177oܸ1WÈugHư–zxxp=Á7nÜX¿~ư™3g¸œÇ—ßw G€ÿ·s¿® CaÇÏ•!œâÂÄ&hpˆ" «0&KFÅ4̀6ëI–•5Ằ"‚`R0ˆÿ1Ă Â÷«\.÷Ç÷SçlKçƯ3<§ƯnŸÏgcL·Ûu'ŸÏW«Uß÷1§Ó©×ë½¼²çy—Ëe:¶Z­R©dYV¡Pèt:q¯×ë¬m±m{»ƯF£J¥R,Ă0\­Văñø^‚dë$If³™ëºZëF£EÑn·û°]nŒ ăh­kµ¤H†á}Z­úÔÙ®ë*¥r¹\½^ŸL&ûư>‚ûƠăñ˜¡ÉïÜ÷ưĂá0›Í¦Öº\.÷ûưÍf3ŸÏ%Oà×y{ü?üd‹Åb¹\*¥‚ HÓôŸlư‚Ûív½^Ơ'S~xß8ÀßdY‘À×bT ‚#D¡N Bp€Á"Gˆ ̣;6Ï\>Y¦ûIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/smf_101.png000066400000000000000000001120201466512601400215720ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯwXÇđ÷( ‚4QDÅ'b#QT¬Ø{×hÄ®±l1Qc‰&b×XÍÆÊO ‰¢¢Ø"(*QÁ‚ûư±qw9ÜƯ,Ç÷óäy23·7ûî®âË̀î¬L©TÀ§°$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ #Öè!¹\Î:Đ®¨¨(Ö!0€ÄQ+Jæ&)“Ëå¸(Rƒ‹"M¸.„‹"A%vSƠ $ $ $ $ $P"?~œu  Ep]$¤‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨Åˆuù‘Ëå¬CưÅ:„â‰#H₫Q­Â/'êĂT5¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#‰‡‡‡L&“Éd={ödËÆË…äääÄ:½‚ÄÊÍÍmÇS¦LQiÏÈÈhÔ¨QăÆÅoß¾3fLåÊ•ÍÍÍ›7oOÏYYYëÖ­«[·®¹¹y5–.]‘‘ñÉ®† ¶cÇF±>1ú‰#•ƯÀ[´h¡̉>gΜ .ˆ[’’’êׯ¿yóæfÍ1â₫ưû:t¸zơj®ƯfeeuëÖm̉¤IŸ}öÙ„ Ê—/ÿÍ7ߌ3æ“]yzz8°jƠª¬OŒ¾Aâ  …B¡Pèf_éééYYY¬XUHHȲeËŒŒŒÄ+W®Œ‰‰ عsç5kΜ9#“ɦM›–kÛ¶m;zôè/¿ụ̈¿ÿưoÉ’%gΜéׯߦM›¢££ ÚhGMrvvöơơ]·n••U©R¥j×®=kÖ¬ôôt~ƒU«VƠ©SÇ̀̀̀ÆÆ¦aÆ;wîTùî¥K—êÖ­[·n]u¶Ÿ>>‡æ¿×¾}ûwï̃q÷ç}rû;vlƯºuö́Ù ,xđàAŸ>}Z´hqâĉѣG4(44ô«¯¾â¶9rä÷ßïää4uêT-[¶ôèÑCKg@©T<ØÚÚzơêƠâö¤¤¤{÷îy{{Ëd2¾±U«VYYY9ïtüđáĂ¥K—5k–™™yîܹ€€€”””BtbTô.؈ˆ`¹÷ ̣úäéÓ§?₫øă·ß~ËUgΜ¹lÙ²={öôïßûöí®®®ÁÁÁÜî̀™3mmm?̃µkWnăÀÀÀ ̀™3ÇÀÀ€ˆ>¹}rṛơë×kÔ¨ADFFF3gÎLII‰ˆˆ066&¢7n„……½{÷ÎÀÀ`Ï=C† Ù¼y3÷Å‘#G:tèÙ³gööö?7Ë–- /S¦Œ¸ưùóçJ¥̉ÎÎNÜX¡B"zụ̀¥J'Ï=KOO—ÉdM›6øx­+W®üÇ4ỉ¤@]¦ q€bËÓ“å̃•ʼ>±µµßi7õ¼7îƯ»·ÿ₫/^411áoûKLL$¢ÔÔT~c{{{>k$¢OnïééÉeDäííMD à²F"jƯºuXXXjjª………L&;{ö́£GªT©BD¿ưöÛo¿ư–3ø̀̀̀£GæuhƯ»wÿ䉹xñâœ9s–-[V¯^=•¸È-,,Ä–––ü¡‰½}û–ˆ¶mÛÖ³gÏ­[·:99…††9²wï̃‘‘‘ê 4‰#€†¹»»—*U¯™™Éạ̊û÷µơ¹sçBBBî̃½}ûöí̀̀Lñwår9Ÿ5ª³½­­-_æ̣Åœ-DdjjºzơêiÓ¦9;;»»»{yyuèĐ¡sçÎâ89)))ùLa+óN—9III hÛ¶í¤I“r~ÊÅöîƯ;•¯‘ÊÆeË–%¢Ï>ûl÷îƯ\œ;w^¶lÙ Aƒöïßß©S'ơ»MÁ=Zgdd”₫áÇ®]»6kÖ,((ÈÅÅeÚ´i‘‘‘Ü ÏÊÊ/«³½úÆÿđáĂ€€€:uê;v¬W¯^uêÔy₫ü¹Êf–––ʼ}r/¿ụ̈˃¸ưüüüüü̃¾}ûôéS??¿]»vÙÙÙ¨L%'$$‘£££JWÜ4t“&MÄÙm“&Mˆ(22²@]¦`Ä­ÇYG»;wîdddđ£}iii‘‘‘-[¶ ;v́ØêƠ«'Òo¬2‚(VĐí󑘘ăêê:räÈ‘#Gfeemذaâĉ₫₫₫óæÍoYÄ©jîùñ•+W_¿~=kÖ¬–-[0 fÍgΜzúôi™Læîî®̉•™™YµjƠâăăÅ\¦X©R%###ơ»MAâÅ–Tß&÷̣åËU«VÍœ9“«.Z´())©gÏOưäÉ“•+W>v́X¥J•~₫ùçU«V™̃¸qă§Ÿ~JJJZ³fMÎ~ º}>J•*4dÈsçÎ-\¸đÔ©SmÛ¶={ö¬îç,,,BCC¿ụ̈Ëưû÷/[¶¬zơê¡¡¡y½TÚÖÖ644tذa/^\³fM©R¥vîÜéççWˆ®@#dZư­¢d’ËåQQQ¬£€lbcc1s!5¸(̉$ÁëŔ~¨:;;׫WïÀ¬Ñ++«“'O²DƠ€ÂÂÂââậ߬ÆƯKMÁˆ#¨÷8@Q½xñbÏ=M›6e Ñ¥K—îß¿ÿèÑ#Öè$Ô±cǪU«²B×îܹӿÿ=zH$qüư÷ßưưư‰¨R¥J¬cÑ+H4iÆ ¬Cе«W¯²AƠÆ7nÜÈ: =„{@-H@-H@-H@-H@-H@-H@-H@-H@-H@-H@-H H<<pàÅÆÆ* //¯jƠªñ_777ÏÙ§¹¹¹JcZZZ`` ³³s₫]yzzzzz9räÉ“'¬Ï^Aâ  …‚ˆ u°¯ôôt###IL$N:ơíÛ·ááá 4 ¢… 1bÓ¦MÁÁÁíÛ·‰‰á[·n?vvvÛ·oWiœ1c†½½ư²eˈHư®@S$ñ' @o8;;ûúú®[·ÎÊʪT©Rµk×5kVzz:¿ÁªU«êÔ©cfffccÓ°aĂ;wª|÷̉¥KuëÖ­[·®:ÛO}ú|øđáÀ>>>]»vå¾×¾}{KK˶mÛÑ'·ß±c‡¡¡á́Ù³ŒŒV®\Ù§OŸÏ?ÿ<33sôèÑÑÑÑ7nüꫯ®]»FD#GܵkW›6mz÷î}ëÖ­-[¶Üºu+<<\³Ç™™9~üøúơë‹=zDD¥K—&¢˜˜˜̉¥K—-[vß¾}¯^½rww÷ôô,UªÔ'{~ÿ₫ưĐ¡C Ô¡C®¥Đ]Aá)AÓ\]]Y‡ªÙUÿ₫ư+UªT”?cü~ÀT5€†ÙÚÚN›6¯Î›7ÏÜÜ|ï̃½DtñâÅ+W®ư7ă—˜˜HD©©©üÆööösæ̀áïVüäö5jÔàÊܳÆ 066æZ¸›ÿRSS d2ÙÙ³g¹Á?"úí·ß^¾|ioo¯|ff桼ôTœ:uªQ£Fëׯwqq!¢˜˜˜¬¬¬ ÄÇÇ¿|ụ̀÷ßúôi=̃¾}›O? ?ưôÓ”)S*UªÄ7®+( LUh˜»»»xÂỒ̀L.—ß¿Ÿˆ¬­­Ï;r÷îƯèèèÛ·oóëÔpär¹ø—OnokkË—¹|1g ™®^½zÚ´iÎÎÎîîî^^^:tèܹsΉƯ”””=zäuhJ¥RÍ“đøñă &>|ØÅÅåï¿ÿnƠª×~êÔ)®:|øđ÷ïß?~ÿ₫ư#FŒÈ«7??¿÷ïßOŸ>]ÜX¸® (8@qµz5ëÔfdd”’’̣áÇ^½z;v¬AƒíÚµëÖ­[ăÆ?ÿüsñ–VVV|YíƠ7~üø̃½{9rääÉ“Ç Ëå¡¡¡vvvâÍ,--ƠÏó²k׮ѣG›››ỵ̈Ë/ÇçGL‰ÈÁÁAeăvíÚÑíÛ·óêíưû÷›6mêƠ«Ÿ#º+("$P\M̀:‚<ܹs'##ƒíKKK‹ŒŒlÙ²eXXرcÇV¯^=YºÊ¢XA·ÏGbbbLLŒ««ëÈ‘#G™••µaƉ'úûûÏ›7O¼effæÑ£Góê§{÷îŸÜ×áÇ Ô¯_? ñG=:räH«V­ÜÜÜøÆ¤¤$"ªR¥J^îƯ»÷Ơ«W*ƒˆ…ë ‰#€†½|ùrƠªU3gÎ䪋-JJJêÙ³'·µ8ÑÙ¿JJJ^#|Ư>QQQM4™={ö¢E‹ˆÈÀÀ eË–$ËæqªZ©TΜ9ÓÉÉiûöí9×°455>}zƒ ₫ùçn×YYYË–-322â"ÏƠüaiiÉƯÁYÄ® ˆ8h˜½½ưܹsÏ;W·nƯóçχ„„4nÜxđàÁO<1335jÔÀÏŸ?âĉ̣厅…úØQ¥ooïmŸúơëתUkÉ’%<¨U«VTTTPPÍ€T¶,âTuddäƯ»wƯÜÜF©̣Q¯^½ºvíº`Á‚o¾ùÆÅÅ¥cÇVVVÁÁÁW¯^ưñÇkÖ¬™k‡iii¡¡¡­[·VỸ¼B… í OUhXÆ CBB̃¼y³f͸¸¸éÓ§Ÿa)±R)­ÿ´¯ .]宬Cf#%I«V$¾uÛØ˜Ö®¥1cX‡ÅFJŒJ•²eé锬ÎĂĂC&“Éd²={²å?cÇåBrrrb‹^AâP2Èdôô©PU*ÉØ˜uL ?ÜÜÜv́Ø1eÊ•öæÍ›/X°@¥ñíÛ·cÆŒ©\¹²¹¹yóæÍĂĂĂóé922²W¯^NNN}ûöUY#/¯®† ¶cÇF±>1ú‰#@  ²4#nM³³³8p`‹-ÄW¯^={ö¬Ê–IIIơë×ß¼ys³fÍFŒqÿ₫ư:\½ûºˆgΜñđđ8wî\Ÿ>} ̃¶mÛ'N|²+OOÏV­Z•ơ‰Ñ7Hô²FF …B¡Đ;̉ÓÓ³²²Xñ233ÿúë¯ùóç·oß>gT+W®Œ‰‰ عsç5kΜ9#“ɦM›–³¥R9bÄKKËëׯ¯Zµjụ̀å7õ¬X±âŒOw©ßh G½fo/”mm‘5ꀳ³³¯¯ïºu묬¬J•*U»víY³f¥§§ó¬ZµªN:fff666 6ܹs§Êw/]ºT·nƯºu몳ưäÉ“g̀˜aaaabb̉°aĂ£Gfff~ûí·nnñ̃̃wîÜá6NKK[´h‘››[™2eªT©2räH-½\711±}ûö ,xụ̀eÎOwï̃moo?xđ`®Z­Zµ>}ú„††>{öLeËØØØèèè#FØÙÙq-VVV¾¾¾W®\¹qăFºMAâø ‹-âÿö'ÿû‰3ƒÜ₫mØ·oßĉ›7o₫Í7ß”/_̃ÏϯmÛ¶J¥’ˆæÏŸ?uêỘåËóÍ7cÇ}÷îÏáÇùïÆÅŵoß₫Ư»wÜưyŸÜ~Ç[·n={ö‚ \©TnƯºuăÆD”””T ®@S8è£ăÇ)6V¨nÜÈ: ’ÅƯƯ½T©R|Ờ̀L.—ß¿Ÿˆ¬­­Ï;r÷îƯèèèÛ·ogff¿+—Ëù¬Qímmmù2—/æl!"SSÓƠ«WO›6ÍÙÙÙƯƯƯËË«C‡;wÇÉIIIÉg [Y´Ûd¹Ø̃½{'nLJJ""›œÛoܸñÍ›7³fÍ5kw6æÎ;₫|++«‚vÄ@ú(”SRXG£-M©)ëÔedd”’’̣áÇ^½z;v¬AƒíÚµëÖ­[ăÆ?ÿüsñ–VVV|YíƠ7~üø̃½{9rääÉ“Ç Ëå¡¡¡*³½–––Èóaggg`` 2•œ@D9·/_¾|HHHxxøơë×í́́6mzúôi"ª\¹rA»@â wjƠÊC†P™2¬̉–3t†u¹»sçNFF?Ú—––Ù²e˰°°cÇ­^½ẓäÉüÆ*#ˆbƯ>‰‰‰111®®®#G9rdVVÖ† &Nœèïï?õ<ñ–Zª622ªY³æ™3Ù.ÜéÓ§e2™»»{Îí¯_¿naaѸqăÆs-ÿüóL&ọ̣́*hW HôKh(Ư¾-T·laPIộåËU«VÍœ9“«.Z´())©gÏOräH—.]ˆèÅ‹û÷ïoÛ¶­³³sÎG}ûöí¨¨(îaêÈÈÈ;vtîÜ™«¨+Đ$ú¥eK¡ŒgK±··Ÿ;wî¹sçêÖ­{₫üùÆ<øÉ“'fff£F8p ££ăùóçOœ8Q¾|ù°°°   â ˆˆÈÛÛ»@Ûç£~ưúµjƠZ²dɃjƠªdcc3`À•-µ:UMDC‡Ư´iÓÀÇoeeµeË–ÔÔÔœ¯%ä,\¸°cÇ 6́Ù³gFFÆ̃½{MMM×®][ˆ®@#°#€©^](÷íK¢‡$@—6ḷæÍ›5kÖÄÅÅMŸ>ưäÉ“•+W>v́X¥J•~₫ùçU«V™̃¸qă§Ÿ~JJJZ³fMÎ~ º}>J•*4dÈsçÎ-\¸đÔ©SmÛ¶={ö¬îç,,,BCC¿ụ̈Ëưû÷/[¶¬zơê¡¡¡y½Tº]»vǯ\¹̣æÍ›;Ö«W¯;wîđ1¨+Đ™V«(™äryTTë( ›ØØX̀\H .æ½yCÖÖBµP?̃¥v]d2ru-f?TëƠ«wàÀÖ臇‡••·Â¢¤ 0 ,,Œ[H<…ø‡»Ä₫[G}!ºvíbMQùùaéIÉÁ=úBüvÁ₫ưYGS$£GS@ë   ^¼x±gÏGGǦM%±F̉¥K—îß¿ÿèÑ#Öè$zá‹/„̣Ö­¬£)’J•èéSÖAAÇ«V­Ê: ]»sçNÿ₫ư{ôè!‘Äñ÷ß÷÷÷'¢J•*±E¯ qĐ W®åÁƒYGSx*ÓÓcÆĐ‰¬c*  6°A×®^½Ê:U7n܈&iG€â¯[7¡üă¬£)¤øxRyßGF‘\Î:2øÇ‡ åo¿eMaüö›jÖ¨T’7$)¹±c…̣„ ¬£)ŒÏ>£„ª‡G¶‰wŒ8s₫₫BùçŸYGS`]ºdËç̀AÖ ]q(Î-Ê={²¦ÀjƠÊöbísç¨qcÖ1@̃8gsç åÿưu4cfF©©B/2>$ÅÖæÍBÙÓ“u4£²́²F€b‰#@±5|¸P¾pu4PЬQ%y¤‰#@ñ,”UV²‘6qÖ(“QVÖ'¶b2 ›h“Jcêq€è`ï±±±ÎÎάÏG€âªC¡|÷.ëhÔ%γ=O-Y2’ålÉ¢O%¼úËñææ¬#P‹8klƠªdChHά1˜‚‘5B‰…G€bhĐ ¡¼};ëhÔ"·Íö`]¥«ŸÓç*u©î5ºÆ:4–8C;veÖÑ|8k0@êY£¹Ư¥l³ÿd  ë¸ØĂT5@q-”]]YGói⬱gOúăÖåí8—‘L%kÜM»‘5p0âPÜôé#”÷ïgÍ'ˆ³Æ%½Hyuª~Ÿî‹[Q£ótu\‚G€âæÆ ¡\»6ëḥ£̣4̀±c¬ÊĂ:"#™JÖø€ kPÄ X1‡¥Gœ5zyÑ?ÿ°(U©jWê*nJC•¤t&,  SƠÅJß¾Byß>ÖÑä©lY¡\»6=Ë: Üœ¡3Í©¹Jc2%›‘ëĐ$ # aSr²PO­K‡7y«d£h”’”Ẹ̀G€âăûï…̣?°&w£FQx¸Pưä{¨uï-½µ"+•Æ÷ô¾4•f€ÔaÄ ø'‹sæ°&kÖĐo¿ U f“i²JÖ8F+I‰¬@q(&22„²±1ëhrñ÷ß4eP•`Ö˜óưÏéyªÀ:.€b#Å„´—oü÷_jÛV¨¾yĂ: ́¸wÄ-^ä¥$%²F€Áˆ#@1ñçŸB¹[7ÖѨ²·ÊaadiÉ: ‘6ÔæʶP…´¡6¬ă(~8—/ åúơYG£J¼d£¿?5iÂ: qlÙe$Ë¢,ÖAW˜ª($zK²L7o–æ«¢ŸÊZ—A¥¨”¸Y#€Ihªˆˆ23Yí¹[7¡œăns-ÚGûÄY£¹!k& 8cơF騏Q(¥ÓWê‰×ß™3‡Œu´ß` îGưø*̃@ eJ'OÆCsPâ9"”u¸ Îʕ٪9î'×–_éׯék¾ºˆͦÙ:;j(( %@Ç åÚµu¶ÛiÓ„²Î^ó=}ÿ )êNÚùét qâØ»wo"ªP¡Âƹ̣'©¼ÏZMûöíÛ»woLLL™2eZ´h1cÆ kkë|¶OOOߺukPPPll¬µµuíÚµ'L˜àââÂöthƒx’úÛo_Ùè`§CièVÚÊWïĐ7rc}&à'·nƯ""GGG¾¬ «V­̣÷÷733kĐ Á£G£££·mÛfjjëö …bÈ!W®\qpphÖ¬ÙëׯƒƒƒCBB¶nƯÚ A¶g ôÙ‰ByútỨsÍlƠQ£̃ê qlM­Op°ïè9áÅ`Å€₫?U`ggwüøñ€€€àààÁƒ߸qcụ̀åy}eÏ=W®\騱cHHÈÚµk·oß¾yóf"3g룽öăBù»ït³Ï)S„²n&©]ÈEœ5*I‰¬ ¸`<â¸`Á"233ăË·wï̃¬¬¬)S¦đ¯À5kÖ¡C‡‚‚‚fÏm`Kê|åÊ"2dˆ‘Ñç§qăÆnnn·nƯzơê•.&q $ú硜ïí4"¤^²D‡X*¼¤—|Ëî/ŒÇ₫ưûçZÖ ˆˆƒ–-[̣-†††Í›7?|øđ•+WêׯŸó+öööDôêƠ+¾E©T¾yóÆÀÀ€O%´H&+zŸ$~C }óÖ÷hJ¦ïé=_EÖṔèùTµR©Œ‰‰±±±Q&tuu%¢¸¸¸\¿Ơ¥K“Å‹Ÿ?>--->>~îܹO<éÛ·¯……ëc=$”u2O=q¢PÖÁ$µŒdÈ;ÉŸeddÜ¿ÿÑ£G …"× :uê¤~o©©© …ÂÊÊJ¥Ử̉’²)Éạ̊íÛ·:tèĐ¡|£Ïwjÿ(—Ëå*-Ç×áYUỌ7a‚PÖö$µ8k,Oå_Đ mh„îqܶm_644tppp̀Mú422²´´̀9²˜””DDüsÖb/^¼8ỵdơêƠù¬‘ˆÆ—‘‘qàÀÖç ôÑÁƒBYË78ºº e__í–8küŒ>CÖPÜIhÄñÑ£GDdhhèçç׺uë2eÊh¤[;;»˜˜˜¤¤$ñs-±±±ÜG9·OLL$¢ªU«ª´s/_¾$ÓƠ —/St´PUyEµf‰³F̣¸BW´¸3Đ 8r™™\.ïÚµ«¦²F"jƯºµB¡8sæ ߢT*CCC­­­=<O ""„²¡¡öö#^‚́áC-8klNÍ‘5è %DôîƯ;ÍvÛ·o_ƒuëÖq÷5Q@@@BBBï̃½¹–”””ØØXî±5SSÓæÍ›?zôhíÚµYYYÜÑÑÑ6l(Uª”··7ëóz-{¯5bȡܸ1U©¢­‰³ÆÔ1”BµwP Kª;vlhh胶mÛ6xđ`Muëàà0cÆ ??¿nƯº5kÖ́Ñ£Gáááîîî£Fâ· ơơơuqq9rä-Z´¨OŸ>6l8v́XÍ5/_¾œ••5gΜÏ>ûŒơy½³gPÖæ<µèNr:wN[{gí©ư1:¦½#cœ8?^\µµµ}đàÁâÅ‹wï̃]¥J•\߸~ưú‚îeøđáåË—?xđà±cḈíí}||¦L™Â­È“+[[ÛcÇùûû‡……:uÊÚÚºE‹cÇ­]»6ÛÓúI|ƒằ™ZÚ‰øe4»wkëPÄYcjsœ°„-€^‘)uóNû<b$é/‘(—Ë¥dI‹UФE Îé´ó3yăF7NØÛÇÛprQ”ë"Î[Q«èŸÂơ*đ—E‚J́¿ơºÇ ¤Ëm0à³F¢ü²Æ¢g-©%²F½Äxªzœø‡@ $¾ñP;78Ö¨!”'OÖÊAˆ³ÆfỐ$ÔÊn€5Ɖăd-ư (.Ä78jáGâµk$O[½ZóG ÎÍÉü4Öü>@0U À”–o“¯WûàæûWy7̀;̉đ’j )’KºsçÎùóç·mÛ&?~P¬ưú«PÖ å{÷4ÜyªÂ/ÊH–H‰?? 1q¼{÷îÂ…  W½qăŸ5r.^¼È:LÍßà8fŒfûOROŸ®áÀëQ½Çô˜¯f‘vƠ‰‘Pâøûï¿s‹J6ỉÄÚÚúĉ\{:u.\Xºti"úßÿ₫Ç:LÍÑÚ뢟?§kׄê²éÜ’,¯Óu¾ª$–ë€.I(qŒŒŒ$¢ºuënÚ´ÉÖÖöôéÿËóơơựË/[µjEDÑÑѬĂĐM¿7ºbE¡¦ÉûQ¿$Jâ«ÈJ %O°>J`CB‰cß¾}¹Å-fff …‚[£ÇÄÄdÀ€¬ĂĐ„øx¡́ă£©^Å Ưo¡,$JªCÂç{t¯•̉úùI’ĐTµ‘‘ÑÎ;7nÜ₫áǦM›N4‰ÿÔÖÖvưúơ*T`&€&ˆop7N#]†„d«ö飙H-ÉRØ…¸‹ÖOH•„G"*UªÔäÉ“'O,n´°°8xđ \.70Đø(@‘ˆÇÆ5̉e»vB9QC¯q¿ú7ú­ µÑÅÉ©’Pâ¸fͮЫW/'Ñ;[K•*åææÆ::zûV³ư-Y"”kÖ$,A!Îç̉Ü4B7ç$KB‰c``àóçω¨eË–âÄ@Ÿ9;k¤ñz>·ok CqÖØº/¤…:>1 AüíƯ»7WxüøqÑz¶cÇ„²&nṕÛW(¤mÉ–/W£jé ÎÎ H™„Ç &ốÙ“ˆüưư_¼xÁ:­ßà8~|ÑûÛ¿_(oÛVỖ¼É;‘„{$ïÓ}0 MUsÏPW¬X1&&¦]»vnnnÖÖÖ2ñÚDD´^ü 88±³jƠ„̣êƠE m~¹ù§è_ÅBß &¡Äñï¿ÿæËiiiW®\a€Ô=N±±B5û¢ö ư²ÍB±DÖ*$4U P"ˆŸ§îÙ³ˆU¬(”Ïœ)RWÛiûĂW‘5@Nq§¡%p$MsK‹g¼‰¨iÓÂwơ> ¦Á|ơ=csr@Ú$”8N.â @±°aƒPnS¤ơ´;wÊ©©E Ê„Lø̣"ZT‘*¡3Đ[JÅ¢¢¢>|øúơë.]º˜˜˜¤¤¤XZZ½[ö>ƠH7-[ åºu‹ôŒxÉÆñoÆÏ¶ÍèÔ€ÔI.q \·n]||d P\U¨P”o‡† åk× ß8klE­¦½FVŒO H–´Ç%K–l̃¼9g{jjêúơë_½z5₫|Ö18Ư+ Ç åÏ>+|8¨_6%ÓèŸX-|w ï$ôTơíÛ··lÙ• ùv~”q×®]¬Ă(ñ EXú[ü+vLL!;ñ%ß t¯¦RÑn“€@B‰£¿¿¿R©400˜;wîåË—ùvKK˵kט˜ÑÖ­[Y‡ P{÷ e[ÛÂơѱ£P1£°Đ̃Ơ´¯bñP‡„ÇÈÈH"êÔ©“iöÛ¼Û·oߢE "º{÷.ë0;~\(/]Z˜̉Ă/éK¾¬Ô$¡Ä111‘ˆœsưÔÅÅ…ˆX‡ PX™™B¹mÛÂơQ·®P^¹²8“đ“ö"]d}^ ØPâ(—ˉ(×»•JåÅ‹‰¨ø¬Å‹&np¼qC(ûú¦ñcÔ]©kjÀú¼@±!¡Ä±víÚD>ỉ¤°°0®1..îôéÓ&LàÇ5k² °ÄïŒé̃½ˆđÙ½»0!”¦̉|¹5µ₫“₫d}R 8‘Đr<£G>v́XBBBppppp0×8\´æ„……^KÅØ½{EùöË—ộ¥PựË÷Đ…º¤S:_ư›₫f}F ˜‘Đˆ£­­í+lllrưÔÂÂÂÏÏÏÁÁu˜EV¦L!¾$n/©¦5´æ(å«x  AB#DÔ¨Q£_ườ™3±±±©©©fffUªTṇ̣̃=z´……ë ë̉%¡\đÅ·6Qóæûúº3…¦đUdP8̉J‰ÈÜÜÜ×××××—ˆ’““ÍÍÍYG  E{2Fü0uttwîNî|9’"YŸ (®$4U-¦P(?~|ûöíÇ+ Öá™øe/Uªè« åR¥¨zơ‚íYüơZZ[ƒj°>P\InÄ1&&fƠªU¡¡¡\‹±±q«V­|}}óZâ@¿ÍŸ/”_½*Øw Ixƒkê2‘&²>(Ƥ5â¸{÷înƯºưư÷ß|ÖHDÁÁÁ;w d @‘yxhóC‡„²µ5™™໽©weñƠĂt˜ơÁ@ñ&¡Ä1""â‡~OL—-[–/+yóæ]¹r…u˜wâ„P2¤@_íÑC(¿xQ€/î ÿ£ÿñU<E'¡ÄqÇ™™™DT¥J•µk×^»ví̉¥Kׯ__¿~=7I‘‘±mÛ6ÖaÜÖ­B¹ ‰ăBÙ̃ŒÔ¾½(™’Ñ ¾¬4BB÷8^¾|™ˆLMM·nƯjooÏ5˜˜´iÓ¦nƯºíÛ·OII¹$^Ï ¸ÿ̉ke¥₫÷zơÊOŸ`‡eI˜± ¦`ÖÇzBB#&&&DT«V->kä•/_¾N:DdhhXˆ£ưû…²£#Édê~QüơXÛÚ±>ĐJ=<<ˆèÁƒééé*eff>xđ€đ®j(îªUSÛ¾}…̣“'ê~Ë‹¼ø²=Ùo  ê~àS$”8Θ1£råʉ‰‰“'O₫÷ßùö/^øúú>₫ÜÀÀ`äÈ‘¬Ă( ñ=6jßà¸w¯P®\YƯ]µ£vçé<_§xÖz…ñ=ă³¿>Á̉̉’ˆNœ8qúôi[[Û„„„èèhî¡ssóM›6}ñÅlc(ñ j'_~)”=Rë+÷é~…đU<Ç8qüûï¿smÏ̀̀ŒŒT})VRRR^ÛH—ø‘jỡ³{·P®ZUƯưT'á•2—é2ëĂ=$¡©jư””TĐo  ”ccƠúø˜é4ưsúœơa€b<â8nÜ8Ög@WlmƠÙjçN¡¬æ³4­©5_®H—Ñ2Ö‡ ú‰qâ8ỵdÖg@›¢£…̣àÁê|ĂÇG(ß¿ÿéí7Óæ$¼™æ=c}̀ ·0U  M|gŒx¸ÑÅåÓƯ§SúpÎWñ@ h•„̃CD/^\·nƯ½{÷’̣¾%èÎ;¬ĂP›ø‘ê:u>¹¹x¸ñ̃½Ow_Jóå?éOÖG zNB‰ăÅ‹¬Tâ×eĐ#qqêo{ü¸PvpøôöÆd̀—¿¤/»RWÖG zNBSƠ?ÿü3²FĐ[ÆÆŸÜ¤cG¡,¾72W¨Q&ẹƠƯ´›´LB#QQQ\¡OŸ>;wæ^] PŒ½x!”?uƒcD„P.]Ê”ÉoăÓtú]૸µtCB‰£™™ÙÛ·oí́́~øá …’øÉ˜O=Ríé)”?9ÜØ‚Zđåô€ơq@I!¡ü¬nƯºDdnn¬ô„8qlÖ,Ÿ dÏưœœ̣ëU¼Ö÷bŹLάJ ¥hC‡522ºÿ₫¶mÛp³#èƒÛ·Ơܰºđ²@ºz5¿-ÛP¾\•ª~Gß±>H(A$4U]¯^½o¾ùfñâÅ‹/₫ùçŸ+T¨ “ÉrnväÈÖ‘h̉Û·$₫e¹^½<·ÜC{₫¡øj,©÷:B ‘Pâxï̃½7r夤¤¤‚¿Ư@B>|Ê}û泡x¸ñï¿óë²?ơçËx tOBSƠ₫₫₫¯^½b€†¨ưΘ„¡Üºu›‰omÜL›Y”Dq¼téWhÔ¨Q‡°oâısç¼¶ªQC(ïÙ“ggîäΗSă¡4”ơá@I$¡ÄÑĐĐˆ,--ÿưw## PçΩ³ƠÇl‰ˆúơË}›•´̣ o[=Gjơ  qª₫â‹/ˆÈ̃̃Y#”Må rßFAi4¯âÖF`HB‰ă¤I“¬­­ïƯ»ªñÎ÷íÛ×·o_&M|÷Ưw¯_¿₫äWñ¼9aÂooï øøø\¸pAưäĐ®]^Ÿˆ%ÇÍ}#ÑÔĐZZËú` D“ĐØ̣̃åË+V¬øúơ믿₫ºV­Zvvv¹.dz~ưú‚ö¼jƠ*33³ OPˆoẀăɘ₫Ẩy>#¾µ±%µœHY”h2é,µ-—ËƠÙ,J|CzÛ÷èÑ£|ụ̀û÷ï¯P¡-^¼xÛ¶m>>>sçÎÍơ+oß¾mÓ¦MFFÆï¿ÿÎM ß¸qcàÀgΜùä‹märyAƒm‹uvÆÛ5¤EÏ/J§Nô_9³â_sƯäWúơkúZØF'“Ôz~]'\ *±ÿÖKhªZKöîƯ›••5eÊ.k$¢Y³fYZZeeeåú•ÀÀÀ¤¤¤1cÆpY#Ơ©S§cÇ 7õd}@PđYcæÍÊæ¾î³F€üIhªzܸqÚè6""ÂÀÀ eË–|‹¡¡aóæÍ>|åÊ•úơëçüÊéÓ§e2Y=ÄK—.]ºt)ë“zbáB¡¼cG.ˆWmÜNÛYÇ @$©Äq̣äÉïS©TÆÄÄØØØØØØˆÛ]]]‰(...×ÄñÖ­[ÖÖÖ+V¼té̉Ơ«Wß¼yS£F6mÚäsO$@î6̀ÙöÇB9·BÔˆ P}̣a}D’JÅ¢¢¢>|øúơë.]º˜˜˜¤¤¤XZZ¢ŸÔÔT…Baee¥̉Îơ–ë‹j̉ÓÓß½{W½zơùóçïÚµ‹owrrZ½zu­ZµÔÙoÎû5?Ị̂„–xOO m B¹o_•ÅÏÁ´oŸí#ỌäËèëĂÈ…„ÇÄÄDÊû₫_"JÿDVOß¾} Ö­[—üq( !!¡wï̃ÆÆÆ\KJJJll,ÿØZÏ=‰hΜ9üc×7õüư÷ß---Û¶mËú<€´íÛ'”³'; å5k²}© ·B¥±•©2ëĂÈ…„‘ËåW¯^Íơ.F¥RyñâE"ªV­ZA»upp˜1c†ŸŸ_·nƯ5köèÑ£đđpww÷Q¢ÇCCC}}}]\\9BDnnnS§N]¹re‡êׯŸ!“É/^\®\9Öç ¤Mœ8¶h!₫D<7=i’P^H Ó(¯n  ¬ wJk×®}ơêƠđđđI“&ơë×kŒ‹‹{øđá={¸Ä±fÍ…èyøđáåË—?xđà±cḈíí}||¦L™Â­È“—Ñ£GÛÚÚnÛ¶íܹsÖÖÖ­[·8q"7ê Ÿ“'smgâ÷d¥Sú<̃?ˆW €”É”J©üJHHè̃½{>“чrpp`é'”ØŸKYll,VA“½½(âçêD?`óhζ₫ΟôgWêÊ6|½½.Å.•Øë%t£­­í+T̃ ȳ°°đóó“~ÖđÑ É¶mB³µµP6'aêĂ‹¼˜gù“ĐT55jÔ($$ä×_=sæLllljjª™™Y•*U¼¼¼FmaaÁ:@€|‰W~=3dˆĐ̀¿ëô(M¡¾ư,e=À'H+q$"sss______"JNNÎÿNDiÉí‘êèh¡­ti¡Ü…ºđeq YªÎ Y#3{÷ ewwîÿ müºF¢ßÛg̉Lñr<’ÅxÄñÍ›7ư••Û˜̣tëVÎ6ñKOk×&"ZL‹¤àưÈuÜjaœ86lذ _)™1@1%^ôû—_₫+̀¡9|#Ö߀bD̉SƠÅUóæÜÿÅ‹~ư5Qöơw₫ ?X PH4$,L(÷íKD  C‡ơ£~|Kuª>€° ¤̣TµL&û́³ÏêƠ«W§N²e˲ àÄOÆôëGDó„7ÂĐæÍI‘ûHx́:¢Ơï@ ¤’8*•ʘ˜˜˜˜˜ÿưïƠ«WÿüóÏëƠ«çááQµjUÖ¡¨G¼O… !!BM.'"ªIÂ’à·é6ëp Œqâxư£‡QVVÖ½{÷îƯ»·{÷n"²²²ªW¯—DÖ©S§L¬XRơï¿âZ»vB9"‚Ä îô¡>â$ ¸`œ8ÖªU«V­Z$¢·oß̃¸qƒÏ#ß¾}KDõ¼9uêÔ©S§ˆÈĐĐĐÅÅåĐ¡C¬OÀ'$'g«†”ư_¥ñUñ„5@1"•©j"²´´lÖ¬Y³f͸ê£G®_¿~íÚµëׯ߽{733S¡PܿΠ@zơ/úLí©7_Í¢,Öñ’tŸª.[¶¬¹¹¹¹¹y™2eŒY‡¯„r¿~â_r{µ^‚5ƒfˆ—ă(^$4☕•}åÊ•k×®]½zơÑ£G9·Á³2 Q¢'c\ç|É—;ƯpTôꥴ”u …Ç8qLJJẩÄ«W¯̃¸q#%%Ee“Úµk{|dmmÍ6`€Ü‰Çè¡ùh§ñ|/‰€âqâèéé©Tª₫$­X±¢‡‡ÇçŸîáááææfd$¡aQ€Üefrÿß+Z⛔¬ô ZÁ:D€¢bœ“ñY#·87¬hoo/“Ɉ(999""Bå+7f3@>¾¤=ÿ•~Ï7’áTÊ:4€¢’Ê`¿ø¾}ŸX¥"**u°Ù½yĂư?™„ç`hî|1“2Y‡ ̉}ª Øøøo3:ó_‹h’z'íd€f q(²‰ă5ªGDôë(₫Grü¾b€f0ª>räë3Pd!!D4›™¦ÑÈßøOĐÖÁh ăÄÑÅÅ…ơĐŒé;"¢TáÔé ë 4 SƠFM‰ˆ~É·T§êƯ©;ë¸4 ‰#@ÑÄÄ÷XŒY øo¦hÖ‘hG€¢áKÖâ ¢ ÖahG€¢Ù·¯3¥MĂùré@X‡ yRY ¸ºzơ˜ysÖ™o¸G÷XÇ q(’ơ4̃•å«Á̀:"ma<☖–FDÆÆÆFFF …âñăÇDä́́̀ú´¨kÂæ¾,'y;jÇ:"ma<âèååU¯^½;vÑóçÏ;tèĐ¡n €băØ’c4t _½KwYG EŒG?|ø@D!!!U«V}÷î×x₫üù|¾̉¸qc¶1đ:ÏnmÜpâ7jÅ: mbœ8–+WîÅ‹—.]ºtéß8tèĐ|¾Å6fÎ"TîÖÛj눴‹ñTu‹-XŸ€ÂxKo·Ñ6¾ºÈ­7눴ñˆă7ß|cddtö́Ù„„¥RÉ=+S¦L™"w  ]Vd%TÚü=›Ú-b€v1NË–-;₫|®ïííMDW¯^e}Ẓ3ˆ •;5›ücBƯº± @ë$´¸‰‰I›6mXGđ ¯éơÚ!ÔƯoŸ!ê»­đ=JmllÖ¯_ÏW³²²mll Y‡ °!¡̉ú"’‘’úơc€ÖI(q䤤¤øûûŸ:uêÑ£G>|066®ZµjóæÍÇgnnÎ::(é|ÈG¨ÜªE'Z¡.DD¥J± @뤕8FDDL™2%!!oÉÈȈ₫óÏ?׬YóÅ_°J®Wôj'íêµoQg:Ê:.‘Đ»ª“““g̀˜!ÎÅ^¾|9}úô”””ö  1娜Pñ>IDăhQÙ²…́ X‘Pâđ́Ù3"²¶¶:uêÿ₫÷¿³gÏ8p`úôéVVVDÿ믿²J¨~$º‹ñfm:Ơ’ˆÖÓx"¢¾}YG  ª¾qă™nÛ¶ÍƠƠ•k´µµ­Y³fË–-ûöí›––†•z€‰‡ôpíêun‘3Å₫WÅ“1P2HhÄñ̃½{DäééÉg<///Âû€gr*_\æ₫†ư×̉¾=ëtAB‰#G¡PäÚ••EDXt¯95*ÿ´¦+ŸsEGzÊ:4’Pâ(—ˉ(""âæÍ›*Ư¾}ûüùóDäââÂ:L(YÂ)ü êm₫æ₫@_³ @×$t£‡‡Ç¹sç>|ø0tèĐÁƒ7mÚ´|ụ̀/_¾ Û¾}ûû÷ï¹mX‡ %Kcj,T*=á‹£èă³zÎÎë Ø’Pâ8jԨÇ?~ü899yÆ 6lPÙÀÉÉéë¯ñ+>èœä|¹₫½¯.=uäÊ=Ú¥̉_?À“1PbHhªÚÔÔtåÊ•¹~êàà°råJSSSÖa@IqˆƯ£{|ơ’\Xúû@áư¨X‹J 8QíÚµ;öû￟:u*66öƯ»weË–uvvnÑ¢ÅÈ‘#MLLX%HêÁ—/\Îlø±\¡Ñ>Ñ̉Â/²€5É%ëÖ­‹çª^^^̃̃̃Æ ›8q¢L&+Z÷¹8BG®Đ¾zœÑÇŸCyëÔ‰uà:%­ÄqÉ’%›7oÎÙº~ưúW¯^ÍŸ?ŸuŒ ‡ºRW¾ü>pñJ;ƒƠÇ ­x2J Ưăxûöí-[¶peCCá% ü(ă®]»""đ¶Đ0ñKb¾¡oJQ)®üô©°MăÆKx¤J0 %₫₫₫J¥̉ÀÀ`îܹ—/_æÛ---×®]˽¨zëÖ­¬Ă½̣}'~ÌZÂzơ¶?X-q43c>€NI(qŒŒŒ$¢N:ùøø˜?jß¾}‹-ˆèîƯ»¬Ăưñ̃ưD?ñUqyà€°ÙÔ©âï¼c53J‰ÈÙÙ9×O]\\ˆ(!!u˜ ?,È‚/ÿEñå~¶qrÊăËÙ¿( $”8Êår"Êơ.F¥RyñâE"ªV­ë0@Ox_nE­ÚR[¾úư÷Âf‹¾óáƒPÆ P̣H(q¬]»6…‡‡O4),,ŒkŒ‹‹;}úô„ ¸Ä±fͬĂ}°—ö^£k|ơú‡/ïÙ#læá‘ưkx2J6™R©,z/‘Đ½{÷|&£-,,:äààPˆÎ÷íÛ·wï̃˜˜˜2eÊ´hÑbÆŒÖÖÖj~7>>¾k×®­ZµZ¶l™:ÛËạ̊¨¨(§̣›×]À Û‹"#aQXñ­D$^.Vơd÷îôçŸy|¦'đ—E‚pQ$¨Ä₫[/¡G[[Û+VØØØäú©………ŸŸ_á²ÆU«VÍ™3ç₫ưû 4077 üúë¯Ó̉̉Ôù®R©üæ›o’““YŸĐqÖ¸Œ²ưBxíP.S&Ç7ù¬ D’PâHD5 3fŒ»»{™2eˆÈ̀̀¬fÍ#GüçŸZµjUˆ>£¢¢́́́?¤•8.Y²dóæÍ9ÛSSSׯ_ÿêƠ«ùóç¨ĂÔÔT…Baee¥̉niiID¯^½Êë‹×®]ûơ×_}||¼¼¼nß¾]ĐáÖ¤;~ü¸nÎ!äêÉ“'¬CU:¾(Km–¾·|ÏWÅ.¥XñÇÛư÷8̀œ9‰±±I*=8ư₫;ÿ3Ö‚bcIá/‹á¢0סCÖ!H…„ÇÛ·ooÙ²…+* ®̀2îÚµ«sçÎ 4P¿OîÑi³ï“åǹk<--mæ̀™NNNÓ¦M+ܱ”̀Gô%‹YHÎ.Ê3zæO₫|UIJʱçS§„̣?”#*§ºÅÇ™]F΄~]1…‹ÂVÎÖs•ºÇÑßß_©T̀;÷̣åË|»¥¥åÚµkMLLˆhëÖ­êÓÊÊJ&“¥¦¦ª´sËëpă9ùùù=ỵdé̉¥¦x¥€^p a%¯³t6çâ·Qó©îŒ$ô+7€.I(qŒŒŒ$¢N:ùøø¨dlíÛ·oÑ¢ôéf###KKËœ#‹IIIDT!·ÛÛ/^¼¸k׮ѣG×­[—ơ) ¨@Âßô~ÔÏ‹¼rn³j•P̃¸1·^^¾ʃ³>&6$”8&&&R̃£ñ...D”Ï{ẹbgg—˜˜Èe¼ØØXÛGGGц äơêƠ‹ˆ₫üóO¹\̃¥KÖç `1-~IBη‡öäÜfÈ¡́íGGâ'cÄ_(I$4á"—˯^½‘ó#¥RÉ­Â]­Zµ‚vÛºu먨¨3gÎtîÜ™ï-44ÔÚÚÚCơ5´DDUªTá·ä¼}û6,,̀ÁÁÁĂĂ£bŬϨ+™’çĐ¾ª̣jA8'|8¿……Ÿqă Ú­ƒƒĂŒ3üüüºuëÖ¬Y³G…‡‡»»»5ß&44Ô×××ÅÅåÈ‘#¬OhF%ªÄ—;RÇöÔ>×ÍzôÊÏŸ³@Ú$t£­­í+TVêæYXXøùù988°W"¢áÇ/_¾ÜÙÙùرc¯^½̣ññÙ¶m[ÎÅ@o,¤…Oé)_=FÇrƯ,,L([X¡aƯ¥§ å̃½Y32¥RYô^4(99ù×_=sæLllljjª™™Y•*U¼¼¼F]\̃à"—˱£ÔÄÆÆb4©Ñ̃EyFÏÄëïäuk#‰ßEơüỹïüí7âç(₫ü“ºvƠùÙ̉üe‘ \ *±ÿÖKhªcnnîëëëëëKDÉÉÉÜ]‰êgçè\^›EFf«æ÷öiñ“1z5äOB‰ă5k¸B¯^½œœœèăû]ÔgHÂ|ó0֘絥øY»;ẉíT<¥ P‚I(q |₫ü9µlÙ’K d É¢,¾º‰6åµå‹Ùªnn¬C($ôpLï·œ?~ü˜u,Pü\¡+¿Đ/|5Ÿ[‰¨zu¡|æŒÚûhÓ†ơQ°$¡Äq„ ={ö$"ÿ*£Ỵ̈}Á—c)6Ÿ- z÷N¨f_¹5‡}û„2̃%›„¦ª'MDD+VŒ‰‰i×®›››µµµLüĐ#­_¿u¤ 92~V|GßU¥ªùl,nÔ§ơøäW₫ùG(Ϙ¡Æ>ÄOÆ ̀úˆ“Đˆ#ÿæ˜üU¨PA.—תU«T©R¬CfFĐˆô¯î£}Ÿü··P₫ñGơvóÇB¹lYÖ À˜„Ç 6¨¿±‹‹ËÊ•+]]]YG œ â·Â¨sk#:%”¿ư–ơ1CÅuª:::zĐ AÉÉɬZSk¾ü^«ó•-„̣’%ß%~MÔˆă×_DDåÊ•kÚ´©½½}BBBxxø“'Oˆ¨aÆuêÔyụ̀åÙ³g_¾|ùæÍ›­[·?uà Sâµ¾×Ñ:+²Rç[§O åo¾QoO.eÜà ©ÄqĐ A_}ơơíÛwΜ9&&ÿƯö®P(V®\ùÛo¿Ư¼ysö́Ùr¹<55úرáááaaaHJ” T/[’åxRë'@³fByÙ2µw&~2THjªzơêƠqqq*TX¸p!Ÿ5‘¡¡áôéÓœœRSS×­[GDeÊ”™9s&=}ú”uÔ ;£i´x}ï7ôFÍ/†… åéÓỠß¶mB¹R%ÖGÀ„ÇóçÏ‘£££jT2™̀ÁÁˆ®_¿Îµ”-[–ˆ^¿Vë̃&ĐA@|UÍbˆ¨I¡¼bEAv™’Âú ¤EB‰cJJ ƯºuëÎ;*=xđàÆD¤T₫÷OÅñălj¨|ụ̀¬£éDør*¥ªÿÅsç„̣Ô©…Ú·ë£ ƯăØ Aƒ¿ÿ₫;##cđàÁ>>>M›6­P¡Âëׯ/\¸°yóæ´´4"ªW¯-X°à?₫ "'''ÖQ€.ˆˆÙI;MÉTÍ/6n,”W­*È.ï̃Êx2€ˆ$•8Μ9ọ́å˯_¿~÷îƯÆ7nܨ«‘ÑàÁƒ‰èêƠ«\KÏ=YG Z'ÎûR߯è+ơ¿.”§L)È^ñd @ª®R¥ÊÆ+T¨ë§ÆÆÆóçÏoĐ ß̣Å_têÔIỮ xêFƯø²1諒ê·aC¡¬̃«©DÄOƸ»³> ’ ¡G"̣đđøûï¿wíÚûöíÛ̉¥KWªTÉÓÓó믿æ!¢Úµk·nƯzÔ¨Qxë €~ÛL›Óa¾NéúúÅ‹Bỷ¤î;>ơÑH´G"*]ºôĐ¡C‡JDÉÉÉfff2™Le›~øu˜ uOèÉpÎWƠŒS³¦PV÷ÍÔ/É%œ¨¨¨‡¾~ưºK—.&&&)))–––¬ƒr"áé·Stª _ŒÊ~3ơ•+ByÚ4Ög@*$—8®[·.₫ă$‘———………··÷°aĂ&Nœ˜sôô’ø˜E´¨µ(Đ×­­…r``Áw¿~½PÆë©>’Vâ¸dÉ’Í›7çlOMM]¿~ư«W¯æÏŸÏ:FĐ:32ăË-¨Ål] ¯ÇÇÓ›7BµW¯‚G°i“Pvvf}>¤BBOUß¾}{Ë–-\ÙĐĐoçGwíÚÁ:LĐ®ÔS¼¾w!&©…̣ùó¬@H(qô÷÷W*•sçν|ù2ßnii¹víZîíƠ[Å+«€̃Ù@̉A¾ZĐbˆè̉¥lƠFxq€OB‰cdd$uêÔÉÇÇÇÔ4Ûk!Ú·oߢE "º+~—è—hO ……ȉH´Ø+=|X¨8ÄóÔăÆ±>+"¡Ä111‘ˆœó¸ÈÅÅ…ˆX‡ ÚâJ®|ùƯ(D₫)”Í̀¨J•BÅ!~2ÆÇ‡ơY %r¹œˆr½‹Q©T^¼x‘ˆªU«Æ:LĐ ñcÔ+hEmª]ˆNºwʯ_6ñZ< "¡Ä±víÚD>ỉ¤°°0®1..îôéÓ&LàÇâ%}@_ˆ³Æ̃Ô{*M-D'¿ü"”]\ÈØ˜ơQè -Ç3zôècÇ%$$sÇ ï°°°‡ûôx†ÚöÓ₫Âơ3fŒP¾w¯°ÑDE å±cYŸi‘Đˆ£­­í+lllrưÔÂÂÂÏÏ]5è‡!4$¢ùêSzZ¸~æ̀ÊÍ›! ñ øM ; 8Q£FBBB~ươ×3gÎÄÆÆ¦¦¦™™U©RÅËËkôèѬṂ'ÿm´¯î1jÎâÅB94´1‰ÇZµ ’VâHDæææ¾¾¾¾¾¾D”œœlnnÎ:"ĐÈR‘cI˜ .JÖøå—B¹ORó²²XŸé’ĐTuNÈôXgÇÎ|Y<[]{÷ åB®Ư˜S: N €´IhÄ1--ị́åË7nÜxụ̀%7Öhkk[§NÏ?ÿǛ̀¬èư€tˆ£̃FÛªSơBwU]ôƠ•+‹Ö=ByüøÂ÷ §$‘8¦§§ïÚµËßßÿƠ«W9?555íÑ£ÇäÉ“­­­YG  ÎÇ̉ØA4¨Đ]½|I÷ï U_ߢE&¾Áñë¯YÉb?U}íÚµ¶mÛ₫øă¹fD”––¶k×®N:]»vu°PT⬱µØ@̉[… Bùôé"wæ »P 0N_½z5jÔ¨ÿư—o166vpp¨Y³¦ƒƒƒ±hßW¯^}ươׯ ÿ.`O<%m•euN¥·ădzU›5c}xúñTơöíÛ“’’¸rÛ¶mÜ A™L¸|ụ̀Ö­[¹ơÀß¾}»mÛ¶É“'³ §ơ¸O¼̣•GWȹƯú(”SR_\œPh­k=„Ä û‘đè±–²Æ{÷èÊ¡ ƒIMÊM›jgz‰#¨ëèC}øª–²F"’Ë…̣Í›Z;ÜàP@H@-‡èP/êÅW³H[¯é›0A(תEµjiíÄ78vè µƯè’²Ͼ}ûöîƯS¦L™-Z̀˜1ĂÚÚ:ŸíÓ̉̉ö́Ù³ÿ₫'O”-[ÖƠƠuøđáM4a}l̀ Ëi9_ͤLÉĐ_~Ö¯ÊZn€‚+‰ăªU«üưưÍ̀̀4hđèÑ£ÀÀÀèèèmÛ¶™æº}ffæĐ¡C¯]»fiiÙ¸qă÷ïß_¸p!,,l̉¤IăÇg}4º@â¬1̉ ÉPKû/ܨ­[9¯_ åÖ­µ¹'ư¡ÿSƠQQQvvvÇpà€••Ơúơë###Y€N­ £i4_}OïÉXKûRYâ[‹Snp( ưO÷îƯ›••5eÊ” *p-³fͲ´´ ÊÊÊư&­ăÇÑ́Ù³ù!I—1cÆ(³gϲ> Ư™Gó¦Ót¾J©¥©´öv7hPÖÖÂ<ñ¯̃̃Z̃€ĐÿÄ1""ÂÀÀ eË–|‹¡¡aóæÍ¯ˆü‰533sww7º¸¸Q\\ëĐ_̣]H ùª’”¦dZ„₫>AünøpÖ¹Ñó{•JeLLŒ¸ƯƠƠ•ˆâââêׯŸó[¿ụ̈‹‘‘ꙹ}û6999±>&]A#6Ñ&¾ª½•w8'NĐ;Bơ÷ßµ|xÿ₫+”;ụ̉Îô‡'©©© …ÂÊÊJ¥Ử̉’ˆ^½z•ë·jÖ¬©̉Pºté=z¨³_¹x:"ú8ư ¬;æăÂ… ,¸ÿ¾½½ư?₫èååÅú€´Ë́ÿ%aWÛ3ÔDtêƯº%TU¬IÑóÄÑÈÈÈ̉̉2çÈbRRñÏY甾lÙ²íÛ·›˜˜Lœ8qĈy-ú 7TÖôÖAÖHÙhNHĐÉq>z$”{öÔÉ.ô„'Ddgg“””daÁßÔD±±±ÜG¹~%++kÚ´iươW›6mæÍ›—O~  7˜dơê å¨\9*Vp(,ư_§uëÖ …ầ™3|‹R© µ¶¶öđđÈơ+Û·oÿ믿¾úê«ơë×#k„’€IÖarưºPưă]­ø4_|¡«½èưOûöík``°nƯ:î¾F" HHHèƯ»·±ñ/ÀHII‰å[S*•;v́([¶́7ß|Ă:v]gÖd­›¬‘ˆ¾ü̉/¿xÁú,€ôªÚÁÁaÆŒ~~~ƯºukÖ¬Ù£GÂĂĂƯƯƯG‰^gêëëëââräÈ‘—/_>~üØÔÔtàÀ9{ëÙ³§ëcĐŒdJ.Keùj]ª{®éf×e…ƯR¿~T¾¼®ù̉%¡Ü¿¿®ö  'ô?q$¢áÇ—/_₫àÁƒÇ³··÷ññ™2e ·"ONܸcZZÚ-ñ£áÁjĐçè\jÂW»P—ĂtX7» ¡DD{öèđ°ưü„̣wßépÇú@¦ÔúaK¹\u¥&66« ‰ưB¿Œ¡1|UṆ»tWg{—‰î¨Œ¦êƠuxäâ}ă§_nđ—E‚pQ$¨Ä₫[¯ÿ÷8€ñ4^œ5.£eº̀ …̣ôéºÍÅÊ”a´c€b¬DLU¯95?CÂ"ÁÜÚélï P–èm‚Ë–éöà/Ê«Vévßú‰#@ bEVoIX?âíɾưŒRIóç ƠbI{o3̀Ơœ9Bùë¯uºk½€Ä ¤`²X£˜èÖ˜À@Ö§ ÷8”̀³Æ„r½zÔ«—ÎOÁÑ£Bỳ˜Â÷P‚!qĐsgé,ó¬ñÜ9 ªW¯²8¾¾B78 G}öưÔ”̣Ơ:TG÷Y#5Ö‹¤gÏ‹èh¡lbÂ(€â ‰#€̃êH¿#aë 4á:]/B…de%”Ç¥Yœ‹§O…r£F,"Đx8@?™‘Y*¥̣Ơ=´§ơÓ}3g̉[á1nÚ°Ñé˜:U(c °8è!•›ŸÑ³Ä` /&&ÛJ,_Ô²w¯Pƈ#@aaª@¯DPDÎGa˜dDäâ"”¯3˜$Ï în($úc.Íơ$Oq “Ga8â—BOuê°;/?ư$”1O P˜ªĐu¨ÎMºÉWÛP› à!BÙØ˜Ö­czj¾ EÄ@¨LOÿL?O  ¬‚9{–¶mªéé́Î hG€âí6Ư®EµÄ-èQeª̀0¤¦Â‘ôï¿ !"¢  ¡Œ÷S îq(ÆæĐ•¬QIJ¶Y£øÖÆ… ÉÎa,D„…x4 #Å•9=¡'|µ:U¦è"ô§mÛ åJ•hî\¶áÑƯ»B¹LÖÑoq(–d$g¾äË•Ga®Óơ•´’mTÑÑäë+TY®ơ-†yjÂT5@qâB.1#na¸R£˜««P¾qƒu4¼Ư»…²—ëh=Œ82’‰³ÆVÔJ"Y£ø˜Ÿ~¢ÚµY”S©R¬#ĐH´Sezzmû‡₫aQ¹rB¹iS5‹u@¼ñă…rϬ£Đ˜ªºÔà]·¤PJ’ăѫWBờÖ‰mØ ”ÅsÖPXH$Me Ñ•\£(uPÿÙ¹“v́ªRy †#^y¼bEÖÑè LUHTê¡’5n  ̉Éß½#¡*­¬‘ˆúöÊû÷³@O`Ä@LÉô=½·Hä9……PfMNaaB¹IÖÑè Œ8HËq:.#™8klD¤–5£^¹’Úµc¿₫Ê’  Câ !äÙ‘:[Æ̉Øótu\Ùˆ³ÆáĂ³­û-}úèSh¦ª$!âÉQ¥Qj”=kôô¤ßgP®̃½Êe˲@`Ä€=7rSɧ̉T fµj å2eèÂÖåjùr¡¡'¬CS—…½{'T¥¾ÊwN åÙ³YG Ï8̉:ëKỏÍZT‹utê’ɲU‹_Ö8~¼P;–u4zSƠv„ÈH–3k\FË”¤,.YcRRñωhÆÜË H ¢e$ëJ]UÚ‡Đ%)§ÓtÖªk÷n²´̀ÖR,³ÆÊƯ»³@ÿaª@-ñïH9Û?§Ï/ÓeÖÑ̀àÁ´}»Puu¥¨(Ö1øFñ H>á-½µ#»ô!çG R·a{[[JLªS¦ĐªU¬c*œ­[…rưú¬£(8ä)¢å$WR.“¸1ó}Æ:ÀS¹©ñ¯¿¨m[Ö1ÚĐ¡BY¼#hM1,Đ0 “‘̀•\sf×麒”Å.kܼ9—GaqÖ"”ñVD]Áˆ#@6؇úäúÑ9:ט³°0ÜÜèîƯl-Ạ̊Q±v턲ʱ€Ö`Äà? hŒd¹f₫ä¯$eq̀_½"™,[febRü³Æ;w²U-,XPR q ¶ÔVF²ù4?çGÜÄôhÍ:ÆÂ˜5‹Ê•ËÖâïOii¬Ă*:ww¡É:€SƠPrƯ¤› ©aå’IY’eEÙ‘ë ÏÀ@ud±Ø4rV¬ÈV­Qƒu@%F¡$Gód$«Curföd¯$åzS|³Æ¹sI&Ë–&vè /Y#M­²®?GP<`ÄJ{t¯µ{Drưtø~cc‘¼yCÖÖª'N·7ëÈ4Eüdø̉¥¬£(q0â% ë2’ÉIkÖ¸‰6)IYܳƮ]sÉ•J=Ê7ǹV1ƒu@%GĐg»i·Œd2’­·ZŸóÓ T!œÂ•¤FĂXGZ$¡¡$“Ñ‘#Ù—/×»‰Üqă„²¾@ñ€©jĐC—ẹ́—ôå}ºŸ×Óiú2ZÆ:L xøœU+V¤gÏXG¦qffBy₫|ÖÑ”PHAÜ £it8…çµ=ÙSpmªÍ:R P*É‚’“UÛÿ₫›Z·fœÆmÙB©©Bũ<Ö”P˜ª†bï4®I5e$«KuóÊ}_û*IOñú‘5ÖªEªY#÷è´fD4Lt/&©ØÁˆ#W›hÓ(•EYùlăC>Ûi;ž‰%ku{–²råèƠ«\Ú_¾$[[ÖÁiï˜y3g² DĂˆ#'éaêÏ=ï2‚Fä•5‘Y,Å*IÉezạ̀e24$™,—¬ñ̉%R*ơ7k\´(Û1ûù± DCâR÷̃/ ¥¨”ŒdÎ伇öäµe+jMÑJR&SrUªÊ:pÍøùg’ɨ~}ÊÊ‘$’RI_|Á:Dí<˜æÎª˜¤` SƠ E¯éơrZ¾„–ä?ÍéI=¡_ÊSyÖQk̉Çäå•çĂÑ+W’¯/ëµ­qc Ư±úà뀉c̃öíÛ·wï̃˜˜˜2eÊ´hÑbÆŒÖÖzq—œTí¡=p‚N¨¹ưôă·ô-ë¨5́ùs:”Ïsƒ;髯XG©¶¶”˜(T1Ö Hs·jƠ*33³ &ù÷_:~ü¿ÿ̃¾ưôöîî´u«^?ø"6w.-Z”K;²F‰A☋ˆˆƒ–-[̣-†††Í›7?|øđ•+WêׯŸÿ×ß}k/́¢̉ø̀ñ©ưSÇl›™%—M1WÙ́a;UoÔT§1®ú§˜jâ–tĂŒR ăBw˜³1Ë8Sa˜¡0IW˜|È4}ŸYúC¦é‡¤*O”† Ÿó ×Üå{»¹vâªa+íªúd…‰· {X©iƠ'*_|₫¦´Ơq˃æƠ*¨¾PåL¬c3ç0•Æ\;̀ùơ_—®hưAêh“öoå³TË”̀̉…8ƠʾÜÚü÷¦vÑDDˆÂ¨iSƠ.\ † ³µ(dh¨ºY®ßU¿1=J•ÊÖrùr.™¬ú¾~MÙïv ¦§Os?NNôøq!N h•L‰ßé³S*•îîîÖÖÖgÏ·¬X±bÉ’%={ö̀¿Ẹ́÷¢íïC½éD+Ö¡HÂ(úu-s¡hÖHCóæÊ:ˆ’+66Ö9çĐ)\ ’ËåQQQ¬£`#ªRSS …•••J»¥¥%½Êơ­W6t¢ƠÿEÉYG#!ÓhÅ ZfGÏY"!oGzơí·DD±±¬c)¹>>S¦LáVä(™8æ©k×®]»ve€TàGP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP G(:tèÀ:P…‹"M¸.„‹̉ÄÔ‚ÄÔ‚ÄÔ‚ÄÔ‚ÄÔ"S*•¬cĐ7r¹œu ]QQQ¬C`‰#¨SƠ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $³oß¾¾}ûzxx4ỉä»ï¾{ưú5ëˆJ–´´´-[¶té̉¥^½zÍ51bÄÙ³gsn†ËÄJ||ü_|1cÆŒœá¢è̃Í›7'L˜àííƯ AŸ .äÜ×E—̉ÓÓươ×^½zyxx´jƠj̣äÉÑÑÑ97ĂEÑÈạ̊ëׯçú©:—@¿/“áüùóYÇ V­Zµté̉äää ¤¥¥?₫âÅ‹]»v566fZ‰™™9xđàưû÷+ OOO ‹‹/8pÀÀÀÀÓÓ“ß —‰¥R9~üøØØX¹\̃®];ñG¸(ºwâĉ‘#G>xđ ZµjU«V½xñb`` »»»³³3¿ ®‹.)Áƒ7hĐÀØØøôéÓ{ö́ñôôtttä7ĂEѵk×̃¼y³oß¾+VTùHK ÿ—I Ev÷îƯ5j4kÖ́ùóç\Ë¢E‹\]].\È ́KÑËIDAT:´’bçή®® HMMåZîƯ»çéééæævçή—‰¡M›6¹ºººººNŸ>]Ü‹¢{õ¼©_¿~Ưºu/]ºÄµ\¿~½V­Z^^^ …‚kÁuÑ1î'ØäÉ“322¸–sçι¹¹µk×ßEÛ̃¾}ñư÷ßs?¬®]»¦²:— $\&LUkÀ̃½{³²²¦L™R¡B®eÖ¬Y–––AAAYYY¬£+?ND³gÏ655åZ\\\ÆŒ£P(ø k\&V¢££W­ZU£Fœá¢è^```RR̉˜1c¾øâ ®¥N:;vLHH¸yó&ׂë¢cW®\!¢!C†q-7vss{øđá«W¯¸\mëÚµëÀwï̃×ê\‚’p™8j@DD„AË–-ùCCĂæÍ›'&&r?@ÛbccÍ̀̀ÜƯƯÅ...DÇUq™˜È̀̀œ9s¦µµơ¬Y³r~‹¢{§OŸ–Éd=zô7.]º4**ªnƯº\×EḈí퉈ωH©T¾yóÆÀÀ€O%qQ´mñâÅ6lذaƒ——W®¨s JÂeBâXTJ¥2&&ÆÆÆÆÆÆFÜîêêJ¢¬´ê—_~ÉùkâíÛ·‰ÈÉɉp™ØùùçŸ###úé' •pQ˜¸uë–µµuÅ/]ºô믿.[¶́đáĂiiiü¸.º×¥K“Å‹Ÿ?>--->>~îܹO<éÛ·/÷E6mÚºuëÖ­[‹ï+å©s JÈe2b@±—ªP(¬¬¬TÚ---)ûo =5kÖTi (]º47²‚ËÄĵk×~ươW///.ĂEѽôôôwï̃U¯^}₫üù»víâÛœœV¯^]«V-ÂuaA.—oß¾}èĐ¡C‡å}||¾ûî;®Œ‹Âœ:— „\&Œ8÷›º™™™J»¹¹9½}û–u€%B¡Ø¶mÛÈ‘#SSS—,YbkkK¸L,¤¥¥Íœ9ÓÉÉiÚ´iym@¸(ºơîƯ;"‰‰9v́˜ŸŸß… BCC'NœøôéÓÉ“'sW×E÷’’’–,Y’’’âîî̃¿ÿ¶mÛk$"‡qăÆedd8p€pQ$@KPB.G °³³KLLä₫dđbcc¹XGW"deeM›6mÛ¶m­[·₫믿&L˜s” —I—¸—^lذA₫Q¯^½ˆèÏ?ÿ”Ëå]ºtá6ĂEѽ *Ëd2q#÷÷%33“«âºèRbb"U­ZU¥½ZµjDộåK®‹Âœ:— $\&$Đºuk…Bqæ̀¾E©T†††Z[[{xx°®Dؾ}û_ươƠW_­_¿>¯ßêp™t©J•*³kÚ´)988tîܹyóæÜf¸(ºçíí””tï̃=q#·P¿Ö&®‹.U­ZƠĐĐ0::Z©TÛ£¢¢ˆ¨zơê\…9u.A‰¸L¬W ×OŸ>­Q£F‡̃½{ǵøûû»ºº.]º”uh%BVVV›6m¾øâ‹´´´|6ĂebëÖ­[9߃‹¢{wîÜquuíÛ·obb"×răÆ  $$$p-¸.:6zôhWW×Ơ«Wó/ï¹wï^£FjƠªõà¢è̀́Ù³s}sŒ:— $\&™2û¯8P8›6ṃóósttlÖ¬Ù£GÂĂĂkÖ¬¹iÓ¦œåƒÆ½xñ¢Y³f¦¦¦Ÿ}öYÎO{ö́éăăĂ•q™º}ûv¯^½ºuë¶lÙ2q;.îựË/+W®´´´¬_¿~jjjDD„L&[¶lYÇùmp]t)!!¡OŸ>Ï=«ZµjÍ5/_¾œ••5gΜ̣›á¢èÆœ9söíÛ·wï̃œ·h«s ô₫2Ο?Ÿu úÀĂĂ£jƠªÏŸ? 322êØ±£ŸŸ_ÎA¢¢¢333_ä¦FüS2¸L ½|ùrÏ=r¹¼]»vâv\Ư«_¿¾ƒƒĂƒnƯºơáÇF­\¹²aÆâmp]t©L™2ưúơ#¢ÿư÷Úµkơë×_ºt)÷ĐE7Nœ8qçξ}ûV¬XQå#u.̃_&Œ8€Zđp ¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#Xzzú®]»†̃¬Y³Úµk·k×î믿̃´iÓû÷ïƠïd÷îƯr¹\.—÷îƯ[g‘GGGË?:₫<ƒs—›“'O₫óÏ?ÿüóÏ«W¯̣Ú&00 »fÍIII97đööæ6Xºt©ú»^³f ÷­ñădz> P q€‚¹}ûv‡æÏŸö́Ù/^¤§§?zô(44ÔÏϯ]»v§Nb`ñ3uêÔqăÆ7.***¯mÚ´ichhHD …ấÙ³*Ÿ̃¿?>>+ẃØ‘ơ€̃BâëăăóôéS¾…Ëf8ÏŸ?Ÿ2eÊƯ»wƠéỀ̀̀ÑÑÑÑѱB… ¬«°´´lܸ1W UùôôéÓ\ÁÑѱvíÚ¬ƒ½…Ä ÀÏÏ/55•+÷îƯûĐ¡C7õ [¼x±™™¥¥¥M™2E®ºvízâĉ'Nlܸ±è=ỵ$==É9ÑÙ®ù¡ÄÓ§O+•JñGgΜQÙ@8€ºÎ;ẉäI®üơ×_ÿøă5jÔ044,_¾|Ÿ>}V®\É}ûđáC®,¾…N¡P¬Y³¦yóækÖ¬¡<îq̀̀̀ܵk×€6mZ¯^½.]º̀˜1CeSÜgBBÂôéÓ6lغuk//¯€€€B—¸Ă¤¤¤%K–ôîƯÛĂĂ£{÷î₫₫₫™™™…Øu^÷N:U|'â+är9Ÿ‹:T.—§¥¥å'?[˜˜xëÖ-¾=---""‚+wêÔ‰oÏÊÊ:zôè Aƒ¼½½k×®ííí=hĐ ˆ(ÿ³‘O伄„„Å‹÷ïßßĂĂ£M›6'N¼}ûvÿ¤€d±]»vqKK˱cǪ|Ú²eË-Z¼xñ‚ˆ¢¢¢ªV­ª²Á́Ù³8Oÿééé¼qăß}øđáï¿ÿ₫«¯¾RÙ>99yÀ€?æªï̃½[±bÅÇüñÇÂ`RRRÿ₫ưïß¿ÏUï̃½{÷îƯÈÈH.ÓƠê®ƠaeeƠ¨Q#îÇĐĐP~J:<<œ̣trrrwwç·Ÿ:ujPP_¿xñâÉ“'×®]«‘ÂĂçM›–ÀUSSSăââBBB†:kÖ,í `# ®+W®p…víÚ•)S&çºuëV₫Y#mܸ‘ËMLLZ·n=hĐ ºuë‘R©\´hуT¶üøq¹rå4hÀÇÈÏÛÔÅ‹ïß¿ïààP·nỬ¥KsÇ¿yó¦–v=bĈSSS®êççbbb’×ö:tà â‡øÅóÔAAA\Ö(“É5jÔ£Gî£àààđđđÂ"±ääd___.klÔ¨Ñĉ»téb`` T*7õXô]€Ô`ÄÔ’™™É,999ôëÿ₫ûoơêƠÇŒS¹re›\·á³™1cÆđ#Ç?{ö¬B¡8wî\µjƠT¾âíí½víÚR¥J½xñbđàÁ±±±D´aÆfÍî0çÎëăăCD<èѣLJˆèæÍ›9Ÿ8ÑÈ®­¬¬¬¬¬d2Wµ³³«\¹r>Û·mÛv₫üù …âÖ­[‰‰‰åÊ•£Œ‹‹#¢*UªÔ¬Y“ß²S§NË—/_¾|ùàÁƒ¹–ääd~¡Í·oß=>7íׯߨ»woîF̀øøø|V€b # î¡iN>ëTçÅÍÍí“éfÓ¦M¹ñ°ØØØï¾ûN&“Ơ¬Y³yóæ­ZµªS§NÎí]]]íííÅ_ç J¥2..®zơê Re´Ï̉̉’ïPÛ»V_‡¸¥ËO:Ơ£G~ZüX RRR̉™3gnƯºuçΛ7o¦¤¤h0n•ˆFŒ‘ë>”ËåÚ; {qµ[[[såœ#pœwï̃½yóæÍ›79Ÿ æ¿›I“& 8Æ#"¥Ryûöí7öíÛwàÀ9³U[[[qƠÔÔ´lÙ²\™ŸU/~Ê8תVw­¾¶mÛrCzÜ >¿¦£ÊB<K–,iÔ¨ÑÔ©S7mÚ®P(¸©mHNNæÏËëׯµz*@÷8€º<<<¸ÂÉ“'s]̉¥C‡ 6lذ!ÿü5/Ÿ$Œgddôư÷߇‡‡¯^½ºk×®üG—.]Êù&½ÄÄDqơưû÷ü|º£££VOĂ]—+W›COJJ:₫<·OƠªUUÆö6nܸyóf…Báää4₫ü?ÿüóÊ•+̃̃̃ ĂÜÜœ„̃´iSHnºté¢ƠSº‡ÄÔÅßÊ¿{÷n•OO<ɶq÷áHzzzBBBBBBzzzÇ—/_¾yóf~’_ªÍ­₫Ă9wî7§llĺàà ƠS¡₫®Ũ+­’q?¸¸|ùrî–J•yj"úă?¸Â¼yó  —Ë ÿư÷_ơ÷̣ÉÈ«T©Â EeKKK ‹|€b ‰#¨ËÛÛÛËË‹+/Z´hưúơ/_¾$¢ŒŒŒC‡ñîV®\ÙÍÍ­ ß¿¿ÉGÜúˆ†††^^^}úôá6@r222~øá‡ŒŒ "zụ̀å²e˸öV­Z‰_„¨ ŸÜ5ä7øåĐÿú믋/æß­:{oÛ¶­EFFr-*‰cJJ ?M̀ç·oßVgơ#çÿ0́Ù³‡¿ 488ØÓÓ³aÆ̃̃̃½¥¤Ç@|ûí·}ûö}ÿ₫½R©\»víÚµk­­­“’’ ·Aé̉¥×®][ˆ¼M.—ÛÚÚ&$$(x{{[ZZ>}úôĉÜmÛ¶Íù­¿₫ú«U«VŸ}öÙÍ›7¹ÉbƒI“&éàTä¿k~!î÷ïß÷èÑĂÍÍíơë×üÓ$*,,,¸û7lØ=dÈ#£ü~8ÛÚÚÖ¯_ŸÏäªU«Æ¯ÑÈ)S¦L™2e¸>gÏ}äÈ™Lvæ̀™üßSĐÈG½wï̃¤¤¤¿ÿ₫{đàÁÑÑÑü=—Æ ăŸ.½G(WW×Í›7‹Ÿ~ưú5Ÿ5:::₫üóÏ…n$"ƒơë×s“› ûöíûí·ß‚‚‚¸©XOOÏ‘#Gª|¥Aƒ/^¼8₫<—ºq«ähơ¡f5wíîî̃¹sg®œ––våÊ•ØØX'''~”N¥7®pơêƠ¥K—ª3î(^œ(ç<µL&kÙ²%¿÷'NüóÏ?vvv 6乡â\©¹………ŸŸ7|ñâÅuëÖs+₫ 0`âĉھ  {H `>ÿüó¿₫úë»ï¾óôô,W®\©R¥œ[µjơƯwß?~¼E‹…î¹^½z!!!ăÆ«]»v… ŒŒŒ,,,¾øâ‹Å‹oÛ¶Úgii¹k×®~ưúU­ZƠÖÖ¶}ûö[¶léß¿¿N‚:»^ºt©¯¯¯«««©©iÍ5¼wï̃\Ÿ.ÿî»ïºvíZ®\9SSSu$jß¾=7[M9§æûtuu%"ƒ5j :ôàÁƒmÚ´á>=rä? “ú‘·jƠêĐ¡C}ûöuww755urrjÛ¶í;æÏŸ¯ÎQ@±#˹>€”­Y³fÆ DÔ¦M›ơë×—]BffæÉ“')Y~€BÀ=úÉÈÈ)#h¦ª@-H@-H@-x8Ô‚GP GP GP GP GPËÿèTÚ¶ÍƠ~̉IEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/assets/trapmf_101.png000066400000000000000000001166061466512601400223140ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯwXWà³€ ‚EQVÅFT́ öK0±́½Ç5Ñ(v "v+Q?»&Á̃±€±‚…ªÂ²ßƒ3#Í]XöÎî₫̃'Ï“³wgïÙöpï̀™R©$€¯1bè                                               Ö è!¹\Î:(X‘‘‘¬S`…c0̀LR&—ËqP¤Ep\$E‚ vSƠ     `=Ê:È Ep\$¤…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨Ä„u Ir¹œu º'22’u º…#€₫Ëåø₫P₫ÜR¦ª@%(@%(@%(@%(@%(@%(@%(@%(@%(´ÊÍÍM&“Éd²nƯº±Î…aÆq»ïààÀ:P Gm«Zµê¶mÛÆûƠ-›5k6gΜܷyÿ₫ưĐ¡CË—/oaaѬY³°°°\6¾~ưú÷ß_ºti ‹ºuë.[¶,---o]ñRSS4hаaCU²8pà¶mÛ4hÀ棇üAá mvvv}úôĩ¼yî›]¹rǻÙ³¹o_·nƯ76mÚôÇ|øđa»ví®\¹’íÆQQQGm×®Ưøñă .<~üx//¯}YÈ%h‹‹ ë ³¨¨(Ö)@f8(A§ÿ¤¥¥¥¥¥iç½>~ü¨P(XíiíÚµ=<|øĐÚÚÚÓÓ3Û¿ưö[##£đđp¾eĐ ADtôèQu»â?~\&“™˜˜4hĐ@ơ¬zơêU®\9V‡ “<üàèôÏZ~`ÄXrrr7nܪU«¬­­ .\£F©S§~úô‰ß`Ù²e5kÖ477/^¼xưúơÿøăL¯½xñb­ZµjƠª¥ÊöcÆŒ™4i’¥¥¥©©iưúơ:”––öÓO?U­ZỞ̉̉ÓÓóöíÛÜÆ)))sçέZµjÑ¢E+T¨àăăóâÅ í|&qqqmÛ¶3gÎëׯ¿ºñ;Ê”)Ó¯_?îaÅ¿ûî»çÏŸgƯøäÉ“Í5«W¯ß2räH":₫¼º]q^¾|Ù·o_ŸråÊå9+Đ!(€±Ư»w5ªY³fS¦L)Y²¤ŸŸ_ëÖ­•J%Í={üøñ%K–œ2eʰaĂ¼½½8À¿6&&¦mÛ¶ Ü9s_Ư~Û¶m›7o>}úœ9s¢¢¢¾ûî»æÍ›Ÿ>>û÷ï₫üy™2eX~’_zụ̀¥R©´³³7–*Uˆ²V˜˜̀Ÿ?_Ụ̈æÍ›ùóç÷ƯwjuÅY´hQHHHXXXÑ¢Eóœè†ÁƯå»+•¹cÆŒE‹Ơ®][ƒYÄ¡pÆ\]] .̀?477—Ëå>$"›sçÎ8qâîƯ»÷ïß¿uë–xí"’Ëå|Ơ¨Êö¶¶¶|̀Ơ‹Y[ˆÈ̀̀lụ̀å&LprrruumÔ¨Q»ví:v́(Γ“”””˶2×™ˆ>|X¹re₫á¦M›ú÷ï¯úGÇ%Ÿ nŒ'¢âÅ‹çôª'OŒ9̣ÀÎÎÎÿưw‹-Ôí*>>¾wï̃­[·=z´¦²€Â$ÇÄÄ$))éăÇƯ»w?|øp½zơÚ´iÓ¥K—† ~óÍ7â-­­­ùX•íU7bĈ=z}Z&“¹ººfƯ₫À}ûöíÙ³g@@@¦©dµºâ.{_ºt©¸ñíÛ·S§NơđđèƯ»·ZYAá`$|{·×¯_/[¶ḷäÉÜĂ¹sçÆÇÇwëÖíéÓ§DTµjU~Ë={ö$%%å4§îö¹ˆŒŒlܸñôéÓçÎKDFFF$Ëæåsª:ÿ|}}ÇŒsđàÁN:Ñ«W¯ö́ÙÓºuk''§¬ÉL<ÙÁÁaëÖ­ÆÆÆùéjúôéÓ§O·899•.][ÖG­®@· pÆÊ”)3sæ̀sçÎƠªUëüùó'Nœhذa¿~ư>}jnnîëëÛ§OŸ²eË?₫äÉ“%K– =räHûöí3ơăéé©Öö¹¨[·nơêƠ,XU½zơÈÈÈ#G/^¼wï̃™¶̀çTu₫ 0`Æ }úô1b„µµơ¦M›’““³½Ká;wî̃½[µjUŸLOuï̃½sçΪw¥Á¬@·`G`¬~ưú'Nœx÷îƯ+bbb&NœxêÔ)##£̣åË>|¸\¹r¿ÿ₫û²eË̀̀̀®_¿>₫üøøø+VdíGƯísQ¸pá#Gôïßÿܹs¿ụ̈Ë¿ÿ₫Ûºuë³gÏJpÀ̀̉̉2$$äûï¿ß³gÏ¢E‹*W®’í U²8pà¶mÛ4hÀúpˆ4ÍÅÅ…u YTTë 3”‚€ß?:¡víÚüÇÚØØXZZöïßæ̀™\©×µkWîÙ÷ïßW®\¹páÂ?üđĂèÑ£ííí­¬¬._¾üƠw™₫\#»œ©pä̃W¼ÁåË—‰hÖ¬YJ¥R.——)S&==ÖÇÇÇÈÈèÙ³g9ơÿâÅ ;;;___GGGqá¨VW5rtt̀©¼V«+ww÷²eË[LD¯_¿V¥+’‚s€±Ư»w5ªY³fS¦L)Y²¤ŸŸ_ëÖ­•J%Í={üøñ%K–œ2eʰaĂ¼½½8À¿6&&¦mÛ¶ Ü™p_Ư~Û¶m›7o>}úœ9s¢¢¢¾ûî»æÍ›Ÿ}’ÉdM4‰ˆˆàË—/ÿçŸ6nÜXƯ¬&NœxèĐ¡fÍ 2Ä̉̉rÏ=·nƯÚ¼y³ºY pÆlmm'L˜À?œ5k–¿¿ÿ®]»zơênjjÊUDGDÉÉÉüÆeÊ”á«F"úêöîîî\ƠHDDÔ»wo®j$¢–-[†††&''[ZZÊd²³gÏ>~ü¸B… D”5ù´´´C‡å´kß~û­ZÅ¿ÿ₫;xđàøûû;;;_»vˆ,--ÅÛXYYñ»–IxxøŒ3-ZT»víLOq‚]½ÿˆ¶lÙ̉­[·Í›7;88„„„øøøôèÑăÎ;juEDưúơ›7õ̀™3¹–V­ZµlÙRƯ¬@ P8c®®®… æ››Ëạ̊‡‘͹sçNœ8q÷îƯû÷ïߺuK¼N Éår¾jTe{[[[>æêŬ-Ddff¶|ụ̀ &899¹ºº6jÔ¨]»v;vçÉIJJÊe [™ûX«È“'OFyàÀggç¿ÿ₫»E‹|n â-ăă㉨xñâ™zˆïƯ»wëÖ­Gµµº*V¬UªTiÇÜ.ẃØqÑ¢E}ûöƯ³gO‡Tïˆúơë·sçÎÅ‹÷éÓ§hÑ¢!!!#FŒhذaxx¸ZY p0_đ&u&&&III?~́̃½ûáÇëƠ«×¦M›.]º4lØđ›o¾oimmÍǪl¯º#FôèÑăàÁƒ§N:|øp`` \. É4¯jee¥zu˜“íÛ·2ÄÂÂbíÚµƒ âGLí́́ŒŒŒ2MÚÆÆÆQÙ²e3u²víÚ¨¨¨®]».\¸kyÿ₫½B¡đóó+_¾¼———ê]qûظqcq¡Ü¸qc"ºsçÎÀUïêæÍ›₫ùçÈ‘#ùAåÎ;*T¨}ûöëÖ­›0a‚ê] p0cưΠg·oßNMMåGûRRRîܹăáázøđáåË—eŸiQLƯís÷àÁŸôôô5kÖŒ5* €[>FÜ>§ª8Đ·oß={d´511©V­Ú™3għOŸ–Éd®®®™úùôé-]ºTÜøöíÛ©S§zxxôîƯ[ơ®̀ÍÍ+V¬ǿÙ3q#W̃•+WN­¬̃¼yCD•*U7răââÔê ¤WUc¯_¿^¶lÿpîܹñññƯºu{úô)U­Z•jÏ=III9đ©»}."##4h°dÉî¡‘‘‘‡‡‰æ²yÜTuN¾úFJ¥ṛäÉ[·nÍT5r|}}=ztđàAîá«W¯ö́ÙÓºuk''§L[NŸ>=ÓÊ)ür<§NR«+"êß¿ÿÉ“'OŸ>Í=LOO_°`‘‘wn¢ê]Ơ©SÇ̀̀́?₫øøñ#߸~ưzú<„©VVÀF€±2eỀœ9óܹsµjƠ:₫ü‰'6lد_¿§OŸ››ûúúöéÓ§lÙ²çÏŸ?ỵdÉ’%CCC9̉¾}ûLưxzzªµ}.êÖ­[½zơ DEEU¯^=22̣È‘#Å‹ïƯ»w¦-ó9U}çλwïV­ZƠÇÇ'ÓSƯ»wïܹó€6lØĐ§OŸ#FX[[oÚ´)99yΜ9yx/µº>|øîƯ»[·nƯ§OŸråÊ9räâÅ‹“'O®U«–Z]™››¯Y³fàÀ®®®Ư»w755=}útHHH÷îƯ¹áX î hë…$ơÁ. *eXkZ‚pP ‚.₫₫qtt́ÚµkHHHóæÍ­¬¬ªT©2qâÄ>pφ„„4jÔÈ¢R¥J>>>¯_¿ *Y²dÛ¶mù×{Skû«W¯QPPß2wî\"zñâ…R©Œ‰‰4hP… )R¾|ù~øáÎ;Ùeñàû÷ïÏé zîܹÜ6ï̃½óơơuvv¶µµíܹ³*÷ä?[ñàêv7dÈWWWKKËFưñÇyî*44´}ûöööö–––îîîâ»å̃—™2ß§ôB&r¹<22’uđ…èèh̀zH JAĐÅß?NNNµk×̃»w/ëD´ÇÍÍÍÚÚ›>†¯êƯ»whhhLLLÁ½E~ptñgM#p#¨ç8hÛ«W¯vîÜY¶lÙ&M°ÎEº.^¼øđáCîŒ (€¥öíÛ;::²ÎBÛnß¾Ư«W¯®]»¢p̀Åúơ눨\¹r¬s (€¥5kÖ°NAÛ®\¹Â:ƯàïïïïïÏ: øÎqü¨¨(¹\ÎƯ-À¡pü­[·²N@0U½øøø{÷î8p`ǬsÙëܹó‹/Xg !(³7õ<î®Û¶m;wîœZ¯½zÿ>™›gnưô‰ ₫¢E¡ cằ›%'SÑ¢*5~ø@¦¦_´(•$“å½Ăl³JI!3³¼w˜NF_ ññ#)’÷Ó̉ÈäËÆ©©”åf²J%%'}ï@‹Æ+yâDæFMy5:”₫Ïh¶?|™àÚS€¼1's"J§t£,gñ%SrQÊü™r5…uÊl p̀¿>BVö7Ë©FIKSéơÙ¾VơF́đÓ§̀-©©™dDäâB~~Ô­›J)A“ɨIă‚?̣êu¨7?£ ®dJVïÙ¯ư§¯P8‚Á¸?}Рǵk³Îèơkc¢̣¡¡†ú{@g¡pbôîn,£F±Ị̂ËñhÜÅ…”Jü'¡ÿ¼½…Ăsđ ë @‡ 1ózöäº?m.rÖ)³Â @Pûø°ÎÆĐÅÅ q¥J¬³u p ¾jûåKÖÙ:qé..é ‡›››L&“ÉdƯp¹^6l÷!;88°ÎE¯ pƒÔ©“đàØ1Öé´}û„ØĂƒu6ŒT­ZuÛ¶mcÇ妧§¯ZµªV­ZUªTY¸paªh€÷ïß:´|ụ̀Í5 Ë¥ç»wïzyy•+WÎÚÚºqăÆûÄ?rjvÅkÖ¬Ùœ9s25æ̃•Ö̃(§×8pÛ¶m 4Đô¡3t(Á Ä.X <đơeáb{{Ơ¿ĐGvvv}úôĩ¼9¥§§wé̉eôèÑ•*U9rdÉ’%§L™2tèPnËøøøºuënܸ±iÓ¦?₫øăÇÛµkwåÊ•l»½wï^½zơ?₫í·ß6́Ư»wƯºu ̀CW¼+W®œ={6Scî]iíry­»»{Ÿ>}Yb½¥„\MŸ>ƯÅÅåêƠ«ª¿ÄÅÅ…uÖYTT”’Høṇ̃–-ÏY§£‡tú÷OZZZZZṽëăÇ …‚ƠÖ®]ÛĂĂƒ¸qăF" ä[zö́ID÷îƯS*•³fÍ"¢M›6qO=|øĐÚÚÚÓÓ3Ûû÷ï/“É®]»Æ=üđ჋‹K‰%¸‡ju•źرY³f•,Y’ˆfÏ-~6÷®´öF¹¿V©TöêƠ«\¹r_="yøÁÑ韵üÀ7èW pÔQQQÊîƯ…åäIÖ(qơÅ:=¤‹¿Çûûï¿[XXU¯^}Ê”)?~ä7Xºti5-jccăîî¾mÛ¶L¯ˆˆ¨Y³fÍ5UÙ~ôèÑ'N,R¤H¡B…ÜƯƯ<˜:uêÔ*Uª+V̀ĂĂăÖ­[ÜÆÉÉÉ¿₫úk•*Ù̀̀Ê—/ÿă?>®™¿v25rtt̀©•ËåeÊ”IOOç[|||ŒŒŒ={–ucww÷²eË[LD¯_¿V·«L÷ƯÍT“å̃•Ö̃(÷×*Q8LUÅܹs###kƠªÅ:È7\[ÍZè]eʰΤd÷îƯ£FjÖ¬Ù”)SJ–,éçç׺uk¥RID³gÏ?~<7{;lذ„„ooïđ¯‰‰iÛ¶mBBw6ÛW·ß¶mÛæÍ›§OŸ>gΜ¨¨¨ï¾û®yóæ'O2dHß¾}CBB~øánKŸŸ₫ÙÁÁaüøñnnn›6mêÚµ«Æ÷ưăÇ/^lÚ´iZZÚ¹sçOœ8‘””Ä=ï̃=OOO™èn•-Z´HOOÏöT¿o¾ùæÅ‹ÑÑÑÜC…BQ®\9[[[u»²³³ă …»wïfz*÷®´öF¹¿ ƒac#ÄQQ¬³1D¸-Ẹ́ßI))·E&ÿûï¿ß~ûí§Ÿ~âN>>û÷ï₫üy₫ƯóüùóOŸ>Éd²&MDDDpåË—ÿóÏ?7nụ̈åK¥Rigg'~I©R¥ˆèơë×Y{›8qâ¡C‡5k6dÈKKË={öܺukóæÍD¤nW¹È½+­½‘¨…#’N„ÀCCéóÉA;₫üSˆ;t Ïc"dkk;aÂ₫á¬Y³üưưwíÚƠ«W¯đđpSSS® $¢¸¸8"JƯ´»L™2|ƠHD_ỮƯƯ«‰ÈÓÓ“ˆz÷îÍUDÔ²eËĐĐĐäädKKK™Lvö́ÙÇW¨Pˆ‚‚‚‚²û‹'--íxQû/}ûí·¹ïûû÷ï‰hË–-ƯºuÛ¼y³ƒƒCHHˆO=îܹĂenii)~‰••¿k™8::öë×õ¼y3gÎäZZµjƠ²eK₫CP½«\ä̃•Ö̃H­®@SP8‚! ¢̉¥3bÂÔ†)BlkË:WW×Â… óÍÍÍårùÇ‰ÈÆÆæÜ¹s'Nœ¸{÷îưû÷oƯº•–öÅơør¹œ¯UÙ̃Vô﫳¶‘™™Ụ̀åË'L˜àäääêêÚ¨Q£víÚúØQœ'')))—)lå×îçS¬X1"ªT©̉;¸Î;v́¸hÑ¢¾}ûîÙ³§C‡D” ~I||</^|¸^½zmÚ´é̉¥KÆ ¿ùæñ–ÖÖÖ|¬Êöª1bD=>>>>>ééékÖ¬5jT@@·@Œ¸ÿüLU›››W¬XñÙ³gâF®T*W®œ‰‰IµjƠΜùâØ>}Z&“¹ººfêêÍ›7DTéË[yrăââÔê*w¹w¥µ7R«+Đ\U ×V³feÅ:ׯ_/[¶Œ8wîÜøøønƯº=}ú”ˆªV­Ê?µgϤ¤¤œFøÔƯ>‘‘‘ 4X²d ÷ĐÈÈÈĂĂƒDsÙ}ú”-[öüùó'O,Y²dhhè‘#GÚ·oŸ©OOOµ¶ÏEƯºu«W¯¾`Á‚¨¨¨êƠ«GFF9r¤xñâ½{÷δe>§ª‰høđá»wïnƯºuŸ>}Ê•+wäÈ‘‹/N<™[ nÀ€6lèӧψ#¬­­7mÚ”œœœơ¾|Ddnn¾fͺººvï̃ƯÔÔôôéÓ!!!Ư»wç>Uïê«rïJko °^HŔ¢ RöÅZÓ-Z‹P_ºÄ:5ƒí]{°xAĐÅß?]»v ĩ¼¹••U•*U&NœøáĂîÙFYXXTªTÉÇÇçơë×AAA%K–lÛ¶-ÿZqojmơêU" â[æÎKD/^¼P*•111ƒ ªP¡B‘"EÊ—/ÿĂ?ܹsG#»œip¥R7dÈWWWKKËFưñÇâgß½{çëëë́́lkkÛ¹sçË—/ç̉yhhhûöíííí---ƯƯƯÄ÷ăQ«+·DbÖµµsïJko”ûk±¸ÆÉ”ùû; ²’Ë呸đBb¢££…yèhªX1#vs£Ë—Yg§ÿøµ{Í̀ˆ_勃¢‹¿œœœj×®½wï^Ö‰h›››µµơ©S§X'¢ÿz÷î“ûfyøÁÑÅŸ5À9`xÄÅÊ•+¬³Ñ#F1æ©t G0HM› 1Ît,`kÖñç{¹ºW¯^íܹ344”u"zëâÅ‹;wî|üø1ëDô G0H3f1®­Ö#ü¾́´oß¾aƬ³Đ¶Û·o÷êƠ‹¿j4nưúơ½zơ:₫<ëDô ®ªƒÔ¦_¸À:}6v¬oØÀ:¤5âAiĂp'É<ÖYè!Œ€¡jĐ@ˆ ̣gíX±Bˆû÷g ä G0TX @M(ÁP‰oW…óÓ Æ¤IB¼nël ßP8‚ûæ!bZ¼Xˆ1ª  P8‚Ăl5€:P8‚ssbÜÂAÓ¦MbĂ»j@?¡pĂV£†íT –ùó…xØ0ÖÙ€&`G0lAAT¿~F́ăCDZN ¿är9ë@o¡pĂæî.ÄdzÎF̀-Ä⥡ Eæ{Q̉èèh'ñưÜ?û₫{Úµ+#>~œZ·f½«úBF2>V’2Ûmr:(Ú‡©j0xUªñ‹¬³ÑsæñèѬ³MÀµdá/ú‹Ñ Öé| G0xø>PA±bBüä ëlô… ¿s‚((=h G0x ñ¡C¬³Ñóæ ±x)GĐu]» ñ¿ÿ²ÎF/¼¥·|,³,D•* q\ëlt̃ŒB{–u6:î%½äăÂT˜u:*Aá@DDåË q|<ëltØ”)BüÓO¬³MĂ輦#aƠØïé{Öé¨ …#áû@%¥K ñƯ»¬³Ñe˜§…€ˆè‹åŒwïf®_u+^ÊôI›6B¼q#ëltÖSzÊÇdÁ:U¡pø̀Hôăđáëlt̉₫ưBüóϬ³‚!>uuÙ2ÖÙ覓t’íÉu:j@áđÙBŒÙj€Ô©#Ä7n°ÎF7‰ç©ỏMÖ騅#Àg:ñ°ÎF÷¬Z%Äâ¥Aÿxz ñ•+¬³ÑAÑÍÇ6dĂ:5 p¯S§P°ÎFÇŒ%Ä¿₫Ê:(H¸–,?ÎĐ>îLY§ "ø>PAÅB|ù2ëlt ®§†Â@D|Uđ¦M¬³Ñ%B,^ÊôU“&B|'é©ăƯăăRTu:êAáđ%KKÖè¤!C„xÁÖÙ@ÁĂè|̃\  |ÜÚ±N@m(¾$₫>WC "— ñ… yïÇĐ`t G€/yy ±x₫r&^zÜ8ÖÙ€¶Ô¯/Ä÷î彃"^|§,•e€ÚP8dajÊ:#©\º”u6 -˜­V×e®$jI-Y§(²É:Î:`¡zu!>s&ïừSƒ@áEŸ>B¼z5ël¤N¼V:ÊlCóÍ7B÷~ ÄVKw$GÖéä G€́³Î@gˆç(ÿu6 ]˜­VƯ îÏØ”²N P8dGü}ˆË=rơáë €77!>y’u6̉†yjĐ(²3`€/_Î:éÚµKˆf °P£†?}Ê: §p>v!Öéä GÈ;ñ́äÚµ¬³Ö­b̀Vçä.ƯåăÔ€u:y‡Â ¸‰ Xg¬‰WsnDX§ R)‰¨iÓ¦DơéÓ§LO¥¦¦>|øˆÜƯƯY§ `è0O 9ÁJàbqÇÇ• «‚€Pá8uêỘåËÇÅÅ=úùsá¼W¯^?₫Ơ«Wööö#ÄëêhxÇÅ‹YgĂXT”/Î:’N„g¤cô’L¼đ [#FŒHLL #"ccc[[Û¸¸¸û÷罹¦Q½zơ¬²,û±zơjÖ‰g&—Ë###Yg_ˆvrrÊWŸ/đ'"’̀Oö…†RÓ¦q§Ntà@̃»̉ÀAÏăR¢„°¸BaĐ·’‘đKCIùú¥ 2Øïz -₫÷ßó±B¡¸sçN¦ """Xç`è0O ¹ ¢îƯ3bÚ°uBŒÄS<W  ¬ÓĐ₫c@-âEW¬` 3â?°ÅWBpÄ×KmÜÈ:v0O úJB#Çg@ÎfÍjDZcìÖ 1pá‚·mË:ªbŰ8í¦Ư|ÜZ±N@c$T81Èob‚yjPEP}ÿ}F.Ë–- 077¯W¯̃ăǃƒƒïß¿¿eËY)₫ưû_¾|Ù̃̃¾iÓ¦oß¾=v́؉'6õ\¯nQ óÔ º  êÛ7#5~ÿuBZ”Fi|lK¶¬ÓĐ0ưŸªŒŒ ´³³;zôh``à±cÇúơëwưúơÅ9/ă¼sçÎË—/·oß₫ĉ+W®ÜºuëÆ‰hÆŒ¬÷Xß~pƯ:ÖÙhƠ•+BŒå w̃̃B¼jël´ óÔ ß8Ι3‡ˆ̀ÍÍùXăvíÚ•>v́X₫ØS§NƯ¿ÿ‘#G¦OŸn”Ưê´—/_&¢₫ưû›˜d|> 6¬ZµêÍ›7ß¼yS÷Ê0d ̉¢EñàÁäëË:!-Ïđ €äÂȈ̉ÓY'ÁÂfÚ̀Çß̉·¬ÓĐ0Æ…c¯^½²5(""ÂÈÈÈĂĂƒo166nÖ¬Ù._¾\·nƯ¬/)S¦ ½áï~@¤T*ß½{gddÄ—’óÔ ®  4(#0–,aÖY‘U₫;=ŸªV*•<(^¼x¦aB"‰‰ÉöU:u2557õùóçSRR={6sæ̀§OŸzyyYZZ²̃'`ḿX!×SzM¼‚£‹ ël@ (ÄK—²ÎF[ªP>Æ<5è%ÉŸ¥¦¦>|øđñăÇ …"Û :tè zoÉÉÉ …ÂÚÚ:S;wÏkñ˜¢˜\.ߺuë€ À7z{{O¯Æ’+¹\©åèÑ£Zü!³§OŸj¬¯Ñ£–/ψ7m>ơ訨BD«ï˜›§GG?ÖH·<( 9=.ÂɰÑÑѬ÷L"„{+Ơ‰®MÙkü°0×®];Ö)H…„ G¥R¹yóæ%K–|úô)—ÍÔ*SRRèó9”bDô₫ưûl_¿`Á‚¤¤$WW×5jÄÅÅ…††îÛ·¯Aƒ­[·Vå} óÆççTt(̉­Äôë'Ä.ip— áÓÓE:.4thF¼v­Ó‚¬wL‹RQÍ₫óÆ [Y¿Ö³ MUÿơ×_óçÏϽjT—µµµL&KNNÎÔ˜˜HŸÇ³lذr±iăÆŒxß>êÚ•uBwü¸»»³ÎtÓ¸q4~|F ƒ¨Cih>zĐ˜ªȇ"E„øÅ ÖÙhæ©A³Ä‹8.^̀:È+ÉQQQÛ¶m‹%¢7õL:µeË–Ưºu[³ffoc  ={ ±ø"d·oŸ{x°ÎtßôéB•-[–ˆ’““Y§ EñâBÅ:›üÂ<5œi‡ät„ GîæÑÏ=#¢nÚºy󿯯ÆDô₫ư{"*.₫†N„84”u6ụ̀ÇBÜ¡ël@¿̀›'ĺ~ÿñơÔâ¥ô›„ G":{ö¬¿¿ÿºuë¸Æ–-[Ñ“'ON:EDvvv¬ÓÈø6jº<[ưùâ4""SSÖÙH˜øzê©4•u:Z"¡Â±K—.DôáÇåË—GGGQáÂ…›5kööíÛvíÚq+;6mÚ”uÙ©^]ˆuù¶÷â¢wÇÖÙ€>8Qˆq.€Î‘PáèååÅà(n177W(Ü=¦¦¦½{÷f&@Ú¶â Xg“G›6 ñ·ß²ÎôÑ¢EB́ëË:›¼ZJKùX<ô ÷$´¸‰‰ÉüáïïöñăÇ&MŒ=ÖÖÖvơêƠ¥J•b&@‚‚ÈÁ!#öñ¡7X'”/––¬30ñ5Ôâk«ô„ G"*\¸đ˜1cÆ|¹À—¥¥å¾}ûär¹‘‘„ÆG2+WNˆõdM^ ,ĘC„‚3f ­X‘õLưû³NT&¡RlÅg1_̃~£páÂU«VEƠ: E !¾|™u6jû|M‘—ël@-_.ĺx-Ù*ZÅÇ3hët´JB#ÁÁÁ/_¾$"~Ê@‡Qű.Ö33Ö€ÁHKcúÄ÷¤₫•~e€VIh¯G\đäÉֹ䉓“_¹Â:ơŒ!ʧ†‚&^ÄñÏ?Yg*“Pá8räÈnƯºQ@@À«W¯X§'â£têLÇ5k„ø‡Xgúnơj!Ö­Ùêµ´–§ĐÖéh›„¦ª¹k¨K—.ưàÁƒ6mÚT­ZƠÆÆF&“eÚlµø÷ €Ô‘\ûøPXë„Ôf"¡ß `RRXg ¡4”ĐÖéh›„¾"₫₫ûo>NII¹¬³ç‡AsqbƯYÍq́X!Æ<5h‡¯¯p=ÖîƯ¸ @7Hhª@O4h Ä:r~m"¬Z(ĺ2[½‘6̣ñxÏ:$4â8\×ïxÀ î@èăCgΰN@êâăYg *Ü%´„u: H¨p̀´î7€®ruâĐPÖÙ|Ư¤IB,^Ê    Üårß>êÚ•uB_“Né¬S`L¢SƠ‘‘‘ÇÛ±cGbbbZZÚû÷ïYg o¾â¨(ÖÙ|ÅâÅB¬+3† Ä'ÔJÿß̃6ÚÆÇ#i$ëtØĐˆ#'88xƠªUÏ=ă6jÔÈ̉̉̉ÓÓsàÀ£FÊz‘5€ µ£<É:!)26â¸8ÖÙ|xúwúu:lHkÄqÁ‚Ó¦Mă«F^rṛêƠ«ç̀™Ă:AƠ¸¹ ñ©S¬³ÉÍ´iB,^Ê@;úôâÇYg“«ô‘u ́I¨p¼uëÖ¦Ïg»‹₫åG·oßÁ:MƠÔ¨!Ä_̃~]RæÏâaĂXg†GWf«w̉N>BCX§ÀŒ„ Ç€€¥Ridd4sæ̀K—.ñíVVV+W®455%¢Í›7³N@5º̣}À”©©?Î:›œù’/Pët˜‘PáxçÎ"êĐ¡ƒ···™™™ø©¶mÛ6õœˆî̃½Ë:MƠ¸» ññă¬³É‡‡‹—rЦ=…ØÏu69H Ö)H‚„ Ǹ¸8"rrrÊöYggg"e&€Ê â/Xg“!=u6`¨~]g"Ím÷̉^>v&gÖé°$¡ÂQ.—Q¶g1*•Êđđp"ªX±"ë4T&¾˜³Ơ9(UJˆŸ=räH®p¬V­ë4TÖ¸±:Ä:›̀æÍâE‹Xg†M¼ô÷¿ÿ²Î&‹7ô†¤ô½  }2¥RÉ:‡ ±±±ß~ûm.“Ñ–––û÷ï···géWÈạ̊H¹C±áˆÎé,ˆ‚U¹2=|˜ÇÅQñâ¬? xQT&¿˜È“ăG¶¶q¥JôàëOAä ́L¹Ø›¼·̉Víç€ 2Øïz ưådkk»dÉ’â9|³ZZZúùùI¿jø®­PA‰B̀ÿ©%âyê ÊGOú@B…#5hĐàĉC‡uuu-Z´(™››W«VÍÇÇçŸ₫iÑ¢ëÔ$¾nyï̃{–u6"/é%¡"¬Ó`Lr·´°°7nܸqăˆ(11Ñ‚uFùăà ,@űNˆˆhÊ!₫é'ÖÙQ™2±Ư¹Ă:!"":FÇøø{úu:́IkÄ‘§P(+Y²dÍ5‰ÈØØ˜uy"ïC «XQˆ/]b™ 橲%¡ÂÑÍ͈¢¢¢>}ú”é©´´´¨¨(½ªAwuë&Ä7²ÊbƯ:!4‰åç“&M„øÖ-fiD’p7¹RTå' %*'MT¾|ù¸¸¸1cƼxñ‚oơêƠ¸qă^¾|idd䃡Đ]Xú{đ`!ß<@:Ä̃°ú•.đq[jËøÆë81BüĐÊʈN€jjÔâ3g´ưÈăÂq̀˜1¬?-̣ö ÇU«´Y8®_/Äø{ ¤ÏÍ®\Ɉ££ÉÉI{o}…®đ±iñt¦ª´K&c̣¶£F ±øæ1̉4q¢ks¶ú ÷:´#;Ö€ä0q̀$<<|ƠªU÷îƯ‹Ïi›Û·o³N Ö¯§Aƒ2â hÉí¼mJ ëPÇ?PŸ>ñÉ“Ú{_ñ<ơi:Íúc 8†‡‡÷ë×ïÂ… oß¾UäŒuù3p /]ª÷ܽ[ˆÅ—ÈHYơêBüßZzÓp çc̉úåÜ’'¡Âñ÷ßW*•¬³ĐC♾À@ÖÙ¨Fû×V‹ïÓ€°₫¤HBSƠ‘‘?±ß}÷]ǹ[W衵kiÈŒxêTZ°  ß0çS?¤«~}!>zTïˆë©¾JB…£¹¹ùû÷ïí́́~ươW## …hØàÁBáèçWĐ…ă¾}B<`ë}P‡‹ Ư»—¿zE¥ ø–Ñ¡ÊÇ®äÊzï¤HBơY­ZµˆÈÂÂU#€‰çø‚0†:E›³ƠQÅÇu÷¶È„J´˜˜˜<|øpË–-8ÙôܪUB#5‹~₫Yăïpü¸÷́ÉẓªlYađ¤$27×ü['á§¥Ơc½Ç̉%¡ÂÑØØ˜ˆ¬¬¬Ö¯_ob"¡Ät”ø&1˜§ƯDíÛgÄ>>´}»†ûAÂÈ|ªÂzw$MBSƠuêÔ!¢2eÊ jCáç'Äóçk¼û'O„¸X1Ö; WíÚ ñïóÔª“Pá8zôh›{÷î…„„h¼óƯ»w{yy¹¹¹5nÜxÚ´ioß¾ưêKnܸ1räHOOÏzơêy{{_¸pơ'zg̣d!6M³}ÿû¯wëÆzỌG¼ô÷§OîüâăÆÔ˜ơ¾H„Æö/^\ºté·oß<¸zơêvvvÙ.dzzơju{^¶lY@@€¹¹y½zơ?~|ÿ₫ư-[¶˜™™åô’“'O=:==½FÎÎÎgÏíׯŸ¿¿ ñyÚ†ë©AŸQ—.±mÙ¢±ăHXé´Ub½£R'¡uår¹*›©»lRddd×®]K–,¹gÏR¥JѼyó¶lÙâíí=3‡…—ß¿ߪU«ÔÔÔơë×sèׯ_ïÓ§¥¥å™3g¾zcƒ]ÛIʤ» Ú¼y4cFF¼hMœ¨©µ²Ld¾H÷ 6É—ú'Ưºí£}\|Nyë͆d!3Øïz MU]»v¥§§;¶Ôç©©S§ZYY9r$===Û—ÇÇÇ:”«‰¨fÍíÛ·½qăëư2}ºO¤©^Ïb~pV@KóU#I³j MU>¼ ºˆˆ022̣đđà[Œ›5kvàÀË—/×­[7ëKNŸ>-“ɺví*n\¸páÂ… YH*Á<5蟠 êÑ##öñÑ̀?́xî4Qʳ̃E ¡Âq̀˜1ïS©T>xđ xñâÅ‹·»¸¸QLLL¶…ăÍ›7mllJ—.}ñâÅ+W®¼{÷®J•*­ZµÊåœH€¼›5‹æ̀Ɉ»w§¿₫Ê—wï ±ëĐ„îƯ…xưzÍ®äÊǸ@*Å"##=zôöíÛN:™&%%YYY塟ääd…Bamm©ë-ÛƠ|úô)!!¡råʳgÏ̃.Z.̀ÁÁaụ̀åƠ«WWå}³¯yôèQ–¨Á{úô)ërÖ¿¿_8îƯÍß—7¯®]+BdÏÅ66éÑÑYïaö$}P ˜´‹p_₫Rˆè©“°³•£+G“ú,̉>(¡xQ(Ă&¹Â188xƠªUÏ=ă6jÔÈ̉̉̉ÓÓsàÀ£FÊö:ë\¤¤¤‘y–û XXXÑû÷ï³¾$!!ˆ́Ù³gơêƠcÆŒ9xđ *ă†y¬ÄéÊ©åùÏóÛo…øÚ5#éC#Ùă²};ơî/\èä̃R(…ËPÉî5Gâé齬_ë*^Ñ«¤uq̀‚ ¦M›ÆW¼äääƠ«WÏáGeTfmm-“É’““3µ'&&̉çqÇLø[.X° k×®ÖÖÖ¥K—9rd·nƯ>}zèĐ¡¯½'€úÄ‹8æóËH|—ƒë]Đœ^½„8 ¿½ù’po%̀S¨HB…ă­[·6mÚÄÅÜí9ü(ăöíÛ#""ÔêÓÄÄÄÊÊ*ëÈb||<•/)û™¹¹¹©©©™™™§§§¸½U«VDtW|̀›'Äù»J́Ê!₫̣Ÿ0€>(\Xc]ưAđqêÀzÏtƒ„ Ç€€¥Ridd4sæ̀K—.ñíVVV+W®ä7õ¬n·vvvqqq\¥ÈăN±ËáªR¥J*T(Ó´87C––ÆúsÈ ®§ư&₫W=zt̃ûQ‚KP Ö» 3$T8̃¹s‡ˆ:tèàííé<¶mÛ6õœ̣4àײeK…Bqæ̀¾E©T†„„ØØØ¸¹¹eûOOÏøøø{÷î‰/_¾LDUªTaư9/â˜ị̈e!®X‘ơNhZß¾Büûïyï÷§È qqq”óù¿ÎÎÎD«n·^^^FFF«V­âÎk$¢ÀÀÀØØØ=z*TˆkIJJæ/[ëÖ­͘1ƒ¿́úÆëׯ·²²jƯº5ëÏ ô”x•P_ß¼ơqó¦7iÂz †Ifomâă®Ô•ơ>è ÜJÙŨT*ĂĂɨ¢úC(ööö“&Mể¥Ë¬Y³ °lÙ2WWW_ÑwsHHH»ví†Ê=¬Zµêøñă¯]»Ö®]»áÇ0 W¯^Ÿ>}3gN‰˜ÑéÂ<5ñ¿í ̣Û›%Y²̃!]"¡Â±FD6zôèĐĐP®1&&æôéÓ#Gä ÇjƠªå¡çAƒ-^¼ØÉÉéđáĂõ¼ñöö̃²eKÖÅņ ̣Ûo¿•)SæÜ¹s?nÙ²å̃½{Û·oÏúC½6v¬«:/]¸ ĆºRè¿Aƒ„xé̉¼ô0˜ó1æ©Ô"Sjđ^ñùûí·ßæ2mii¹ÿ~{{{Ö™~…Á̃ø\Ê¢££uc4~ÎÄ„RSƠzid$ñ§àÖ¯Oaa¬÷åktæ 8.âÙê<|‰ÉHx½’¤̣%˜ 8(†Æ`¿ë%4âhkk»dÉ’L÷äYZZúùùI¿jĐ ơ¯ßÇ<5ñ"S§æ½3ÂdÔ#¡Â‘ˆ4hpâĉ¡C‡ººº-Z”ˆ̀ÍÍ«U«æăăóÏ?ÿ´hÑ‚u‚L¼ˆăŸªởÏçw©vkL]5dˆûù©÷Ú‘4’1O  . MUg•˜˜ÈƯP·́đµ”é̉D? gfFYnz”“¨(ªT)#₫æ-„*]ºtP ‰®—<ÏVëÜ<5éÎA1(û]/­ÇLt±jĐ˜”Ơ·Å<5ñ"?ÿœ—ŒÉ8//0lŒ Çwêcư‰0ñ"»w«ø¢S§„8‡…íôÊHa™~ưUƠW£q|Œyj€<0aûöơë×W÷%†92 $0֭ˈ}|ÈË뫯ø¼t=Q¬ó°å´œĐÖéèIOUº/ï±̀Sƒa/â¨ú #ä Gé0@ˆ÷íûêæÇ ±»;ëä´eœ0í¬̉iSh R ëôtă©jL&«T©RíÚµkÖ¬Y¬X1Öé0D›6eÄ>>Ôµk.Û¾|)ÄüàƠBîïKy¼#<€“Já¨T*ÓÆÆÆÎÎÎû÷ïgéẂ?&)Ó½_»ï̃‘MF\º4=íVõP‰qÑ¢””Ä:muè̃A1 :w\T,uqƯoÎC`°ßơR™ª&"++«¦M›6mÚ”{øøñăk×®]½zơÚµkwï̃MKKS(wï̃e&€VX[ ñ‹9m%§>xuÎ,üú+Íœ™/YB&°N@¯I÷ªêbÅYXXXXX-Z´P¡B¬ÓĐº=…øøñl7Ù»Wˆ==Y' ÀÂŒBܶ-ûM ÓoÂt4 .Ä‹hÏ£y¬ÓĐy(¤M|ÙËçaÆôt¡M<( ™L¦É|<¦±N@ç1ª>ˆ5‹rgg'ÄŸÀÇơÔYMœH‹gÄAA_ü˜€¦0.Y’צ°xx8¹»oÜ(<Ù­ëô¤aÑ"¡pôơ%ZA+øgÅK9@aª@̣²›­æˆ—z€LÄk}Ï¢Y¬ÓĐ($O|[˜7†a@l̀!̃²…u6ú…#€.ƯˆzíZ¡Y|;kX¾\ˆ]\ĂÇ⥠?P8è‚́†‹a€„)Vàă¹4—u:z…#€.¨X‘ûÿ(úoĂ<5@VâE@ăP8èˆ&Mˆhä¼½Y§ =«W‘¯p?%Üf@ƒ))))))iiiD¤P(¢£££££Y&’ôå£₫èÈEà`>\H Yg ?ù4jÔ¨víÚÛ¶m#¢—/_¶k×®]»v¬?I’Ëë̉E₫æ©r‚¥¿ ăÀ?~üHD'NœpttLHHàÏŸ?ŸËK6lÈ6gV.Q>Ø(’HÎ:#)j¼nÿ‡•ñÅúT—uBz„qáX¢D‰W¯^]¼xñâEa(eÀ€¹¼$22’mÎ’àăCgΰN@|HrTÔ #%ë„ôă©êæÍ›³₫tĂÔ©B¼–†Ph(ëŒ$JA ñĂưûY' G8N™2ÅÄÄä́Ù³±±±J¥2%%…ˆ-Êúc??!LDDÑÑääÄ:/iùƒ₫¬AD>>ôí·¬ÓĐŒ ÇbÅÍ=›‹Ÿ={æééIDW®\aư±èúçÖIH‹xF®"¢ØXÖ9èÆ…£˜©©i«V­Xg E3g ±°”ăÉ“¬óœô!kăáĂÔ¡ë̀ô‚„ ÇâÅ‹¯ÎX¹•ˆ(===..®xñâÆÆÆ¬S`l®è~i#ª‡ĐÍÏ>¥råXg »hJ¼áśăCϱN@/H¨pä$%%üûï¿?₫øñc¡B…›5k6|øp ÖÙH@P5hûøĐÑ£¬ ñ<ơz“µ|áøü9ë̀ô…´î>ѦM›ÀÀÀ{÷îqK<¦¦¦̃¿ưúơíÚµ»téëøå!^º”¨~}áñ±c¬³J?ộâ'X' $T8&&&N4)6‡Ó˜_¿~=qâĤ¤$ÖihÛ¬YByÂ:?½ ¡s¯_¿NDfff[¶lqqqámmm«U«æáááåå•’’‚•zÀĐ̀Ÿ/ÄÂRM­°Î@̃Đ>6ú<,̉µ+íÛ—Ñøï¿äáÁ:K'¡Ç{÷î‘»»;_5̣œ5jD¸ß iÓ„x̣dÑ⥿߾e&c‡è{“7ct@³$T8r E¶íéééD„¥y2àû@$ë<5§D a›‡Yg  û$T8Êår"ˆˆ¸qăF¦§nƯºu₫üy"rvvf&€ö,^,Ä⥉ˆZ´â¿₫b)c/è¡"â§:vâsçX'  ă$T8º¹¹ÑÇ °bÅK—.=ỵä̉¥K+V¬èß¿ÿ‡øm ĤIB<}z–§ÅK'&²N€™ătœ¿§ï3=‹Ñy ’)•JÖ9dHIIé̉¥Ë“œ¯|spp8pà€™™ëL¿B.—ă\L©‰vŸ¨#d2!Îæ'ơØ1j×.#₫₫{Ú±ƒu¾êÑу¢÷tñ¸”§̣1ĂÅ ”`A™ïñ•%ÉÓŃ¢÷ ö»^B#fffK—.-[¶l¶ÏÚÛÛ/]ºTúU#€¦¬X!Äâ¥mÛ ñάó`†¯‰(kƠHDmÚqDëtt™„ G"ªQ£ÆáÇG]³fÍbÅQ±bÅjÖ¬9jÔ¨#GÔ¬Y“u‚Ú3v¬ÏĂFvvBüéë”8E§ø¸;uÏv̀Vh„Öqä˜1bĈD”˜˜ˆûSäfƯ:ể%#öñ¡-[X' m9]O-æà Äׯ³Î@—IkÄ1T`°Ä÷§/å˜YçÎB¼u+묈¢(>¶!›œ6óôâđpÖIè,IK|Ră¼y¹nj"7ĐÅÓ₫̣!”Bù¸4•ÎeËŸâáĂYç  ³P8è8ñe18{ Œxú*]ÍeKñÍ/]b7€ÎBá 9âùÅK9f¯»èj€ Xç U‘$¬‡bGv¹oܸ±ߺÅ:uƯ„Â@r|}…xáB^€³Á ]  |Ü–Ú~u{\[ (tŸøûpèPÖÙh‰*×S‹U©"Äaa¬³ĐM-###;¶cÇÄÄÄ´´´÷ïß³Î@K6obñR¹ù^tµµkYܤ›|\Ê©̣ww!¾Ÿơè É­ă¼jƠªgÏq5jdiiééé9pàÀQ£FÉÄ÷ĐGâ´eËT~Y‘"ôñ#ëÜ´ç2]æăÔBÅW+  a½ºFZ# ,˜6m_5̣’““W¯^=gÎÖ ¸´´<½L<[=jë(pêÎSsjÔâÓ§YPáxëÖ­M›6q±±±1ßÎ2nß¾=7½öçŸB¬̃Rs̃̃B¼jëư(pWè ;‘“ê/¬][ˆ=b½ºFB…c@@€R©4229sæ%Ñ*[VVV+W®455%¢Íâó¿ôxzơj5_l$¡g€uƒnđqSjªÖkqm5@~Hè›æÎ;DÔ¡Cooo333ñSmÛ¶m̃¼9Ư½{—u(%%/N˜ÀzW P̃æ©9uêñ?ÿ°̃]#¡Â1..ˆœœ²Ÿqpvv&¢ØØXÖi”Ư»…X¼”£ªâ¥KYï @ 'ánÓ.ä¢îË]]…ø¿ÿXï €N‘Pá(—ˉ(Û³•Jexx8U¬X‘uE>ß]ˆqœ:•ơ_j=uç©9 DƠæ‘#¬÷@§H¨p2dˆ­­-;v́Çä äëëû÷ß‘¥¥åpơ.4́̃½ÛËËËÍÍ­qăÆÓ¦M{ûö­ê¯}ö́Y:u&}ưÁy·oŸ×^b??ÖûP B)”]É5o¸ˆæ·_¿f½KºCB…£­­í’%K/í³–––~~~öööyèyÙ²e3f̀xøđa½zơ,,,‚ƒƒœ¢ÚeJ¥rÊ”)‰‰‰¬?Đsâyê ¼Œ¡„(âă:T'Ïư¬['ĸ¶@u*‰¨Aƒ'Nœ:t¨««kÑ¢E‰ÈÜܼZµj>>>ÿüóO‹ª̃@,22200ĐÎÎîèÑ£Çëׯßơë×/^¬ÊË7mÚÄÍ’¨¸8!-cª>ñ"3g²̃- ËÏơÔbÍ ñÿ₫Çz¯t‡´ G"²°°7nÜ_ưuåÊ•K—.]¾|yï̃½“&M²´´̀[‡»víJOO;vl©R¥¸–©S§ZYY9r$===÷×̃¿Ù²eUªTaư©€;tHˆûôÉ__#Fñܹ¬÷ @ĂNÑ)>®MµóÓ•££¿{ÇzÇt„ä GNddä±cÇ<˜˜˜˜––ö₫ưû-::&ưuíê4~|F|êTtt4ë]̀”!“̣q‰s润ü₫Û66vR(2âÛ·™™©=<¡R>(¢]»v¬S ·nƯÚ´i+>ÿ4Ëd2.ؾ}{ÇëƠ«§zŸÜ¥Óæææ™Ú-,,ˆ(§𔔔ɓ';88LÈë}Û"##}£œnJÄœè4 ºyÓ¤X1 ç)Ù—xn†LÇå #óU¨F’­Y³F₫Y÷îƯ‰èÿûŸ\.ïÔ©ëÏ ô ®§PÅNI¯D•4Ø3VP‹„ Gîtˆˆˆ¬O)•Jnî+ªÛmË–- Å™3gĽ…„„ØØØ¸¹¹eƯ¾B… ¿Ô¤I"²··ïرc3ñ¢±ùöđ¡çpפ¼/â¨Úr÷’UóÔœ.]„xËÖû yº8¦FW®\ =ztÏ=¹Æ˜˜˜Gíܹ“+«U«¦n·^^^«V­j̃¼9wML```ll¬O¡B…¸m’’’^½zU¨P¡råÊ5ỉ„«y·nƯ ­[·î¢E‹XH WÎâ5Ưûôé4cFFH˜„ Çààà5kÖ¬Y³&—[Hè‡+W„ØÓ³ ßĩîH_}@P¸0ë]Đ*{|>?ù‰ølúóÔªH§t>.N]é43ñOâ˜1¬÷@ª$T89²[·nDđêƠ+Öé Ë—…XưUíƠ$^ÁU*èí̀Ssúöb,B ]3zôh"*]ºôƒÚ´iSµjU™øP""Z½z5ëḶåÖ-!₫r±ù‚±h‘pç__ÜU tÈFÚÈÇƯHƒwsÏL&ÅKª$EB…ăßÿÍÇ)))—Åc2zóÔê*FÅ´đ.AAôăñĉ¸U'@6$4U ` „X.×Ê[ÏØÚ¼™ơ ’¡4” z#ºU-YÂzÿ$IB#y¸ €Î¹wOˆùÀ Ụ̈å´bEF́ăCưû³₫¾n-­åăÔ“u:@$©Âq .c §^·Eii¬?ơ¡"Z{/6,#₫é'?ŸơÎH ¦ª´ề!®QC‹o,ÑçG¤ª3uæcí̀Ss† Óă´`ëO@z$4â¸Bµ/³R¥JÉạ̊êƠ«Æj­ k¢£…Ø̀L»ï½z5­Y“O›†uê@ẩA>ö&oÖé@ køo58;;/]ºÔÅÅ…uÖjÏS‡†²Ë#9™ơ' *#­ÏŒ­\I£GgÄ?ÿL¿üÂú#]ª¾ÿ~ß¾}Y' †“'…ø›o´₫öâºuÏÖ@ÆÓx>Öæ<5gÔ(!₫ơWÖŸ€ÄH¨p>>DtăÆÎ;ûùù?~¼AƒDÊr¶@=¾¾B̀~Ưï÷ïYg ]âE1è &¡Âqụ̀å111¥J•úå—_LMMùvccă‰':88$''¯Zµˆ-:ỵd"úï¿ÿXg  ª£G…X{+8f"^Áqÿ~¦Ÿ@ö¦Đ>/å¨Mă…©rúùgÖŸ€”H¨p<₫<•-[ÖÈ(sV2™̀̃̃ˆ®]»Æµ+VŒˆ̃¾}Ë:k•¼z%Ä,¯éub¶$i!-äăÁ4˜u:đ IIIDtóæÍÛ·ogz***êúơëD¤ü|ÿù£Gw²#€ôIå₫Ô&¢…bcÙå uâE± #OB…c½zơˆ(55µ_¿~Ë—/¿xñâ“'O®]»اOŸ””"ª]»6Í™3gÉ’%DäààÀ:k•8 ÄM›2M凄øÈ¦©d6“f̣ñ*ZÅ0“)„9ưôĂD¤EBë8N<ù̉¥Koß¾MHHđ÷÷÷÷÷Ïœ«‰I¿~ưˆèÊ•+\K·nƯXg đuâS*œœXgD₫™ûøN)™Ksùx`d&¡Ç *øûû—*U*Ûg *4{ölnT’S§N:°Îàë¤2OÍß²æÙ3ÖÙH—øzê¥KYg *‰ÈÍÍíï¿ÿ₫é§Ÿj×®meeEDE©T©Rï̃½?îååÅmV£F‘#Gnذwđ×_BÜ¢ëlˆè»ï„øï¿Ygán̉"^Ê‘•3„xÂÖÙHƒŒ¿ÜD‚ÍÍÍe2ëDÔ#—Ë###Yg_ˆvb4Iœ”Dq¹rĂú³ ¢÷ïÉÚ:#®P=b’Ăƒ¹`x\d$ü¶W’$¾›Äß? ¿-ñĂ"Aû]/­G^ddä±cÇ<˜”””––ö‹ƒÎ’Ö<5ÇÊJˆ?f €t‰qüưwÖÙH€ä Çàà`OOÏ.]ºŒ=zÖ¬Yõ¼ILLôđđX¹r¥”Gr²c‡·mË:̃·ß qHëlh>Íçc?̣cN†9s„xôhÖÙH€´ Ç L›6íY–ö“““W¯^=Gü   >}â®ûbD<ø)¾"#ÓhO¦É¬Ó€́I¨p¼uëÖ¦M›¸ØØØ˜oçÏqܾ}{DDë4Ô Åyj­­ß¿Ï:é:UˆXgÀ„ Ç€€¥Ridd4sæ̀K—.ñíVVV+W®äî^½yófÖi¨aëV!îÜ™u6™´o/ÄçϳÎ ÚbZ̀Ç⥥`¾0…NƱ΀5 wîÜ!¢:x{{›‰—#jÛ¶móæÍ‰èîƯ»¬ÓÈ Öd…ûVƒdL¢I|<¦³Nr$¡Â1..ˆrZqÀÙÙ™ˆbqw]Đr¹Kkco/ÄYn<ñ"°Î€) r¹œˆ²=‹Q©T†‡‡QÅY§  ª{÷„¸{wÖÙd«L!¾x‘u6` VĐ >îFR¼‘́ba"pÂ8 5jÔ ¢°°°Ñ£G‡††r111§OŸ9r$W8V«Vujă—ñ©˜­FÆ̉X>₫‹₫Ê{GPđ$T82ÄÖÖ–ˆ;öă?rƒ ̣ơơưû￉È̉̉røđá¬ÓP‰ø$úuëXg““ „øÚ5ÖÙH—xÇ-[XgÀ„ G[[Û%K–/^<Ûg---ưüǘÅgeH˜xÙ^½Xg“‹æÍ…µ#hƯZĂÇ⥥f…0Ñy0h*‰¨Aƒ'Nœ:t¨««kÑ¢E‰ÈÜܼZµj>>>ÿüóO‹-X' ¶Â…Yg;\[ L |<æ±NG%©©¬3`Ç„u™YXXŒ7nܸqD”˜˜h!Ư³Ăr$Ơ’âơÔb•+ 1®ÈÙ°aäïŸïØ!홀#­ÇLP5‚úưw!îÛ—u6_Ơ¨‘ß¹Ă:0 ëH8ÿW¼”£4­&Ơ1:†KB#)))—.]º~ưúëׯ¹±F[[Û5k~óÍ7æææ¬³È‹Ï÷Ë”¶  â×+đñ¡³gY'†b0 æă…´u:jHJb#’(?}ú´}ûö€€€7õd}Ö̀̀¬k×®cÆŒ±‘âÍ72¯,ơyjNƠªB|îël¤ëÇiưúŒ88˜zô`€Ö±Ÿª¾zơjëÖ­ûí·l«F"JIIÙ¾}{‡®^½Ê:Y€¯[ºTˆ bêƠâXga3 Ki‹—r”2\KÀ¸p|󿝝ï‹/ø–B… ÙÛÛW«VÍ̃̃¾P¡Bâ-üöí[¶ è'|‚Öùđ/m-cÚ̃½c Œ Ç­[·ÆÇÇsqëÖ­·nƯzăÆS§NíƯ»÷Ô©S7õüóÏ?Û¶mËmđ₫ưû-Xw¤mêT!/å(u5k qHëlÀ ¤Qẹ̈¢_?!>p€u6ZǸpäo-Ø£GU«V¹»»Ë¾¼ N:+W®́Ù³g¦í¤ÉÏOˆ‡ aZjƠâÇYgzîOú“ÅK9JFçÁÀ1.Ÿz”u6ÚŸpT(DdfföƠ-¹;rÛHÓܹBr„u6 ·â)u ùƠ£gÄÿüC-[²N@[$Q8ÆÆÆ0€uụ̀óÏB>Í:!mÁT5ˆ`¶ ˜x:ˆt⦜ٰ¶âGXg E(4`èP!/å¨{5âÿưu6 ‡â(ɘu:y×¥‹c%p0Œ§ª<ÈúĐ€µk…x̣dÖÙ䓉 ¥}¾¥Ç»w_ ­äÏ!:ÄÇäÈ:|Y°@øÛjâDêÜ™uBZÁ¸ptvvfư À—¥V­2bÚ³‡uB ?ÄóÔwèëṭ¥jU!¾wu6Ú‚©j€üZ²DˆÅK9ê*ñ¢üùÿđ‚^đ±)™²N'¿Úµâ°0ÖÙh G€ü8Qˆ§OgF”-+ÄII¬³=qœóqOêÉ: Àµd`€P8@ø>„ ×S‹‰ÿºu‹u6Z _V®bñRºM<·cël@OÄP £b¬ÓÑ ñ™—.±Î à¡pÈ—1c„xÎÖÙhP©RBœÊ:Đy§èw£n¬Óь΃¡AáÙÁ÷!h”₫ÍSs…øêUÖÙ<yçï/Ä?ưÄ:ͯJ·e ël@çEQ§â¬ÓÑ$ñªùׯ³Î €¡pÈ»áĂ…ø·ßXg£q66¬3=q–Ị̂q'êÄ: Ăè<|‚†èë<5G|#‹ˆÖÙ0y$.«ÄK9êîƯ…xưzÖÙ€»KwùǾX§£y  ñƯ¾!ÀW pÈ#__!^´ˆu6Ä‚u óÂ)œÛR[ÖéŒÎƒá@á9Æ:ĐIú=OÍ©VMˆÏc @A2”Âq÷îƯ^^^nnn76mÚÛ·osß>%%eÓ¦M:uª]»vÓ¦MüñdzgϪöV`6obñRúæûï…8 €u6 “nĐ >.GåX§SPêÖâXgP` ¢p\¶lÙŒ3>|X¯^= ‹àààÁƒ§¤¤ä´}ZZÚ€æÏŸÿêƠ«† V®\ùÂ… ƒ Z½z5ë]©ÏF-_Î:›U¸0ë @‡]¡+|Ü‚Z°N§a¶ „₫‘‘‘vvvG @ÉÊúµu„È@èùTµµµµL&KNNÎÔ˜˜HŸÇsqáÂ…Î;Ï›7ÏÖÖvưúơ:t`½CÀ nè#ñ"S§²Ît€á\O-&¾÷àáì³(z^8˜˜XYYeYŒ'"₫:ë¬>}ú4õ¼₫ưû?{ölÔ¨QGiÄÿ lÿ~!0€u6Ú4dˆûù±Ît@(…̣quªÎ:í©\YˆccYg iz^8‘]\\W)̣¸“´́́́²}Izzú„ ¶lÙ̉²eËăÇ9’_— œøJÉ CCP›øtÆoèÖéh®­ư¦ÿ…cË–- Å™3gø¥Rbccăææ–íK¶nƯzüøñ~øaơêƠ¹ŒJ‚³ÎFËÄ‹8ΜÉ:4Ăœ§æ4o.Äâ9 ư ÿ…£———‘‘ѪU«¸ó‰(00066¶G… âZ’’’¢££¹ËÖ”Jå¶mÛ+6eÊÖ¹ƒ´ˆÏXúáÖÙhßÈ‘Bv#·|ô¤“*Tb=+ô—_UMDööö“&Ṃóóë̉¥KÓ¦M?~æêêêëëËo2nÜ8gg烾~ưúÉ“'fff}úôÉÚ[·nƯ¼½½Yï°yjU<%aíƒ:»‘D­[gÄ>>´{7ë„4Gÿ G"4hPÉ’%÷íÛwøđá2eÊx{{;–[‘'+nÜ1%%åæÍ›YŸÅ%2†́¹hÅF=ëuéR?>#₫åúùgÖ ̣<5§U+!̃³‡u6%S*•¬sĐ7r¹ë8JMttt>WA;q‚ڴɈ½¼h×.ֻĸöƒùûí‘ÿƒ!ÿÇEFÂ?%èWLÙ²ốYFœ”DE‹æ«7ü°HÁ~×ëÿ9yjU¼¤—|,']!™pm5è/*ỵDˆ--YgĂxÇ Xg’ƒyjNûöB¼};ël4…#À×ưû¯«v»rư5y²ÿôël@r̉A>nBMX§ĂRÉ’BœÊ: Aáđu˜§PÅ[zËÇ©"ëtĂl5è%_÷đ¡—(Á:æÄ‹8.YÂ:ñ<ơ:ZÇ:ƺtâ-[Xg !(¾ấY!îØ‘u6R0}ºOœÈ:¿è/>nA-X§Ăµ5ë 4 …#ÀW`@‰”ÈÇå¨ët$³Ơ P8|ÅƯ»B\º4ël$B¼ô÷Ê•¬³IÀơÔYơè!Äë׳Î@P8ä&<\ˆùÀæ̀â1cXg’°“ṿq[jË:©07g€F¡pÈ æ©Tñ‰>ñ±Ù±NGBÄ¿7†g @¾¡pÈÍB́àÀ:I/â(^Ü ’xÉF̀S‹ơê%Ä₫₫¬³È79ºzUˆmlXg#5¿ư&Ä‹±Î‹ >îDX§…#@ÄóÔ/²Î@ª”¤äcÂßX™‰qÄ)Á ëP8äè̉%!®hèwÁÈxGœjÀp=uîúöb,Bº…#@önƯâÆYg#Mâj__ÖÙ3hw§î¬Ó€„ {¸@]dÁ:‰ÿÁí–@§¡pÈ^X˜W©Â:É=Zˆq;^ƒ4”†̣1æ©ṣăBŒ¼ƒNCáû÷…ØƯu6R¶b…ă–ji-­åăïé{Öé@ÁBá ̀SçEj*ë €¥"T„u ’&^ÄQ¼ *€nAáÓ§…¸F ÖÙHܰaB¼};ël@«FÑ(>ÆÆ<µ*F ûô믬³È_xöLˆ]]Yg£+ij¸¶Ú`,¥¥|<²N´…#À0O_ï̃±Î@ºÄ‹8ÎË:ơ¡pøÂ‘#BÜ ëltH¿~Bü¿ÿ±Î ÜTÊÇÀ:1~¼ÏœÉ:ơ¡p¼~-ÄÎά³Ñ-âáY\[müȇĐÖ逖 p`:ï âW¯Xg ]óç ±Ÿ_̃û`…#€@<ÅÚ¬ëltN¯^B|ô(ël Í$a’ơwúu::fêỐc€Â Ăû÷B́èÈ:]„k« Æ\.ëI#Y§ÚƒÂ CơêBŒyê¼07âÿ₫c €tự‹û-ëlÔ ĂÓ§Bܲ%ëlt”øÆ̃â…ÔAüBBƠ#¾W5¨N|=5!Ư‚€ˆ(9YˆííYg£»NŸb̀Vë©Y4‹W̉Ê|ôº…#®§Ökk!~ôˆu6̉%tü×î@á@D´}»·oÏ:Ö¥‹Ÿ9Ă:аù$¬%#^ÊÔ%>ÍqôhÖÙ¨ …#¥¦ qÉ’¬³Ñu¸¶Z¯M£i|<™&³N´ …#æ©5J\zß»Ç:é2Eˆ×®e €jP8Đ–-B,h…<Oö‡…±Î4f -ácñR7 ñĐ¡¬³P Gø̉È;̀V멉4‘§ÓtÖé(ÁĐaZóÄ ƯºÅ:é?^ˆ7l` € P8‚¡[¿^ˆ{ô`̃/¡~éël@ÄK6—r„üX"L₫ctt G€ âæA~a¶Z1|<›f³NG)•¬3P G0hÆ 1æ©5ÉÑQˆ¯^e €tƯµqÛ6ÖÙ| G0hBÜ«ëlôL³fB|ư:ël _üÉŸ¢ŸX§£WVîÚˆÑy>DD… ³Î@ÿ`¶Z §á|üưÆ:½ơñ#ë ¾…#®1Â)[˜§.ÎÎBÁ:é2Dˆwîd @®P8‚áÏơíË:½Ô°¡ß¹Ă:È£ ₫®/å">g£ó q(H&c¾Âlµ^đ%_>^D‹X§£çYg+` &ÆM0O]PªUâsçXg ]ƒ ñ̃½¬³È G0PâuwÅ¿²AĂêÖâXgjÛL›ùX¼”#hFçAW p€‚„ïCçCÂQ[NËY§£·Ä'̀¼yĂ:€œ¡pCÔ¹³‹OKÍ«UKˆCBXgjK£4Ö) oo!ö÷Ï{? …#¢ƒ…X¼33!~ü˜u6 †?éO>®NƠY§£çV¯â9sXgPÀNŸb̀Vëñ<ơ ºÁ:=gi)Ä/_²Î (Áàüü³‹—r„‚"¾>æï¿YgjH¡Ö)–ï¿âcÇXg`p~ưUˆGbU‰¿AIDAT¯Ëóü9ël@%»i7‹—r„‚ƒkÉ@úP8@ÁĂ÷¡ÏSR ët ‚……?}Ê:€́ pĂ"n/åK|ïÁÇYg*‰§xÖ)¢îƯ…øäIÖÙd ‹øÇñăYgcPœ…86–u6đûi? ¬Ó1 ‰CáZïC"§"Ü”S{ll„8:u6Y p²`Aö1hC³fB¼̃û­ˆ%aTؘŒY§cXÄw(8s†u6_Báä§Ÿ„xÊÖÙ GG!~ÿu6£Ă$œ‡Ú‡ú°NÇà`t¤ …#h ¾uæ©Ù*UJˆïƯc À—P8‚¡_C-¾¶´§eK!̃³‡u6£ç$¬µiJ¦¬Ó1DíÚ qXëlDP8‚¡˜8Qˆg̀`Á²·çCY îJ"E¡f¡|Ü“z²NÇ@‰Gç}±ø:H GĐ"Ñ÷¡íÔ©¬³lLµ æ©Y)[Vˆõd € Çí̃½ÛËËËÍÍ­qăÆÓ¦M{ûö-ëŒ ï6m²äcñR míÛó¡Å¬³l<3yÆÇŨët —ø̀›7 ³N  Ḉ-[¶lÆŒ>¬W¯……EppđàÁƒS0³¦³~ù¥Ï™Ă:W²¤§¦²Î¾đ/ưËÇ]©+ët x¶ú§ŸJæ½#Bá˜ÈÈÈÀÀ@;;»£G;v¬_¿~ׯ__¼x1ëÔt®­–0\O-âƠ«nƯˆ#H ÇĺÚµ+==}́ر¥>/0uêT++«#G¤§§³ÎÔ Äâ¥.]„xËÖÙÀ̉C>.A%̣Ñh€xƠü7Xg@DD&¬¢ˆˆ###¾ÅØØ¸Y³f¸|ùrƯºusù£™åä¡?fj|nYæ½\Ü’PèM±Ôâ™_[.ÔñiUcJ^vxư¸å“ÑÇÂéẸÜa¶é”nôå_OJ_(ÿ¢~;L6N(ªøâ¬©gÅoÚ¿©çßyiưÑNỤ̈Ê"ªTbEq˽ÂD‘¡Ú„ˆ^"₫Ø„RhÊÜaEU¤/^₫‚^”¦̉™6ËöµÙ6̃¤›Ơ鋌§xK²̀s‡èB}úâ(H‘ỡªw˜mă'úT˜¾ä¸D—êPƯ­BUî…~ñsZîQ“§™;̀®ñ?³7eS¾ø zR4¶|²­*¯Í¶ñ¾åKçø/₫-Å·ưd™ç¯Ú>­[NÜ’bôÑ,Ë©ê+û¨Ñ™³:oÿ¸á³ yx——–)T3#îxƯV|₫Y¹vjƠÊü6¡¡Ô¤‰J±±dûåq¹ÿ‹{—«ÛáăÇTáË|öL|Á¾Ú̃¹CU«~Ṇ̃îY[ç½ĂK—¨Î—?,©©T¨º•²s¡ß¸¸¥{Bç̣×Ħ)d&ÆJqKÄ»zå_fîïQ¹&OUi|Ÿdbe&n¹ờÆƠ₫m;|₫Ö´ŒÍqKôks§’IyîđáËb•́Ä-¯̃)eư1Ï^ÿ¯DͲqâ–Äc 3…*¯-÷h&$™R©̀/úD©TºººÚØØœ={VܸdÉ’ tëÖ-÷d$c½ụ̀¼ •~Á: ’¾£¥Ë0 (LUg–œœ¬P(¬³ü­ieeEDõ¼a @CƠ( ˃´ p̀Œ»tÚÜÜ~ü8,,̀ƠƠƠ××—uj̀ p̀̃ AƒJ–,¹oß¾Ă‡—)SÆÛÛ{́رÜ<† …c:wîܹsgÖYHÎ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ƒĐ®];Ö)@f8(̉„ă"A8( (@%(@%(@%(@%(@%2¥RÉ:}#—ËY§+22’u  p•`ªT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂQcvï̃íåååææÖ¸qăiÓ¦½}û–uF†%%%eÓ¦M:uª]»vÓ¦MüñdzgÏfƯ ‡‰•gÏƠ©Sg̉¤IYŸÂAѾ7nŒ9̉ÓÓ³^½z̃̃̃.\Ⱥ ‹6}úôiƯºuƯ»wwsskѢŘ1cîß¿Ÿu3-ˆ’Ëå×®]ËöYU~&ăÙ³g³ÎA,[¶láÂ…‰‰‰ơêƠKII9₫|xxxçÎ *Ä:5ƒ––Ö¯_¿={ö( wwwKKËđđđ½{÷¹»»ó›á0±¢T*GŒ-—ËÛ´i#~ EûN<éăăU±bEGGÇđđđàà`WWW'''~mR(ưúơ .T¨P½zơ *túôé;wº»»—-[–ß E;V®\yăÆ //¯̉¥KgzJ•C ÿ‡I ùv÷îƯ*Uª4mÚôåË—\Ëܹs]\\~ùåÖ©?₫øĂÅÅ¥wï̃ÉÉÉ\˽{÷ÜƯƯ«V­zûöm®‡‰¡ 6¸¸¸¸¸¸Lœ8Q܃¢}ï̃½«[·n­Zµ.^¼Èµ\»v­zơê5R(\ ‹–q¿ÁÆŒ“ʵœ;w®jƠªmÚ´á·ÁA)hïß¿ˆˆøù矹_VW¯^Í´*‡À¦ª5`×®]ééécÇ-Uª×2uêT++«#G¤§§³ÎÎ =z”ˆ¦OŸnffƵ8;;:T¡PđÖ8L¬Ü¿Ù²eUªTÉúöÇÇÇ:´N:\KÍ5Û·o{ăÆ ®ÇEË._¾LDưû÷711áZ6lXµjƠG½yó†kÁA)h;wîÓ§Ï;rÚ@•C`‡ …£DDDyxxđ-ÆÆÆÍ5‹‹‹ă~@A‹677wuu7:;;QLL ÷‡‰‰´´´É“'ÛØØL:5ë³8(Úwúôi™LÖµkWqăÂ… ###kƠªÅ=ÄqѲ2eÊ_#‘R©|÷î‘‘_Jâ ´yóæ­Y³fÍ55ÊvU!&ù¥T*}ú”P¹råÙ³goß¾owppX¾|yơêƠ Ç…¹\¾uëÖ 0€oôöö6mă 0§Ê!0Ă„Çüâ₫R777ÏÔnaaADïß¿g ÁQ([¶lñññINN^°`­­-á0±’’2ỵd‡ &ä´á hWBB=xđàđáĂ~~~.\ 5jÔÿư7f̀îˆà¸h_||ü‚ ’’’\]]{ơêƠºuk33³}ûö|X¦L™ß~û?U‡Iûüüü>}º}ûv₫¥LpP´ÏÔÔ” ,XĐ¢E .9rä³gÏ‚ƒƒ:ôƯwßá¸hßäÉ“/]º4uêÔr-Ï=ëƠ«×¸qă₫÷¿ÿU¬X…9U&Œ8æ—‰‰‰••UÖ¿$âăă‰ˆ¿® Ú§OŸæÍ›×¿ÿgÏ5êÈ‘#âœq˜´,<<|ûöíC† á¯·È Eû̀ÍÍMMMÍ̀̀<==Åí­Zµ"¢»wï‹Ö½zơêÔ©S•+Wæ«F"²··>|xjjễ½{ ET9r˜P8j€]\\÷/ƒÍ=Å:;ƒ>a„-[¶´lỤ̀øñă#G̀:Ê…Ă¤MÜM/Ö¬Y#ÿ¬{÷îDô¿ÿưO.—wêÔ‰Û EûJ•*U¨P!™L&nä~^̉̉̉¸‡8.ÚGD™Ú+V¬HD¯_¿æâ 0§Ê!0„Ă„ÂQZ¶l©P(Μ9Ă·(•Ê777ÖÙ„­[·?~ü‡~X½zuNƠá0iS… :~©I“&Ddooß±cÇfÍq›á hŸ§§g||ü½{÷ÄÜB!üZ›8.Úäèèhll|ÿ₫}¥R)nŒŒ$¢Ê•+sqP˜SåÄab½¹>øï¿ÿªT©̉®]»„„®% ÀÅÅeáÂ…¬S3ééé­ZµªS§NJJJ.›á0±uóæÍ¬wÁAѾ۷o»¸¸xyyÅÅÅq-ׯ_wss«W¯^ll,ׂă¢eC† qqqY¾|9ó{÷î5hĐ zơê<àZpP´fúôéÙ̃9F•C`‡I¦ụ̈OÈ› 6øùù•-[¶iÓ¦? «V­Ú† ²^–÷êƠ«¦M›™™UªT)ë³Ưºuóööæb&†nƯºƠ½{÷.]º,Z´H܃¢}k×®]ºt©••UƯºu“““#""d2Ù¢E‹Ú·oÏoƒă¢M±±±ß}÷ƯóçÏ«U«wé̉¥ôôô3fôéÓ‡ß E;f̀˜±{÷î]»ve=E[•C ÷‡Éxö́Ù¬sĐnnn/_¾ 511iß¾½ŸŸ_Ö¡ DFF§¥¥½ÊN•*Uø«dp˜zưúơÎ;åry›6mÄí8(ÚW·n]{{û¨¨¨›7o~üø±AƒK—.­_¿¾xm*Z´hÏ=‰èÅ‹W¯^MMM­[·îÂ… ¹‹–x8(Úq̣äÉÛ·o{yy•.]:ÓSª½?Lq•àâP GP GP GP GP GP GP GP GP GP GP GPÛ§OŸ¶oß>hĐ ¦M›Ö¨Q£M›6ƒ̃°aÇTïdÇr¹\.—÷èÑCk™ß¿_₫Ùùóç|vÙ9uêÔ?ÿüóÏ?ÿ¼yó&§m‚ƒƒ¹´«U«ŸuOOOnƒ… ª₫Ö+V¬à^5bÄÖè [·nµk×nö́ÙgÏ}ơêƠ§OŸ?~âççצM›ÿư—u‚ºgüøñÇ>|xdddNÛ´jƠÊØØ˜ˆ ÅÙ³g3=ûđáĂgÏqqûöíYïè- †èèhooïÿ₫ûoáªÎË—/Ç{÷î]Uº277/[¶lÙ²eK•*Åz·t€••UÆ ¹8$$$Ó³§OŸæ‚²eËÖ¨Qƒu² ·P8€üüü’““¹¸Gû÷ï¿qăFhhè¼yó̀Í͉(%%éرªtƠ¹sç“'O­½5?”xúôi¥R)~ề™3™¶((@UçÎ;uê<ø·ß~«R¥±±qÉ’%¿ûK—rOEGG?zôˆ‹Å§Đ)+V4kÖlÅ”Ă9iiiÛ·oïƯ»w“&Mj×®Ư©S§I“&eÂ÷;qâÄúơë·lÙ²Q£FyØ/q‡ñññ ,èÑ£‡››Û·ß~–––‡·ÎéÜÁñăÇ‹ÏD\²d‰\.çkñÈạ̊”””lóäg«ăââñ¼É·§¤¤DDDpq‡øöôôôC‡ơíÛ×ÓÓ³F}ûöƯ»w¯xrÿ4rÉœ;õ¼^½z¹¹¹µjƠjÔ¨Q·nƯÊç¿4,Ö €Îؾ};XYY 6,ӳ͛7ơêEFF:::fÚ`úôé{÷îÍ¥ÿOŸ>ơéÓçúơë|Ëưû÷ïß¿àÀŸ₫ù‡~È´}bbbï̃½Ÿ|È=¼{÷îƯ»wïܹĂUºúÖª°¶¶nĐ w‚cHH?%Æ y:88¸ºº̣Û?₫È‘#üĂgÏ={ö,<<üÔ©S+W®ÔHJaaa&Lˆå&''ÇÄÄœ8qbÀ€S§N-¸XÁˆ#¨ệåË\ЦM›¢E‹fƯ 00pß¾}ûöíkÛ¶m¦§ñ¼™{ƠHD₫₫₫\ƠhjjÚ²e˾}ûÖªU‹ˆ”Jåܹs£¢¢2möäÉ“%JÔ«WÏ'88˜Ÿ·UWxxøĂ‡íííkƠªU¤H®ñèÑ£7nÜ( ·₫ñÇOœ8affÆ=ôóó;qâ„©©iNÛ·k× Ä!ñ'8ç©9ÂU2™¬Aƒ]»vuvvæ:v́XXXX̃>"±ÄÄÄqăÆqUcƒ FƠ©S'###¥R¹qăÆàààü¿H F@%iiiüÀ’ƒƒƒº/ñâEåÊ•‡Z¾|ùâÅ‹g» _Í :”Ñ4hĐÙ³g Źsç*V¬˜é%+W®,\¸đ«W¯úơëMDkÖ¬iÚ´ĩvsæ̀™̃̃̃DƠµk×?Ñ7²^q¢‘·¶¶¶¶¶¶–ÉdÜC;;»̣åËç²}ëÖ­gÏ­P(ñ¼W¢D ÊáG¾qàÀS¦LáâîƯ»sóÈ7õlĐ Ã>"̃ºuë¸ơƒÚ¶mËaº¹¹ưúë¯D´jƠ*m.´ÚGPIbb"çá:h33³7vîܹV­Z9Ơ\•FDû÷ïæêÔ… ¿¦c¦…xRSS,XĐ AƒñăÇoذ!,,L¡PpSÛ‘˜˜È_ “·oßèGÚ‡ÂTåææÆ§NÊvI—víÚƠ¯_¿~ưúüơ×¼\0‰‰ÉÏ?ÿ¶|ụ̀Î;[ZẒO]¼x1ëôâââÄ?|øÀϧ—-[¶@? †o]¢D n=>>₫üùóÜB<™Æöüưư7nܨP(fÏư¿ÿưị̈åËJĂ‚„̃°aÉ́têÔ©@? Đ> *₫T¶gÏíØ±#Ó³§NâÛ¸óđỘéÓ§ØØØØØØOŸ>µoß~ñâÅaaa7nä'©ù¥ y÷ïßçVÿáœ;w›S.T¨½½}~ª¿u¦ûJgª8ó†\\¼x1wJe¦yj"úóÏ?¹`Ö¬Y½{÷–Ë寯Æ/^¼Pư]¾y… ¸@¡P”±²²²´´´´´̀ạ̊pĐQ(@U5ââ¹sç®^½úơë×D”ºÿ~₫̉ỰåËW­ZUƯÎ>|Øø3n}DccăF}÷ƯwÜâHNjj꯿₫JD¯_¿^´h×̃¢E ñ ÂWß?̣úơëürèÇϽ[Ũ½uëÖFFFDtçή%Sᘔ”ÄOóơß­[·TY…Gờù ;wîäO=v́˜»»{ưúơ===5{J%H.5üôÓO^^^>|P*•+W®\¹r¥M||¼B¡à6(R¤ÈÊ•+óP·Éår[[ÛØØX…BÑ»woOOO++«ÿ₫ûïäɓܭ[·ÎúªăÇ·hÑ¢R¥J7nÜà&‹ŒŒF­…"÷·æâ₫đáC×®]«V­úöí[₫j’L,--¹ó׬Ysÿ₫ư₫ưû›˜äöËÙÖÖ¶nƯº|%W±bE~FNÑ¢E‹-Êơ9}úôƒÊd²3gÎä~Ïu32dÈ®]»âăăÿ₫ûï~ưú¹»»ß¿Ÿ?çràÀüƠE 70âjpqqÙ¸q£øúè·oß̣UcÙ²eÿư÷< 7‘‘‘ÑêƠ«¹ÉÍØØØƯ»w9r„›uww÷ññÉô’zơêÙÛÛ¿zơêüùó\鯭’S 5«øÖ®®®;väâ”””Ë—/GGG;88đ£t™ză‚+W®,\¸P•qGñâDYç©e2™‡‡ÿî'OüçŸ́́́êׯÏ5rCÅÙR=sKKK???n$8<<|ƠªUÇăVüéƯ»÷¨Q£ ú(€ö¡pơ|óÍ7ÇŸ6m»»{‰% .́ääÔ¢E‹iÓ¦=z´yóæyî¹víÚ'Nœ>|x5J•*ebbbiiY§NyóæmÙ²…¿Úgeeµ}ûö={:::ÚÚÚ¶mÛvÓ¦M½zở‡ Ê[/\¸pܸq...fffƠªUëׯ߮]»²½º|Ú´i;w.Q¢„™™™³³³*µmÛ–›­¦,×Só}º¸¸‘‘‘Q•*U °oß¾V­ZqÏz¨={nذ¡F¢ß9Ê ®UMDD¤Ă»tẹ́ÑƯ.\¸püøñ† ¦³Oddd•*Uî߿ߡC‡íÛ·{yy9rÄĂĂ#ơÎaaa µjƠ*Q¢„´ÑÊÊ꣇ªV­ZµjƠvï̃ưđáCÑoe G""̉7 LLLrá¹̃¾}kjjjl¬̉;xñññ‡>qâÄ̉¥KÓßỹ¼y!!!kÖ¬é̃½;€!C†T®\yøđá‡N½sHH€)S¦¤YŒfèP¤CTúˆˆ(£\\\|||/^lkk›'ỌåË3æíÛ·̉óçϯP¡‚¥¥¥½½}ơêƠ7nܘâ±gÏ­X±bŵÙÈ!#G´¶¶677¯^½ú={âăăÇëææfmmíééyưúuÍα±±S§NussË—/_±bż½½ÿư÷ßÜyO"""4iâëëû́Ù³î¼yóf''§nƯºiÂ%JtèĐ!00đñăÇ©wÖ%K–̀ú¡H‡°p$""ư±mÛ¶AƒƠ­[wôèÑ ˜9sf£F’’’Lmnn®©DDDˆ‰‰‘vvrr’ªFƯ¿Zµjª€§§'€Î;kªF 6 ‰‰±¶¶622:~üø½{÷+`åÊ•+W®L|||ü={>ổZ·n£ï«æ¥Y[[+7ÚØØH¯=…ÄÄD__ß:˜™™ưñÇ>>>mÚ´¹zơjFE:„…#éww÷|hiiÙ»wï.]º.\øäÉ“‡.P @PPĐ̃½{›6mâ8Ú?UªT)W®ÜŒ3BCCË•+¼wï^{{ûÎ;§Ø3‹·ª³®G¿₫úk—.] `kk»f͘˜˜4W),X° ¯¯ïèÑ£K•*Ơ´iS[[Ûưû÷_¸paúôéeË–ÍĐ¡H·pG""̉Ơ«W?pàÀË—/₫ùçŒ1âÈ‘#ÆÆÆŸ~úi@@@‘"E-Z4₫| ‹Ë—/ÿôÓO‘‘‘?ÿüsêădtÿtäÉ“gï̃½Ư»w?qâÄ”)S=Ú¨Q£ăÇ«đÚ›µµu``à×_½}ûöÙ³g—,Y200đC‹J5jûöí•+W®´³³Û»w¯4R†E:ÄH́7zÉƠƠ588Xt”LXX˜ G8~(ê$}.ºø«̀ÅÅ¥R¥J;v́Hîñđđ°µµ=räˆèD2¬sçÎAAA<©íºx‚d ^q$""""­°#‘{úôé–-[ .\»vmѹhǻÙ³wîܹwïèD(3X8‘hÚ´iñâÅEg‘Û®_¿̃©S§6mÚèJá¸jƠªåË—(R¤ˆè\(ĂX8‘Xºt©èrÛ… D§aË–-[¶l™è,(“ØÇ‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆHWyxxµmÛVt.Ù¯_¿~WW´hQѹĐ;,‰ˆˆt˜››Û† †ª _½zƠ·oßO?ưÔÊʪnƯº§NúĐăââLMM’+P €´ƒö‡Rª[·®¯¯oéêC?íÙ³ç† jÔ¨!ú=&™©èˆˆˆ(ó»té¢iGFFV©Rå₫ưû:tpppؾ}»——ב#G<<}ú|ûí·ß|ófOooï~ø¡hÑ¢Ă† óđđX³fM›6m²ưµGFF̃ºuËÓÓÓÈÈHÚØ AƒÄÄÄ4»'†„„äÍ›7₫üÛ¶m[±bEPPTdgôPËQ7õ̀PV}"}‰ˆ(c_ñ$%¥÷Ó₫ùgúôécÇƠ„£F={ö–-[:uê´~ưú̉¥Kïß¿ßÔÔTó#‡}ûöµlÙR³³¿¿¿¯¯ï„ Œ|tÿ¨¨¨K—.•)S€©©é¨Q£¢££Ïœ9cffạ̀åËAAA¯_¿666̃²eK÷îƯW¯^­y ··÷Î;?~́ää”ï̀“'O’’’• , Í !!!ÆÆÆ%K–|ñâ…f‹››Ûúơë+W®œÑCe:«l|"Ê,‰ˆH888 >\ 'M´lÙ²­[·vêÔéôéÓæææ*@DD€˜˜ig'''©jđÑư«U«¦©xzzèܹ³¦jаaĂ   ˜˜kkk##£ăÇß»w¯X±bV®\¹råÊÔÉÇÇÇkú¦©uëÖé¿vMnÖÖÖÊ666Ṛ)„„„$&&úúúvèĐÁ̀̀́?₫đññiÓ¦ÍƠ«W3z¨Lg•OD¹ƒ…#éww÷|¸‹‹‹»»{­Zµ¼¼¼7o®̀S#:::[ØIé_k}ÿ́¯_¿VnŒŒŒ`ooŸzÿ£G››K?êƠ«×ÿư7`À͸æ *ÓYe4g…#è‚¢3ÈSSÓèèè7õ´k×.  jƠª7nƠªUÍ5?ÿüså¶¶¶R[›ưµ7`À€öíÛï̃½ûÈ‘#~~~®®®)nÑÚØØ|´:L‡£££±±q;¼ááá .œzggç[7n àÚµkƯ»wÏĐ¡2UFs&áX8QÆ ":ƒ»~ưz\\œtµ/66öÆơë× X°`ÁEö)® *etÿtDDD„„„”.]ÚÛÛÛÛÛ;11qé̉¥ƒ Z¾|¹f&åñ³r«ÚÔÔ´lÙ²ươ—ră±cÇŒŒŒÜƯƯŚ|ï̃½Ư»w7hĐÀÍÍMÚ¨¹ÔW¬X± *+YeăQîà¨j""̉Ï=›?¾N:522²mÛ¶¤•ẺöíÛ£££?t…/£û§#88¸FsçÎƠ„ÆÆÆơëׇâ^¶Ds«úC´y®̃½{ß½{w÷îƯđéÓ§Û·ooÔ¨‘‹‹K=-,,FŒѧOŸ¸¸8Í–ÄÄÄÙ³g›6jÔ(C‡ÊbVÙøD” xÅ‘ˆˆô‡““ÓĉOœ8Q±bÅ“'O8p fÍƯºu{øđ¡¥¥eï̃½»téR¸pá“'O>|¸@AAA{÷îmÚ´iăxzzfhÿtT©R¥\¹r3f̀ -W®\ppđ̃½{ííí;wîœbÏ,̃ªĐ£G_ưµK—. °µµ]³fMLLLê,XĐ××wôèÑ¥J•jÚ´©­­í₫ưû/\¸0}úô²eËfèPỲ*Ÿˆr¯8‘₫¨^½ú^¾|ùóÏ??xđ`ĈG166₫ôÓO)²hÑ¢ùóç[XX\¾|ù§Ÿ~ŒŒüùçŸS'£û§#O<{÷îí̃½û‰'¦L™rôèÑF?~<'®¨Y[[~ươ×Û·oŸ={vÉ’%?´Öó¨Q£¶oßîèè¸aÆ•+WÚÙÙíƯ»WÉ(C‡ÊJVÙøD” Œ²øÇ ¥æêê,: J&,,Œw=Ô†:IŸ‹.₫*sqq©T©̉;D'’{<<}ºeË–Â… ×®][t.Ù́́Ù³wîܹwïèDHÆÂ‘ˆˆôDÓ¦M‹/.:‹ÜvưúơN:µiÓFÿ ÇU«V-_¾@‘"EDçBï°p$""=±téRÑ)ä¶ .ˆN!-[¶lÙ²e¢³ dØÇñ#BCC]]]/]º$:""""ÁX8~ÄúơëE§@DDD¤ ¼U¶ÈÈÈ[·níÚµkóæÍ¢s!"""RikÙ²å¿ÿ₫+: """"aᘶiÓ¦½yóÀ† Nœ8!:""""ñX8¦MÔ Óñ׈‰‘¸$‘¸{..¸råËó¤'2/đÂö¥QZt"b°p̀neʬ}øŒŒ\KËÿªöíÛ':3ƒöPó¡èLJR¢„ €̣åÀÈ¡¡a¢3Ê*ưø\ˆ2*,,½“×ËËKjß ¾¥ùÿDLü?N<·±p̀n… áưâ•Áÿ₫‹W¯D'DïpYd̉ơÅÈ(å–Ï>sILV–éúçB” éÿ³—–¥6‚|ÚÇ"VtÖp:́vô¨ÜŒÄ7߈Nˆˆr„£c“’Đ²¥è̀ˆ(g(oOç Í3sDg$ Ḉ§¼CM›°q£èŒˆ(›ơê…§OåPÙ»q÷np© "ưăŸÛ¸-…Å›‘,s†̣k¤kW¼|):!"Ê6₫₫X½Z5§»̣¤ïß÷ï‹Î’ ƒ‡‡‡‘‘‘‘‘QÛ¶mEç¢.ưúơÓ¼3E‹ÍúÑâà,Â$îP89æàA¹mg':"Êÿư‡äPY/>-·‹( 77· 6 :@\\œ©©©Qr v~ơêUß¾}?ưôS++«ºuë:uJ›§¨[·®¯¯oé*×èCíÙ³ç† jÔ¨‘-or#4’óA^àà˜Ó°!||0₫»ôé ¹½gO²U­É“1ỵ»'=åGGÇ.]ºhÚaaa µjƠ*Q¢„´ƒ•••¦Y¥J•û÷ïwèĐÁÁÁaûöí^^^GñđđHçø.\8~üxÆ •Ó?T®=Q:­V­ZµjƠvï̃ơ‰”b₫‡ÿYĂ:‡>JƯDé?~|é̉¥/^¼¨ưCJ—.­ ’€wÿåÉ#úƠ®ĐĐPÑ)PJºø¡Hg3Ô¿ÚûT­*ïcl,:ăŒ“>—d¿ÊtM||||||î<×›7oD½̉J•*Ơ¯__ ÷́ÙààÁƒiî>>‹/¶µµÍ“'Oụ̀åÇŒóöí[i‡ùóçW¨PÁ̉̉̉̃̃¾zơêƒ5={ölÅ+¾ÿ°ÓßÈ!#G´¶¶677¯^½ú={âăăÇëææfmmíééyưúuÍα±±S§NussË—/_±bż½½shUÛ%K–Ló§›7ovrrêÖ­›&,Q¢D‡?~œz爈ˆ&Møúú>{ö,£‡Êµ'Jÿ±YWu¥¶-l7`CN<‹naáøS§N ®¨üÆÈ(åͪyópø°è×DD6n._–Ă»wÓÛYỷ¯\‰;DgoH¶mÛ6hĐ ºuë=º@3gÎlÔ¨QRR€É“'6¬@£Gîׯßëׯ»víºk×.鱺ÿ† Ö®];~üx__ßĐĐĐ:Ô«WïđáĂ}úôùöÛo¿y?#›··÷?üP´hÑaÆyxx¬Y³¦M›69ṇ̃CBḄæÍ›?₫mÛ¶­X±"((Hª›###oƯºåééi¤˜€´Aƒ‰‰‰iötttÔ\aºyóf¥¨\{¢ô›u31ó/ü%…/đ"ÛŸB±c®xñBÓ°!û=é–ăÇñÓOr¨Íœ“wívíđæ ̣äư2²²ËWîK@ë?ÿü3}úô±cÇjÂQ£FÍ={Ë–-:uZ¿~}é̉¥÷ïßojjªù‘ƒƒĂ¾}ûZ¾Ÿ{Óßßß××w„ ÆÆÆ>ºTTÔ¥K—Ê”)ÀÔÔtÔ¨QÑÑÑgΜ133pụ̀å   ×¯_oÙ²¥{÷î«ßÆ÷öö̃¹sçăÇœœ²÷Í 166.Y²ä‹ïª77·ơë×W®\ùÉ“'IIIÉ' -X° €Œ^®KÿP¹öDÙûÖ¥pWÇ`Œ̣0êX8æ [[lØ€®]ß…́3O¤S̃¯]iƯjKƒ±1ví’'Ï›—'}.qpp®è4ỉ¤eË–mƯºµS§N§OŸ677×T"""ÄÄÄH;;99IU#€î_­Z5MƠÀÓÓ@çÎ5U#€† ÅÄÄX[[?~ü̃½{ŰråÊ•+W¦N>>>~O!W ­[·₫èË ILLôơơíĐ¡ƒ™™ÙüáăăÓ¦M›«W¯j2·¶N6°ĂÆÆFziÚKÿP¹öD:TF•Gy©Œà,Iß°p̀-]º`ÏlÚô.díH¤#”ë ®\‰B…´}`‹èÛË—ËÇáIŸ ÜƯƯó(®îZZZººº̃¹s€Ư‰'8póæÍÛ·o_»v->>^ùXWWW©jÔf©­©So`aa±`Á‚áÇ»¸¸¸»»×ªUËËË«yóæyR]…Nçv’ÿ€=jnnnoo¯ {ơêơßÿ 0@3Àëׯ•ûGFFö×’æe~èPéÿ4Ÿ(C‡Êå5ơy˜§\0†X8æ¢ÿựêƠơë'[ŸˆÔGY5¶k‡ï¾ËØĂ—-C@€<¸‡.\ư’²CmÔÎúAr©©ittô›7oÚµkPµjƠÆ·jƠªfÍŸ₫¹rO[[[©­Í₫Ú0`@ûöíwï̃}äÈ‘€€???WW×ÀÀÀ7amll´©Óá́́œbKăÆ\»v­{÷îÆÆÆ)îđ†‡‡(\¸p†ÅÑÑ1C¥ÿÓl|¢¬¼Qé°„¥Ô₫_úÀ'‡HG±p̀]/_Ê_D˜=#GΉˆ̉æå%·óæ…¿frï|̉_¼ˆ 0uªè–eÊjsưúơ¸¸8éj_lĺ7êׯ°`Á‚!C†H;§¸‚¨”ÑưÓRºtioooooïÄÄÄ¥K—4hụ̀å¹f”ÇÏÊ­ê{÷îí̃½»Aƒnnn̉FÍơ¹bÅ™–-[ö¯¿’}vÇ322rwwÏĐ+JÿP¹öD™ø,>ª#:Æ@îprâYtGUç:å_“£FaçNÑ Q:vÄ₫ưrøß™?”̣¤Ÿ6 +Vˆ~mzíÙ³g󥕀©S§FFF¶mÛV3 ´²¢Ú¾}{ttô‡®đetÿtרQcîÜ¹ĐØØ¸~ưúPÜË–hnUÈGŸÈÂÂbĈ}úô‰‹‹ÓlILLœ={¶©©i£FôîƯûîƯ»»wïÖüôéÓ§Û·ooÔ¨‘‹‹KF_Tú‡Êµ'Ê^̃đ̃íRÈ1iâGñÄû₫ÔhÓ†ưˆÔæÎl—¿>²á}ổ-ľ}ѧèW¨¿œœœ&Nœxâĉ+yëÖl8 “ºw—Cô9§zơêxụ̀åÏ?ÿüàÁƒ#F9rÄØØøÓO? (R¤È¢E‹æÏŸoaaqụ̀åŸ~ú)22̣çŸN}œŒîŸ{ö́’%Kfn5çô•kO” ¢ Ô^ŒÅÙ~|½a”Å~¸”««kp°C÷6”'·´DT”èÄơYXXXNü¦¬P퇢¬ê¦MøqÙväví’M®Îß¾̉ç¢í¯25qqq©T©̉CrƯĂĂĂÖÖöÈ‘#¢Q©Î;=xđ ưƯ\]]oß̉´Gcô ̀øè‘uñɼâ(ΡCr;:_-:!"Br»V­́¬üö[²iÀ3r·“ˆrC9”Ó¦j4d,…R^pغëÖ‰NˆÈ uïđp9<~<ûŸâ͹½o-ưI÷=}útË–-AAA¢Q—³gÏnÙ²å̃½{zÔ\¸Ú±pMY;¦øÖ"¢\”âo·œ»¬<̣àÁ ưÊơHÓ¦MkÖ¬):‹ÜvưúơN:I£¶IcƠªU:u:ỵ¤öá€mpTµ =úơßµ Pi¿'"½•¬·HNŸ…çÏCIú³Ïx̉g›¥K—N!·]Đ9åsÀ²eË–-[¦ư₫QàH­đ£ Ô«‡Q£äă-‰r]₫ür{ß¾:üø£̣¤'N¹` ¥ƒ…£:̀œ å$øŸ}&:!"¢¬ÛF“&¹ñ¤&@yOµ`Á̀ˆ(×°pT«Wåvh(‘A(WNnçÍ‹ ÎĐ—%'NÈígÏĐ³§è÷‚ˆècX8ª‰²£Ó¢EÉÖ;#¢0j®]“ì¬+˜9Ê“~ÍlÛ&ú!"J G•QNîå%:"}ˆÙ³åPÔåó~ơbbľ+DDéaá¨2––زEÙg(ÇH“‚'ÂÚ»Wn[²ƒ>© Gơùê+.jK”Ó”'ÖÚµøä‘ÉxyaàÀ´s#"RÎă¨JkÖ`ÏùH­ZÉzÑQÖ(+³¯¿F·n¢-Â= {–/+*XÀÂƠƠUt D¤.,ƠêÙ3ùËíäIŒiÓDçD¤6”ÛVVؼYtBï…†Ê'ưƠ«>b— ư–Đ;aaa...¢³ĐaíĐnvH!WˆÉ ̃ªV1eŸùéÓqñ¢è„ˆtܹ̃8|X_¿PrÊ“~̃<;&:!"Ư·+Y5f#êvçÜöđ ‘n»y#FÈ¡:ú{úTn׫':"÷{£·²j̀:êV¢.”Cö™'Ê77¹­œq_U À5rÈ“(+œá,µO€£² GƠ4(Ù hyóNˆH')+°Y³’­ñ©6Ư»£cÇ´3'"íA>yÆc|MỒÂÁèº`ß>¹ưö-Úµ‘±µ•ÛơêaäHÑ }̀Ö­È—O¿üRtBDºæS|*µ=à1SEg¤'X8êeo¬;°j•脈tF—.xơJv¢£åö¡C˜?_tBDº£ú=À)<ó¢3̉,u‡²vôöÆ¿ÿNˆHl܈ÿưOƠ9 æC”ÙNC¤]صË¥b² Grü¸Üvr ‘Ú½|‰®]åP·ªF å4àeʈΆHơ‘Ø ­¤đ ̃ˆÎHß°pÔ)µjaÜ89dŸy¢tÙÙÉíƒEg“)åÊaæL9äIO”>˜HíØ‘yDg¤oX8êiÓP±¢/.:!"•RÖX>>ÉŒÑ-£F¡n]9TVĂD¤¤Fí ï6h#:#=ÄÂQ)—¹wưû‹NˆHu”wu]]1o脲&0Pn¿|‰.]D'D¤>UQUj;Áéü":#ưÄÂQ7)ûj-[†={D'D¤")Ƒܼ):¡́ <éÿ÷¿d#~ˆh2&ŸÅY)|„G¢3̉[,uÖÿÉí-t²Û?QH1s>Ê×̉¥ ^¾‘:œÆi_øJ!‡Qç(:+o^øûË¡1?J" ù\ÙúWZ)‡ø°³#‘FuT—Ú÷q_t:zƠ†.k×ß}'‡oIOylÜÑ e·† 1lXÚ¯—È0)Ä,Ç̣¢(*:#=ÇÂQÇ­\‰B…ä°zờHÇ)«¨o¾Á7߈N(g̀ WW9äädÈŒeLK´́ƒ>¢3̉,ußăÇrûôitë&:!"”÷mmm±q£è„r’r¸Op05‘EQTêÎh ă?đ‡èŒ  G½ ́3¿~=ÎÍü¡ˆtЬYɺ3¾x!:¡œ§<é÷îÅ¡C¢"Ê]˰́!JaDgd(X8ê‹“'åvƠª™?‘®¹z£GË¡> £Nß½{r[9$ˆHïƯÇư₫ç0æ0êÜÄÂQ_Ô¨¥Kå}æÉ`”//·ơcÊF-}úi²;̣<éÉpC1©}gD§cXX8ê‘~ưĐ¢…˜d₫PD:BY-Í›—lÔˆ!H1ˆµ#å0êɘ\UDgdXX8ê—]»ä¯ÄD´j%:!¢di)·6„è„DH1ëPưú¢"ÊINp’ÚUQu&‰ÎÈà°pÔ;‰‰r{×.,_.:!¢ñƠWˆ‰‘Cå̀؆F90(0³f‰Nˆ(gxĂû_ü+…§qZtF†ˆ…£>Rè׈Nˆ(›­]‹mÛäĐpÄ|ˆ̣=×®‰Nˆ(»íÀUX%…# G=uZñwاŸÎ†(;Ư¼‰=äU£Ær»\9ÑÙe«hD·C;)ää;±pÔSU«b’¢çû̀“qs“Û¢³Q2e0g̣¤'}b+©½ »ŒY½ˆĂ·^Mœĺ€³³è„ˆ²²ªQuëNHM†O¶‚N₫ü¢"ÊÊaÔeQ¶Zdá`”U,ơZT”Ü~ü½{‹Nˆ(KJ”ÛåÊ%›ö4?—ÛQQøúkÑ e<¤vQ½vàŒ…£¾SöÿZ¹¿ÿ.:!¢L4aarxåè„ÔJỷoƯuëD'D”Y0á".Já}Ü©µp|óæMHHÈ©S§°Y/·Û¶E\œè„ˆ2lß>,^,‡“>åûÓ½;""D'D”q'qr¦I!‡Q«„©èRú믿–.]záÂ…¤÷¿ù̀̀̀4h0xđà’%KÎN7™˜à?äÉÀóäá·.霦Måvt´èltÁÑ£̣dà<éI÷ÔB-©ưD§Cï¨ëă¸qă¼½½ÏŸ?Ÿ¤ø%·ÿ₫–-[ñ¼Yt‚:«eKôé#‡oI:EùvëVäË':!]P¯F”Cô¤[”b~Á/ÊcH,~~~₫₫₫Ê-ùóç7zÿÛ.11qÊ”)§Osø̀Z¾EÈa¡B¢"̉²âéÑ;NHẁww9´·‘v”Uc[´ơ†·èŒH¦–ÂñíÛ·~~~¶‹‹ËâÅ‹/^¼xö́Ù‹/.[¶¬D‰6lØ :S]¦\BæÉLœ(:!¢¨YSn(€Ơ«E'¤k®^•Û/^`ÈÑ }Œ¼¤väù ¿‰Îˆ’QKáøôéÓׯ_È—/ߺuë5jdaaÀÜܼAƒëÖ­³²²pîÜ9Ñ™ê8eG§©Sqê”脈>(Å¿Đ§OE'¤›”'ưÂ…Ø¿_tBD¶‹öC₫7úoDgD)©¥p,R¤ˆ­­-ww÷‚ ¦øiÊ—/@S>R–üóÜV^Ï!R“ ’]çØ¬xưZn{ye₫8D9*¡ƒ1X 9ŒZÔR8¨S§€ĐĐĐ·oߦøQ\\Ü;wT«VMtºÏÙï{́3O*ơùçrûÎÑÙè8++lÙ"‡<éI>ĂgRû.ˆN‡̉¦¢Âq̀˜1Ÿ~úiDDÄàÁƒ?~,múôé°aĂ>}ế́<`ÀÑiê…̃½Ñºµ̣k„TFùOrÑ¢d ÆPæ|ơºu“Cô¤6Ê1S1µ*‰Îˆ̉¦¢y'Mä́́|ÿ₫ư#G;v¬té̉·oß‹‹P¸páü1Å£–,Y":qƯôûïÈ“G ¼Y3ˆÎ‰̣æ•Û^^8PtBúbíZ <ü]øÅ8~\tND€( µk¡ÖxŒ} ǃJí„„„7n¤Øá̀™3¢sÔ/oßÊ—öîÅâÅü&áÚµƒ²¯Ễ½¢̉/ÏÉ'ư‰˜>ăÆ‰Î‰ ^wtG¸ÿ Q5Ưª&”# ­“PóæaÇ9䀘œ |WÇÇŸNˆ Ûr,_y=uˆQ?]q́ß¿¿è ̉ùọ́0„*Uø]M¢<~ŒáĂåÿsNH¤\›4á[MÂD#ºúI!«F ¢Âq§¦ÂĂ?₫(O|bdįÂÙYn³ï]ú́3,\ˆÁï§=áIO¢XAboö‰N‡´Â[ƠL˜€5ä0ƠªE‹æææÓ¦M;ỵdlĺ£G&NœøđáĂ;Z[[‹~M9oÑ"¸Èßè(W.ó‡"úå0joo´m+:!Ă6}:*V”Ă¢EE'DúHY5~…¯º¡[F¨îúY\\Ü;wîƯ»—æͤ©Zˆ‰‰IHH°µµM±ƯÆÆɯ)*¹ºº®_¿¾G=zô6víÚuœÖ‹s¹ºº¦Ø²oŸNÍPuèK‰ïÚ×®½ê×ïù¨Q¢sÊ’‡NdmÚ8ïV¤.X0aܸûaa¢s2x;v D‰w1>|ˆo¿œ2%BtRôüëR¨ ̃GÍ—˜oƽaĐ¥Ó̃ËËKt j¡¢Â1))iíÚµsçÎ}«\ª6• ±±±x߇RÉÊÊ À«W¯̉|TddäŒ3¢££ƯƯƯË—/ôûï¿×¨Q£Q£FÚ•'¯[—)ëΜrÿM©Ml,¤iÊZ´àDÙ ÁĂ!/'ÊaÔºNE}×­“—9711qvv.œ– ÓÔÔÔÆÆ&ơ•ÅÈÈHÓZ"åéÓ§G)Y²¤T5pvvîß¿\\Ü;D¿O¹¨@dÓ€+{¥eJµjrûøñ™?å ss,[öT ỷSÖ•A©}95a3å]q¼wï“™3g6lØ0_¾|ÙrXGGÇÈÈH帖°°0ÍRï xñâ)¶k.4>{öLôû”»zô@@¶m{r5e² Y¶ NNñ¢3¢44iƯ«~ươ]È“²B9 f&fºĂ]tF”U*ºâ¨©̀\]][¶l™]U#€† &$$üơ×_̉–¤¤¤ÀÀ@;;;Ôû/^ÜÄÄäöíÛIÉYjú7”,YRôû”ë¶n…̣ăø̣KÑ ‘NRN™Ú²%úö}تUP₫Y]½ºè„H7ÙÂVj×EƯQĐíA–¤¡¢Â±Zµj^¿~½‡íر£±±ñâÅ‹5ưøùù…‡‡·oß̃̀̀L³%:::,,L3lÍ¢nƯº÷îƯ[¸pabb¢f‡Û·o/]º4O<¢ß'¢£åö¡C˜?_tB¤cZ¶”¯Ză?D'D£\BæôiL™":!̉5]Đåä~beưúơ+Q¢Äƒ”³ÎÙÙyäÈ‘¡¡¡­Zµ4iR=æÏŸïîî̃»woiŸÀÀ@//¯¾ï¯L:ƠÉÉié̉¥M›6ơññéÖ­[›6m^¾|9f̀˜Ï>ûLôû$ˆ̣úë°a¸qCtB¤3ÆÅîƯrø‰¶Hu”'ư¤I8qBtB¤;æc₫ÿđ?)ä€}"¸ă€”¡ƒƒChhè´iÓ6õ\¬X±4×\²dIFŸ¥W¯^ øư÷ßœœœºví:tèPÍŒúZ52Á¿ú÷ï/ú  :vL.^¾D׮ذAtN¤FNNr»jUL$:!ʬƯ»å“>!­Zqx¥M9e£+\çaèŒ(û .‡ "ú ŒS.L¶q#7Gç΢s"uñöN9,—ṭ¤ßµ +V OÑ9‘Ê Çđ`È·noâ¦èŒ(GđV5e²£Ó7ß 2RtB¤"¿ư†U«ä½âôƒ̣śÛ¸î)Â!åơEˆÑcª+CCC7lØàùóçcÆŒiذaÛ¶m—.]úöí[ÑÙ‘Ârû«~“zóíÛËáû¹PIüư·Ü₫ôSÑÙ| ymˆx!:ÊAê*ÿ÷¿ÿµhÑâÇ|ñâ€AƒíرăáĂ‡×¯_ÿù矿ûî;±cÀ)™/¿ÄĐ¡rÈEm `n.·•}ăHT«–¬¯*?\̉PˆÙˆÊcHÿ¨¨p¼yóæ”)S̃Ï|ụ̀å³gÏ*w8}ú´¿¿¿è4Ia₫|”*%‡eËNˆSVưú%KúạdT©"‡… ‹NˆDSVßà›ođèŒ(g©¨p\µj•æ‚â_|aggwøđaÍö *L™2%õ¼~ûí7ÑiRr·nÉí70‚3/®J•ä¶©)–.åŒ3gäö£GP,ÂE§êIm#mÄFÑQSQáxăÆ +Vüơ×_;¦Ùîăăóơ×_7hĐÀíÛ·E§I©(û̀‹#GD'DŒK—ä0.NtB”“”'ưÊ•øưwÑ ‘³0ëIa"Ø£Ù ¨¨p|øđ!€ *¿~ư:kkëêƠ«(\¸0€˜˜ÑiRZ?—Û ˆÎ†rÛ‰˜>]ÙÙ(×oÛ»hh®âêhŒ–B£6**5‹G?zô@`` æ¶u½zơLLL¼zơ €½½½è4)-vvX¿^Ùg̃À|ñ…Ü~ôHt6”+Œ“M7¯è„(w•Gy©Í) Ç¢E‹8~üø²eË~ùåÍÆ† ¸ÿ₫‘#G8::N“> k×dÓ€³v4ÊzåÊd Æ~kÙ}ûÊ!OzĂ¡3ó\á*:#Ê=**[µjà¿ÿ₫[°`AXX€z-ZˆNˆrĐgŸÉíF¹¨í=¸~ó;ê¥Å‹*‡õˆNˆÄQôÇăäIÔ¬):'Êk±öä)Ø8 Æ0©-–·oß̃¹sÇƠƠƠØXE×GÓáêêœơăè°›7áæ&‡*ø7æââ": ứrcæ>a~(ꔹÏåñc8;Ë¡ Nz½¢†“å„|í†U£Á~׫¨ûù½(·çÉ“ÇÍÍMWªF€2e0g²Ï¼̃QV.ˆÎ†TÀÉ ïÇ4<éơ‘²j D ètHƯªö÷÷̣ä €úơëUv·&]4|8đ~ùäÏׯEçDÙCYLlÁ2d̃̃سG ÜȈ×ơ‡rơhŒ®‹º¢3"aTt¯}ûöÆ}e_k̉]‡Éí¨(tê$:!Ê Èí51~¼è„HMv́€™™6k&:!ÊŸA¾ÅPåf`†èŒH$lÛ¶-€åË—?}úTt:””¶lÁºu¢¢,éÑáárxâ„è„H}”KÈ́Ư‹Å‹E'DY3ƒB!ƒ»‚+¢3"ÁTt«Z3†ºP¡B!!!7vss³³³3JƠSfÉ’%¢3¥ŒP·́̃Í›ă“ODçD™±mÖ®•C̃…¤Qôƒ¡ysˆ×A™´ûC®ư9 † ªÂñàAy:¨ØØØóçϋΈ²ÉÑ£¨_ÿ]ÛÁ‡.z₫_}%‡ü )}çΡråwí%øFW5ES©­œ¾‘ ™nU“̃ªW#GÊ!Ç[ê åeâ½{EgCª÷ùç˜2Eỷë"倘­ØùDgDª ¢+ưû÷å˜Y³̃M®Q²$BBDçDÚR~ë//Ñ ‘.˜88uê]èèˆ'ODçDZSV=Đ£#:ΈÔBE…ă!CD§@9éÚ5¹¹sC†àçŸEçDW®œÜ.Q NˆtÇÉ“̣Iÿô)zöÄêƠ¢s"-ÔB-©]VƒÉTz«:88xÿ₫ư›7o¥\™t—²£ÓÂ…Ø¿_tBô£GăÚ59¼sGtB¤k”'ư5ؾ]tBô1Ó0í$NJáSp’JFEW5üưư/^üèÑ#MX«V-kkkOOÏ={4Ȉ=etƯë×ÈŸÿ]ÛË‹}æỚØ1̀%‡ü¬(s”ƒ¬;vDL ,,DçDp'`‚r5¥¦®+3f̀7nœT5Jbbb–,Yâëë+:AÊ2++lÙ"‡üK@ÅêƠ“ÛωΆtY@€ÜÎÇ!*æ©}¼Å@iPQáxíÚµ5kÖhÚ&&&̉vé*ă¦M›Îœ9#:Mʲ¯¾B·nrÈÚQ•”Ë5pp鲦M1`€̣¤W'倘…XX%DgDj¤¢Âqụ̀åIIIÆÆÆ'N,‡QQ¢"ư¢<égÎÄ_‰Nˆ€UXµ;¤b(}**]]]¤Ù‹1))éôéÓJ”`— ư¢,R*U¡ ÆđárÈaÔ”¤uÔ­+:ƒ÷/₫ơ†·²j¤RQáX¾|y§Náááû÷ïßÿ~jè^½zI;X[[sYB=4x0ö́ÁŸ¾ -,+:'C¤ü₫9îî¢"ưƠ£ö́‘'72âåm1”èÇaœrÁ¢QÑG‡¹sçÚÛÛ§ùSkkë™3g:;;‹N“r€r ™ÿ₫C‡¢28vvr»n]Œ%:!̉wÛ¶%›¼qcÑ â(.µ+¢â4LéjÔ¨qàÀ¾}ûº»»çË—€¥¥eÙ²e½½½:Ô AÑ RQ^pđ÷ç¶¹©K¼|)‡¢"Ă#·àÚơ¹ª?úßĂ=)¼ˆ‹¢3"a”¤â;QQQVVV¢³È0WW×àà`ÑYè&åí̉'OP°`v8,,́Cö Üÿ₫‡.]ä07đCQ§\₫\”'ư­[(UJôëW¥́ưPö`O ´BˆÉƒư®W×GIBBÂưû÷¯]»vÿ₫ư„„ÑéPnQNÎáè(:ư÷ê•°ª‘HC9 Wé̉¢³1 ʪ1́SN£¢Á1!!!óçÏ Œ‹‹Ól133kĐ /Nè¿Úµ1f f̀x²Ï|³µ•ÛΆ R… øé'Œû.äIŸÓ”büáosÑ‘Q×ÇÍ›7·jƠêàÁƒRƠ ..nÿ₫ưÍ›7÷÷÷ 弟~‚¹âgî̀1Ê[„ŸlÁ¢Ü4f ¬­åP¹)e/eƠX¥Û¡èŒH÷¨¨p.:¢ä¤5¤€d)+ª¢ªÔ¾‹»¢Ó!Ư¦¢ÂÑĂĂ@hhèÛ·oSü(>>>44\«ÚĐtè€=äµc–)ßÂơë“-C¤aÈ9äIŸuÊ1K±´‰Îˆt› Ç‘#G~úé§C† ù÷_¹ûÅÓ§O}||mÚˆNHƠ”cĐ==1|¸è„ˆ2nÓ¦dÿ’yÏ:}EPDjWFe_øÎˆôà+)œ>}zñâÅ·nƯŒŒüĐ>×y³ÍÀ)û̀ïÜ ??|ÿ½èœÔ¨S'DEÉááĂ¢"ʬÈHù¤?rsç̣¯ ´ơAŸđ×Z£́§¢ÂñôéÓƯºuKâ}ú(eíØ§*Wæp™úöÅ–-rȳṭ¤1eÊ ysÑ9©̀xŒ÷ƒŸr@ åƯª^´h«F̉Ö©Sr»JÑÙ¨KDV¬CU¤®]“Û-ZˆÎFeâ?Ó¥0́ÿM9EEWƒƒƒ5:4õÜœËP:ªWÇØ±øé§w!û̀+88Èí#GDgC”MʖŬY5ê]È“^É fRûwünª¦/w̉3*ú·eiiùêƠ+GGÇüÑØXE—BI¥¦OÇ₫ư8₫]X¤>“xÊaÔ#G¢~}Ñ eŸ‘# ÏfocĂÙ́äè¿Ç÷­ÑZtF¤ÏTTŸU¬X€••«F̉Ö¹srûŸЧè„+YRnk.ÏéåEôÈH|óè„D« ¹‡wa^Y8ÑÇ©¨DëÑ£‡©©é;wÖ­[ÇΤ-å???́Ü):!a† Á;r΅F¤O”'ư¦MذAtBâü€Îă¼>ïºP3RU‰¶nƯºiÓ¦°¶¶.X° ‘̣®Û{»w«}™vWWW©¿&冸x˜Éư{Ó”}0ÂÂÂ\\\D'ƒ₫üMÈ¡Në̉ûEGéÊç¢ü~x₫vv¢ÊIi~(ăï¨!…FË ö»^E}oƯºµlÙ2M;222©‰’15ÅÎhư¾[™™nÔMÙJY5¾~-:¢œwø°<¸½½ôPV¼ÖH¹FE·ª—/_₫üùsÑYnjƠ*Ù4ài]«ÖcÊ—»y3¬¬D'D”óR,†d`'}²1+°¢0 ‹Îˆ …®8=ûnû5jxyyq:ʘ+°g₫y¿jBåÊɆÎè/å÷e·nøúkÑ å–9s€7̃…¥KăÖ-Ñ9å eƠØ­¿WϢܣ¢ÂÑÄĀͪU«LMU”錇å2êüyüđ¦LSΪ][ṇ Ö®Qîº~]>éo߆æÏSk†fRÛ¦¿ăwÑ‘aQÑ­êÊ•+prrbƠH™§́èôăøûoÑ å éÓqü¸†‡‹NˆHåI¿`PNZ‚%{±W ¹B å>ƒ¶³³»uëV```¶|Û¶m;vôđđøâ‹/Æ÷âÅ‹>äÊ•+ôôô¬Zµj×®]ÿÖëD¯(§¯Q#óÇQ·K—0~¼àÈ"‰rđÆEg“cîâî@ ”B£&!TtmoΜ9… zñâÅ÷ß_®\9GGÇ4§ăY²dIF<₫üåË—[ZZV­Zỡ½{₫₫₫·oß^·n……ŇrøđáÁƒ'&&–/_¾T©RÇïÖ­Û²eËH£øHµ Æ̣dàzº0Y¥JrûömÑÙ emM›Đ¹ó»POOz¸@‘ç ¢7© Çưû÷Kí«W¯^½z5[́çççèè¸}ûö‚ ˜6mÚºuëæ̀™3qâÄ4̣êƠ«Ñ£G›®ZµJsựåË]ºt™8qbưúơ¹°ø₫{́Ùƒ?₫x!4TtNÙIù'Ơ‚ÉŒ!2L:aÏy2pư«•b¦`Êçø\tFd ô¿ÚºukbbâĐ¡C5U#€1cÆØØǾƯ»7111͇øûûGFFöíÛWS5¨P¡BÓ¦MĂĂĂ¯\¹"ú‘vv‰9öê%:¡l£¼P̃¸1† ‘:¬_{{9¬SGtBÙ§ê§U¥v Ô˜ˆ‰Y8Q–¨ècÿ₫ưsâ°gΜ166®_¿¾´ÅÄĤnƯº»ví:₫|•*UR?䨱cFFFmÚ´Qnœ5kÖ,.ư«[âă¥KsùÅ̉¥È™c¹©Cü÷Ÿ*.Ó""äëñAA˜1cƈÎ)Ëz¡W„I„ÄIÑ‘ASQá8$®œ$%%…„„ØÛÛÛ+ÿJ—. àÁƒiW¯^µ³³+T¨ĐÙ³g/\¸đ̣åË2eÊ|ùå—éô‰$•JJ’¿F @óæ(VLtN™·z5üư“½8"JAỷ‹fÍP¡‚蜲`;¶¯ÆjùƠq@ ‰¦¢ÂQ)88øîƯ»/^¼hÑ¢…¹¹ytt´M&“`kk›b»æhi.TóöíÛׯ_—,YṛäÉ›6m’¶-ZtÁ‚åÊ•Óæy]]]SlÙ·oŸÈ7Ô€åƯ¹ÓYZ°xñ0í́n̉«×§R&:§¬yø‹¤©‘|.‡›5hPDÓ®X¡¡ºzªügô_Çâ¥04,4 ºúZt———èÔBu…£¿¿ÿâÅ‹=z¤ kƠªemmíééÙ³gÏAƒepU©ØØX–––)¶[YYx¥œÂá½×¯_ yö́Ù̀™3ëׯÿßÿmß¾}É’%C† Ù½{·6× sás•rqA§Nؼù]T¢„^©+QBn/Y—̀K5ôăUè]ÿ\\\Đ«~ươ]X¢„‹nôÉÄüˆuưsÑi©¿ÖS_!2ê3cÆŒqăÆIU£$&&fÉ’%¾¾¾= ­­­‘‘QLLLíQQQxƯ1i©Ă3f´iÓÆÖÖ¶P¡BlÛ¶íÇ÷́Ù#úM¢ŒÛ´éMÅrX¨è„2LùÓØ±zĐW“(g­Z…FäPû)«Æo#¿€ ¢3"TU8^»vmÍ5¶‰b<¬t•qÓ¦MgΜÉĐ1MMMmllR_YŒŒŒ ³V²´´477·°°đôôTnỵ̈Ë/ܼySôûD™ñhÇ9x̣ß}':£ P^e¨PÓ§‹NˆHüù§Ü₫ï?tè :¡Œ¨¹c¦ \|#2|Ư„(‡¨¨p\¾|yRR’±±ñĉÏ“§6µ±±Y¸p¡æBàÚŒ¯Åëèè¡©%̃ai>¤`Á‚fff)n‹kîPÇÇÇ‹~Ÿ(³”7«~ư¿ư&:!­ €»wåđ̉%Ñ éåIïïƠ«3¨Ü4c¯@ú-ºÚ3›ô’ Ç7nhÖ¬Y×®]Sô#l̉¤I½zơ© ~ 6LHHøë¯¿¤-IIIvvvi>ÄÓÓ322̣Ö­[ÊçÏŸP¦LÑïẹk¤}ûdÛ¨R@–.M;}"̉†̣¬éƠ OˆNèc₫Â_30CÎŸĂ¨IeTT8FDDàĂ²K•* <<<£‡íر£±±ñâÅ‹5ưøùù…‡‡·oß̃̀̀L³%:::,,LKضm[&L†]_¹reƠªU666”½fHí̃-·Ußï©ys¹+:"Ư¤¸n =œë¢®Ô~Ơ×¹dxTT8j(¥Ù‹1))éôéÓJ(G–jÇÙÙyäÈ‘¡¡¡­Zµ4iR=æÏŸïîî̃»woiŸÀÀ@//¯¾}ûjB77·aÆ]ºtÉËË«ÿ₫=zôèÔ©ÓÛ·o}}}?ùäÑïeMóæÉ†–dpœ~nR¦¶};̃Ú"¢Œ©]cÇÊ¡OúdbVcuÀÂÁˆr„ Ç̣åË8uêÔàÁƒƒ‚‚4R=₫\”'}ÿ₫X²DtB Đè Ja®zü¡è.ƒư®WÑG‡¹sç¦XPbmm=sæLơW¤3”2ưôĐ;S¦ÈU# ·U#QîSôK—" @tBï-À‚tªF"UQQá FèÛ·¯»»{¾|ùXZZ–-[ÖÛÛûĐ¡C 4 é—ÿ•Ûµk‹ÎÎäIr¨ûDzB¹„rđ™@·qÛ>RȪ‘TNuKZYYùøøøøøˆ̉¬ H”#±j•<¸‘‘đJ­J¹­œ¾‘ˆ²……¶mCÇ÷ë?«à¤Gi”–Ú—qYp6D£®+)°j¤׫W²'BÇ[*Ÿ<Å"Ê.: gO9;ÈZ9 æ'üTåEfC¤ÁW_¾|™Ñ‡¤?(öo‡……<x“&Ø¿?÷³0Uœ‹Íq5j¢ôë¯Ø³OŸ¾ kÖÄÉ“̉ø̣ünµQ{ ƈ~cˆ>NpáX½zơŒ>Ä01QΕ/;üù'ÚµËå œ’ ‚Ù³GôB¤ï<‘OúS§đå—8x0K̀¨ÏđÙs<—¿đWF”{T}«(÷(;:íØ\{æ+’̉̃ăÈ@(ϵC‡p₫|î=ơflV®@Í1¤CX8½§¼àPªTî<çÇx¿bÀª‘(w]¼(·+WÎ¥'}×ÑY Y5’nQ˨j##£Ï>û¬R¥J*TÈŸ?¿ètÈ 5lˆéÓ1nÜ»0WÆ[-*·•Ó7Q.¨X‹càÀwaî ²¶†µÔ₫~ˆ2F-…cRRRHHHHHÈo¿ưV²dÉÏ?ÿ¼R¥JÅ‹’±c±g<¸ƒ>¼”QÖ)‡s₫đªUự‰ Ï€س{÷¾ óäÁÛ·9øtÊaÔC0¤‰~ˆ2Fpáèïïé½»wïHLL¼uëÖ­[·6õ ÀÖÖ¶R¥J"²B… YÁ‰rPP\ĐED [7¬[—ÏS¸°Ü®\¾¾¢_8‘¡ Oú¸8´iƒßÏ‘'*‹²R»$J.ÀÑ/(ĂåÊ•+W®\—.]¼zơệåËRùêƠ+/_¾>>!!áæÍ›¢Ó$Ă üéÔ Í›#û¦£ÿưwụ̈K²§""á”'ư÷ߣys8;gÛÁàÈ̀‘Ÿ‹bHg©wTu₫üù­¬¬¬¬¬̣åËgff&:2<ûöÉí́°ƒ¶må0>^ôË$¢÷”Ó€+;“d]4ÚˆưB‰2OEWoß¾}₫üù‹/^¸pá̃½{©÷áXÊ=M`đ`,\ø.̀¦ñ–––rû?`b"úeÑ{5j`ÂLú.̀®AÖÊ1ë±̃ö¢_(Qæ .###5eâ… ._¾bssọ́åË{¼ggg'6a2,?ÿŒ đüưêåÊáêƠ¬O9ŒºG´l)úQr?₫ˆ p÷î»°hQ”OúsçđĂ˜2åƒ;wB§×x-…‡qXtúDÙŒ·ª‰2H9¶eÄ|`̀¥K ‡qq¢Ó&¢̀Rô?₫ˆ¿ÿN{·ơX¿[äGq@ é#Dwé’ÜvK£÷̉Ư»0@9ŒH×…†Êí5̉Ø!ƯĐM Y5’¾báH”q*$›‚#¢ó%Ê),‰2eäÈdÓ€ÛØHMå7Ê”)ÉŒ!"ƯƠ§O²iÀ•gºrơHŒ¬ú¢“%Ê),‰2ëèQ¹‰o¾àè(o«^'N’ˆ²ÏÎɦoÑJAåYeg!“«’éDY ́½¸iS¯zw>•7œ:%:="Ênññr{Ï4¸2$!̉–k¸&:A¢œ%x:ØØXfff¦¦¦ ÷ïßà¢́ F¤rïµơGûƠÇ>Sn&"½$¯dƯøÏ#åÊÛ9 † €à+µjƠªT©̉† Ño ‘VÆÅ•+r–T\¾ ±`5C£F¢s$¢́ô~:ăR˜d!ô«V¡Y3´k':E¢œ$¸p̀Ÿ?ÿäÉ“5íGyzz¸pá‚è·…èă‚‚0c†¾óê•<xăÆ&C¤O.ặ8Œ“BÍ0êÄD¿¿{×¾=₫ûyóN”(ǨhGssó/¿ụ̈Ë/¿‘VêÔ‘ÛO¼oY[cÓ&ù©&#"U¥ömÜÖ4ŒŒ°{·¼¹¹è,‰r’ G{{û%K–,Y²D&&&>{ö,!!At^DiP„¿₫‚?ëÔ ]»¦½+é,倘XP%¥°ysôë§Ø“'=é/Á·ªS‹^¾|ùÑ£GïƯ»÷æÍ33³âŋ׭[·ÿ₫VVœ́€TAù­Đ¡zöLµÇúơس/^¼ mlđê•謉(ó”Uc#4‚!)vXº¸wï]˜/bb´>:‘îPÑGgΜiܸ±ŸŸß­[·4S<ÆÅÅƯ¾}{ƠªU^^^çÎ 7–Ûضíû=.·##“u‡$"̉”áŸø3ÍƯî̃•Û±±?^t̃D9@E…cTTÔÈ‘#ĂĂĂÓüé³gÏFŒ-:M2h àÀ9üÈåȘ°‰HG¬ÆjøKaúë *OúéÓqü8ˆôŒ G??¿Ç°³³6lØo¿ưvüøñ;vŒ1ÂÖÖÀ£G~ùåÑi’áJ19£V¦•Ó€+§|$"]đO{¡—j³µrđÚµ?º;‘QQÇË—/°°°X·n]é̉¥5Ê–-[¿~ư;ÆÆÆr¦èư¿J¸|Y»Ç”*…ùóåzÓȈôéG8Jí¿đ—6)T«Vá»ï̃…<éIϨèă­[·T«V­´̣ûPªT©Zµjë ’8Ê1?ư„̣åµ~äĐ¡PN2ei)ú¥‘V”bÆ`L²c̉Ơ«W²iÀ9Èô‰ GÍ¿“˜˜ÀÄÄDt‚dˆ́íåv:3&ƒOÑ/²cGÑ/ˆˆ>Â.R»*ü„Ÿ2ôpÿd:6i"úơe®®®Îœ9s%Ơ‚k×®¸gOܼ)úÅQ|á»K¤P›1¢<é‡ Á¡C¢_Q–%©¦×nlll«V­îß¿ÿ¡-ºk×. Ñ™~„««+ûbªMXX˜‹‹KF)¯;,VÇ¡^½l=¢Ë܇B9Ÿ‹²kc,bÍ‘¥5/]B¥Jr˜¹“ ́w½®8ZXX̀›7¯páÂi₫ÔÙÙỹ¼yê¯IŸ(«Æ•+³ăˆuë¢F 9dŸy"•QVS15‹U#€Ñ´©âø<éIÇ©¨pP¾|ù€€€ÁƒW¨P!₫ụ̈çÏ_¡B…AƒíƯ»·§Á£\¤üư>t¨<¹FV<‰råä°D Ñ/”ˆ̃QV=Ñs<²gí—€|ñ…~̣‰è×I”*ÇQĂÜÜ|À€ Åơ©Iˆ²eå¶f*Ǽtå\–†…aĐ ,Z$úºï8ÂñWü ’OúçÏÑ­Ö­ư‚‰2E]WS`ƠHBŒ7äP¹øK¶QvtZ¼ûö‰~ÑDíGüø7₫–Âño¶?…̣¤_¿[¶ˆ~ÍD™¢ê‘(÷9‚¹så0‡¯(^Wö"¢Üuç~ÀR˜•aÔéS₫>éÔ ¯_‹~åDÇ‘(™ ävDDN>S¾|غUÙgH*¨"µĂ–£Ïµ¿Ü¶¶ưʉ2…#‘LY¼­[—lÁ˜ѱ#zôHûé‰(W(Ä,Á’â(£O׸1† Q<;Oz̉5,‰̃Q₫ïÔ ß~›+Ϻz5 Ă5E¿ DÄT1B´ơGÿ\x̉ P²¤*‡â© G" ùj33lÚ”‹Ïưô©Ü>u S§~3ˆ Bk´N@‚îÁ\{êÛ·åö9Rô{A¤5•ÁÁÁû÷ïß¼ysTTT||ü«W¯DgDúlÎ9"‡oßæzÊ>ó'âÂÑo ‘óƒßøC sn@̀‡(Oú9spô¨èw„H;ª›ÇÑßßñâÅ=̉„µjƠ²¶¶öôốÙ³ç AƒŒØ„²[?÷…­*O₫ùç¾!QúÿôA)̀ưªQ#<ïÚ<éI7¨ëăŒ3Æ'U’˜˜˜%K–øúúNô²ƒÑơëậpqI6 8ÿF"Ê1EPDjŸÂ)Qi|̣ Ö®•Cô¤TT8^»vmÍ5¶‰‰‰´]ºÊ¸iÓ¦3gΈN“ộ7ớÙpsÍÀÉ&t̀“Gh6DúI9Œz"&VGuÉt놯¿VäÆÚ‘TOE…ặåË“’’Œ'NœxîÜ9i»ÍÂ… ÍÍͬU₫uF”5ÊIÔê×Lj¢ ·ăâж­è„ˆôJQ•ÚŸăó)˜":#l̃ å*i Nˆ(]**oܸ Y³f]»vµ°°P₫¨I“&ơêƠpóæMÑi’èÜ9Ù² ÊÁ1‚);:ư₫;~ùEtBDz¢ú<ÄC)<‡sY8XvR₫.:|óæ‰NˆèĂTT8FDDpqqIó§¥J•.:M̉ë×cóf9T]ŸteBßT½~‰(£₫À~đ“BQb>Dỷ^$!ƠRQáèêê Í^ŒIII§OŸPBvJ”YÏŸ£[79T]Ơ¨q̣¤Ü.\Xt6Dº- ­ÑZ ß"÷çÜú¸«Wå¶à₫ÖD¦¢Â±|ụ̀N:5xđà   ÍÆ;vlàÀ±,§Ø§,ûä¹}à€èl>¤F L˜ ‡́3O”Êb~Çïf0QÜƯ1k–̣¤'uRQáØ§Oû÷ïÿî»ï4{ơêƠ»w¶¶îß?“ëAmÛ¶­cÇ_|ñŸqă^¼x¡ưc=zT¹r呜Ú_/(/¿P:~üŸ.‡E‹f₫PDL9Œº7z+/=ªÍÈ‘¨WOmmE'D” G‡¹sçÚÛÛ§ùSkkë™3g:;;gâÈóçÏŸ0aÂ;wªV­jeeåïïÿư÷ßÇÆÆj󨤤¤Ñ£GGEE‰~{(”*%·ƯÜ0{¶è„>J1½>Dß¾¢"̉1UPEj;ĂYÙÍQ”Kȼz…o¾Qr**Ô¨QăÀ}ûöuwwÏ—/KK˲eËz{{:t¨r9a­ûùù9::îÛ·ÏÏÏoÿ₫ưƯºu»|ụ̀œ9s´yø5k4wÉI× 99×w†(û`®X?₫Èü¡ˆ ̀$LR₫ÿˆÎH+Ê“~Ó&lÜ(:!"Ơ-9heeåăăăăă **ÊJ9½U¦lƯº511qèĐ¡ Ôl3f̀Î;÷îƯ;~üxcăôJçÛ·oÏŸ?¿L™2œH×ươ—ÅÏ?Ë¡JÄ|ÈÛ·̣dà­[#>̣‰(Măoå4jF¾¤$¹_M×®¸xQ]WyÈ©ôßbppđ₫ưûwï̃ÿêƠ«Lề™3ÆÆÆơë×—¶˜˜˜Ô­[7""âüùóé<0>>~Ô¨QvvvcÆŒư~PVuï^HjGFÎ&£̀̀đûïrhªº¿÷ˆT¨jHíx : ;tHnWªTLt:D郞pô÷÷÷ôôlƠªƠàÁƒ'Môüù󨨨úơë/\¸0)ă—‰’’’BBB́ííSt,]º4€̉ûU²hÑ¢7nüôÓOÖÊFH)Äl̃ŒüùE'” ­[£wï´_¥¢³+”‹Së 0l˜âñ¤'uP×¥‹3f¬^½:ơö˜˜˜%K–<₫|̣äÉ:`LLLBB‚mª‘i666?₫¡^¼xñ—_~éÚµk­Zµ®]»–Ñ¢™“Riß¾}¹óR %JÈSÊ·mU­Ú³°0Ñ9eÎØ±ŸîÚẹï¿èMụ̀t¼¿ădz~Êvzđ¹”p‘güư2æËFO…A'Oû±sg‘;w̃MT¢DÜ¡C:ÿéè(///Ñ)¨… Çk×®­Y³FÓ611IHHĐ´̃ÿµiÓ¦æÍ›W­ZUûcj†N[ZZ¦Ø®é:ù¡;à±±±£F*Z´èđáĂ3÷Z‚ƒƒ½‹”L:rÛÖ¿ưfdµ×¬HK—̣^½ê²f |}Eç”%Z)Ä̉éÏ¥9Km˜Èw:üj"_k 3[´È…  ‘úk=ơ"¡¢[ƠË—/OJJ2668qâ9Å,$666 .477°víÚ ÓÖÖÖÈÈ(&&&ÅvÍô:ë©Íœ9óádzfÍJ±d6é–3đ~"yÈÈÜ*¦́°1e 8äŸHa)– @ ă/:£l <éçÏÇÁƒ¢"æ¢ÂñÆ5kÖµk×[“&MêƠ« ££›MMMmllR_YŒŒŒ ³V:}úô¦M›úôéS±bEÑo ẽ•+;VCCụFUÚîß—ÛƠ«‹Î†H-îá̃ BƯF¾K—îIíFDgC†ME…cDD>|‹¤T©RÂĂĂ3zXGGLjˆˆÈä#iĂÂÂ4?J½ÿíÛ·,]ºÔơ½víÚøă?\]][´h!ú}"­T¨ ·oƯMö*ZË–É!û̀£¸Ô>‹³¢ÓÉNùó'*gsäIO©¨£««ë… Μ9“úGIIIY¸K”(‘ÑĂ6lØ088ø¯¿₫j̃¼¹t´ÀÀ@;;;Ôû+VLÚSăƠ«WAAAÎÎÎ… ̉æII,åoƠùóQªtu@̀‡ôí‹={°{÷»Đ؉‰¢s"I9ŒÚ¾•QYtFÙ́›o Ond¤kóÑ’¾PQáX¾|ù .œ:ujđàÁ_}ơ•făƒî̃½»eËMáX¶lÙŒ¶cÇË—/_¼xq½zơ4cbüüüÂĂĂ½½½Í̀̃ U‹~úô©™™Y‘"Ej×®]»vmå®]»T¥J•Ù:°DA9êË/1t¨è„rÈ®]06~÷Ơ‘”„–-±k—蜈Äp‚“Ô®†j?àÑåˆ °g^¾|Ö«‡À@Ñ9‘áQQáØ§OŸ€€€đđđưû÷ïß¿_³±W¯^̉ÖÖÖưû÷ÏèaG9sæ̀V­ZƠ©Sç̃½{§Nrwwï­˜/00ĐÇǧT©R»¥K8¤›…r(Ô¢ÊQ‰‰̣ÅƠƯ»ñƯwXµJtND¹Í®ÿâ_)ü‹Î(½x!ŸôÇ¡E đ[‹r™ú8:88̀;7ÅLƯkkë™3g:;;gâȽzơ3g‹‹K@@ÀóçÏ»víºnƯºÔ“;’®[»Êè â>̣E₫ú+ẹ̀̃DYñ~»¹³> ˆùåI¿g®^£L,Ç’£¢¢¢~ùå—¿₫ú+,,,&&Æ̉̉²X±bµjƠêÓ§®¬àâêêÊys_x8 Ăÿ®ĂÂÂtzjºô¬^ Å…yª—ơùCÑe:ô¹¼Ás˜KaŒƠt5$¥øPöíCÓ¦̣Ouç¤×+û]¯¢[ƠVVV>>>>>>¢¢¢4½‰>JY5V¿Ÿ=qï<8û̀“ÁPV»±[_«ÆÔ¼¼0o¼ !OzÊM**₫ùgM£]»vE‹Åûơ]ˆ>J9ŒzÔ(Ô­+:¡\6y2ö́ÁÙ÷ó.Œ₫QÎR£î‡~Êc ö́Á¡CïB++DE‰Î‰ ƒ₫>ó÷÷_ºté̉¥KÓYB(µÏ>“ÛåÊaæLÑ ¡œÇêÑ#(Æ~éŸJ¨$µ‹¡ØR,‘Ê%d¢£ñ~2¢œ¥¢Â±}ûöÆ}åÂDé4¡¡rxåè„R̃¬Z¹¿ÿ.:!¢1ă/á’̃Å]Ñ £<é·mCå%Ê lÛ¶-€åË—?}úTt:¤öíĂâÅrÈ^>HHÛmÛâí[Ñ e³ă8>Ó¥Đ†Q§Où{¯G<{&:!̉w*êă8xđ`…  iܸ±›››Qª••–,Y":SR å¸ÂèhÑÙ¨±1₫ø­Z½ óæe5Mz¦6äă±ètT!0ơê½k,È“r– ǃ₫±±±çÏŸ©̣o­[‘/Ÿè„T¢eKôí‹åËß…oIzD9 fV×€€ºu1z´Ü½›'=å(Ưª&̉²jǘ3t́(:!UY¶ &&røùç¢"ÊʪÑνĐ+ Ó73fÀ\›(ÙA¢́¥¢+™XN S­Zr»@„„ˆNH…âăåâúÂL˜€©SEçD”yMĐDjçẼÀ §R•OúĐP Œ… EçDúHE…ă!CD§@:`êTœ<)‡FơAIỊ×È´ih̃5kΉ(3báŸøS ÿĂ¢3R)åI¿h5ƒ——èœHïđV5é’ 0q¢²ÏGiƯºuß¾};tèP¤HÍÆêƠ«÷îƯ»M›6 đ̣å˵\_É0´m‹¸89Ü»WtB:ç͹}ú4-ÑGô@p„Káq‘Q.!sé¦OÏü¡ˆ”TT8~ûí·W¯^бcÇÇÏ5ËÇÇgÚ´i₫ù§··7€+W®´lÙræ̀™₫ùg5‰ÎrÜ/¿$[u™÷\2IùÆ ̀.¢¤f[±u-äë“9Ê“~üx\º”ùCITT8.X°àÁƒ œ2e¹b&S“#F-Z4&&fñâẠ̊åË7jÔ(ÿüĂ©¼ôÜ£Gø₫{9dƠ˜%ÊƠ˜8A0©U4¢¿Æ×RȪ1+”ÓỤ̈†5e 'OP¸pacă”Y9;;¸ô₫/¦üùóxñâ…è¬)g.,·•Ó7Rfxx$›<ƠBđDj`+©½ûD§£Û>û Ê Kx̉SÖ©¨pŒpơêƠëׯ§øQhhèåË—$½¿â´oß>Τ¯”¿ă&L@¢̉ăÇ'›¼`AÑ %£F=ƒ” ÆPæ Œ&wQ¹2!Q&¨¨p¬Zµ*€¸¸¸nƯº-X°à́Ù³÷ïß¿té’ŸŸ_—.]bccTªT €¯¯ïܹs-ZTtÖ”S”Ÿ­‡~üQtBzăÄ ¹ứzöÑ;åPNj—@‰…à’yÙcŸâºí›7h×NtB¤ËT4ă¨Q£Î;÷âŋׯ_/[¶lÙ²e)s55íÖ­€ ̃ÍÛ¶m[ÑYSèÛÊ¡²oeåÂdkÖ Y3t́(:'2t£1ú®IáÜ‘^Qô;v`Ơ*|÷èœH7©èc±bÅ–-[Vđ÷Î̀̀̀&O¬¹*©Q¹råf͉β߮]X±B9 &G(ßÖ¯¾Âë×¢"ƒˆÀY˜%…“”'½·7<é&<<<<8v́ØJ•*ÙØØÈ›7ïgŸ}Ö¹sç?ÿü³ăû‹"åË—8p௿₫ÊUơOBZµ’Ă·oE'¤Çä¶µµèlÈ ƠG}©ư Ï2 J×qÅl˜Ÿ~*:̉M*ºU­‘7õ=zôèÑ@TT”¥¥¥Qªa`?²¿›₫2Uü“ܱff¢̉cM›bÀ,Ỵ.äÂd$ˆr@̀Z¬u€CFé©U ăÆÉ“ó¤§LP×GIppđ₫ưûwï̃ÿêƠ+ÑQnP₫Đ»7Ú´̃[¼8Ùß*ˆNˆ ²jü _uC7Ñé¹iÓ’MèX¬˜è„Hר®pô÷÷÷ôôlƠªƠàÁƒ'Môüù󨨨úơë/\¸0‰é5EÿU8;ĂÏOtBB¹„̀•+3FtBd@¢¡Ô¶„ål‘Ax?¾îßG¿~¢"¢®ÂqÆŒăÆ{ôèQí111K–,ñơơ å”É“qö¬rI \¥ü“læLüơ—è„È ̀Ă¼Ă8,…Qˆ‘QôË—c÷nÑ ‘îPQáxíÚµ5kÖhÚ&&&̉v©ă¦M›Îœ9#:MÊ~gÎ@ùG¯, đô©Ü®[Wt6¤ÿ‚<Ă¥Ă¨sß›7r»eK₫â%m©¨p\¾|yRR’±±ñĉÏ;'m·±±Y¸p¡fơêµk×f₫ H­ªU“Û÷ï‹ÎÆ0(€Ơ«å “Q+ƒ2Rû*®NÇåɃß~“Cc•¤j*ú—răÆ Í5ëÚµ«………̣GM4©W¯€›7oN“²™²DY¶ \ H˜=Đ¡ƒ²v¤£33Ưá.:#Ơ¶m²iÀỷ“6TT8FDDpQñT(Uª€đđpÑiRvR₫jÑ}ûNÈÀmÛ†|ùä°reÑ ‘Êy₫Ưz¨7 £DgdĐV®„““–(!:!R=®®®̉́Ř””túôi%øZ´l)·Œ°k—è„@t´Ü>óç‹NˆôÊ7ø&qRxGEgDPG ‡¡RúTT8–/_À©S§¤ÙøàÁƒcÇ 8PS8–-[Vt”=RŒăKLI”ä‡ Ă­[¢"=±7a“r@Œz(OúÉ“Áa¨”#ơL̃ºuëtnF[[[ïܹÓÙÙYt¦áêê,: U»?Ù¬³¹đo0,,́C½ ( W¯¢|y9̀™Oˆ:åĐç̣/í`'…¬3$N–Üÿµ¬ë ö»^EWæÎkooŸæO­­­gΜ©₫ª‘´¡üơtú´èl(µrå0c†²ÏưK—Ê!OzújÔ¨qàÀ¾}ûº»»çË—€¥¥eÙ²e½½½:Ô AÑ R6P₫><9Ù‚1¤"£G£N9´³Ëü¡Èà)‡Qðà/s5ê×͛ˡb>e"™©èR²²²̣ñññññeee%:#ÊNÊKÆU«b̉$Ñ Q:“Ëü—/ѵ+6léW¸Jí2(3sEgD´{7ŒßƯ§NLD«VøăÑ9‘ʨëc ¬ơŒ·7?–C̃¤ÖÊN7âÿéøÜ‚<¾ênˆÎˆ>B9Tq×.¬X!:!R]qŒ=wîÜåË—Ÿ={¦¹ÖèààP¡B…Ï?ÿÜ̉̉Rtv”US¦`Ơ*9dÏk‘”$_ẃ̉ĂÁAtN¤–aÙ,BˆÑÊ“¾o_Ô«‡2e²t@̉'ª(ß¾}»iÓ¦åË—?₫<ơO-,,Ú´i3dÈ;ö²̉Yõ$»+ÍÉwt̀Áƒø̣ËwíXơ“–ú£¿Ô~…W¢Ó¡ øûoT¯₫®íæÆ“dâoU_¼x±Q£FÓ§OO³j»iÓ¦fÍ]¼xQt²”Iæærû‡8^O×4lˆÏ?—C~~¤倘h kÑQT«†ºuå'=IÏŸ?ïƯ»÷¿ÿ₫+m133svv.[¶¬³³³™™™rÏï¿ÿ₫Å‹b¦LP₫Æé×Ëè¦sçPº´̣Æ¥KY5vA—EX$:#ʰÀ@T©"‡… ‹NˆÔApá¸~ưúÈÈHM»Q£Fëׯ¿råÊ‘#Gv́ØqäÈ‘«W¯₫ïÿk̉¤‰f‡W¯^­[·Nl”Qr;Å^n·m‹¸8Ñ ‘P‚ Çׯ_°··wrrJg7‡ ˆ›0iï‹/ä¶rúF̉m¶¶É¦gŸyR(y‰ó›¸):Ê&&ɦÏ“GtB$”àÂ1!!€……ÅG÷Ô¬@¨ÙŸÔOYN¬\‰B…D'DÙ¨K|ó²v$ÉÄ̀Ă<å‚1¤ëZ¶DŸ>rÈ“̃‰Ÿ‡ộwJ»vøî;Ñ Q¶Û¸66rX¯è„H0+È }5DCøˆÎˆ²Ụ̀å(ZT•3t‘AQÅàõ¼9ỵdúûÄÆÆN“´âå•,ô÷å—/å?ìY5JtN$Æ×ø:ÑRxEgD9â₫}ù¤¿p'âÇEçD¹N…cxxx=DgAÙ`áB́ß/‡£ç” “æÍáî.:'Êmk±v+¶J!Äè7åI?u*5CÍ¢s¢ÜÅ[Ơ”mîÜÁûáï«Fqă†Ü.WNt6”ÛẪ=¤U£!øç¹]«–èl(×±p¤lS²¤Üæ̣†¢L̀+‡́3o`  €ÔD èt(78;ă—_ä'½¡|«z÷îƯ¢ßÊÊßÓ¦¡bEÑ Q®6 {öÈ“çÏׯEçD¹A9ŒzF)Œ!ưæí={äÉÀŒx‹É€.K•*%ú làà ·¿øăƉNˆrÙ¡C̣ŸQQèÔ ›7‹Î‰rÖgøLj—C¹™˜):#ÊU;v Oy2đ¦M±w¯èœ(WđV5eU“&ˆˆC® i ”¶lgcÑg­Ñ:¡RxWDgD¼}+·÷íăJÖ†‚…#eÉ–-øóO9äƯ ƒ¦üø,Hö÷é‘}Ø÷ä…D8 Æ¥XÉ:44ó‡"]Á‘2OsORª‘päˆÜVö` =̉M¥v¸ ¬¡;^nöYæCº‚…#e^₫ür{ß>ÑÙÔ¯‘#åă-ơr@̀Vlµ„¥èŒH0L*‡<éơ GÊ$åo‡ÁƒÑ¤‰è„H%fÍBÙ²r¨œ¥‰tœ²j́îÑQtF¤ ăÇ'›¼`AÑ QNbáH™¡œéù³ÏđóÏ¢"U¹vMn§˜tV-Ès=@5X#:#R‘'äö³gàbpzŒ…#eØèÑÉ ƒÑ ‘ ){¼.\˜lé i˜v'¥đ)ΈTGỷ¯]‹mÛD'D9ƒ…#eL` fÍ’Cˆ¡RNή º́.LÀ)ä0júå7ÂW_!:ZtB”X8RÆÔ¯/·Ÿ= ©™•U²iÀÙg^g}Ï¥öÜ©rp++ÑÙP`áH üê_³†Ó­ĐÇ|ư5ºu“CÖ:H9 f•@ Ñ‘ªyyaĐ 9äI¯X8’¶”çÇè̃]tB¤Ö®Å'ŸÈaíÚ¢¢ ȃb%V₫ߥb(£”'ừ™8vLtB”M ¢pœ?₫„ îܹSµjU+++ÿï¿ÿ>66öCûÇÇÇ÷èÑă§Ÿ~zúôiÍ5K–,ù÷ß÷êƠkÉ’%¢_ÁÁ>\9Œ2I9oS¥J¢³¡ô<£̃è-…¬)s*fmªWOt6”Mô¿p öóósttÜ·oŸŸŸß₫ưû»uëvụ̀å9sæ|è![·n½xñbåÊ•—-[¶zơê;vØÚÚ.zál-.8IDATY²äÆ¢_Pn+SFn_½*:̉])fgŸy+ŒÂRûNdáHdĐ ÀêƠrÈ“^?èá¸uëÖÄÄÄ¡C‡|¿ ̉˜1clllöîƯ›˜˜˜æCöíÛ`üøñ-¥J•êÛ·oBB‚¡Ư°Vç3gÂƯ]tB¤Ó’¯MY\ùG ©F y\ĂL¨‰Y8º=Đ¡ƒ²vÔú_89sÆØØ¸¾búA“ºuëFDDœ?>͇„……YZZº'¯’J•*àÁƒ¢_Pî±µ•ÛuëbÔ(Ñ ‘Ø·Oj½}‹öíE'DÉ|O¥¶<~Ä¢3"·ṃå“ĂFD'DY£ç…cRRRHHˆ½½½½½½r{é̉¥ñá*pÅ›•®]» hÑ¢¢_S.iÚ¯^Éa` è„Ho(ûÉ₫öV­½ó ¾yù·âyœÏÂÁˆdÊ%dÄ‚¢¢,0@Ή‰IHH°U^:ØØØx₫üy*[¶l-§ṆóóË›7o›6m´y^WW×[ö).´¨ßÎVûöÂĐа°0Ñ9eÍÇE§@ ¡¡.̉—|Y8e?=ø æï/wNiĐ ˆnô©¿ÖS_!2z~«ÚÖÖÖÈÈ(&&&Åö¨¨(¼¿î˜¿ÿ₫»eË–Ó¦MsppXµjU³fÍD¿ Ü`g'·•Ó7e§>}^öï/‡́3/” L¤ọ̈'ËóU#e¿víđÓOrÈ“^Géyáhjjjcc“úÊbdd$iœujoß¾6mZ÷îƯ=z4hĐ ½{÷ÖªUKô«É Ê3yØ04h :!̉_/FŒH6¡c±b¢32PÊƠ¨½áƯ8¦±èŒHoƒ:uä0ùè̉ z^8pttŒˆˆĐTM—=GGÇ4’˜˜8|øđuëÖ5lØđÏ?ÿ8p 4/~S^wwuÅܹ¢"½wá‚ܾÊk”+ª¢ªÔv‚Ó/øEtF¤ç”Kȼx®]E'D¤ÿ…cÆ ₫úë/iKRRR`` ‡‡GY¿~ưŸ₫ùÍ7ß,Y²$«’zfØ0ܺ%‡7oNˆ „²£Ó²eؽ[tBd2&ŸÅY)|„G¢3"ƒ <é7nĦM™?å>ư/;v́hll¼xñâ¨÷K,ûùù…‡‡·oß̃̀̀L³%:::,,L3l-))iÆ ùóç=z´èÜsÏ¡C˜?_u«Ï2é¼ÿ₫“Û-[̣ß_î8ƒ3¾đ•B®+H¹Iy–ó ’ß$UÓóQƠœG9sæ̀V­ZƠ©Sç̃½{§NrwwïƯ[BèăăSªT©Ư»w?{ö́₫ưû]ºtI}´¶mÛvƠÇ ë_~)·_¾ ¼yñÛoh×î]hl̀Ú1TC5©}÷D§CçÀy2pô:Cÿ G½zơ*P Àï¿ÿàääÔµkסC‡jfäIMsƯ166öjZ 3ëå倘ñ±±æD9 m[|÷<¸‘¿Fr”r@̀2,S.C”;¾üC‡Ê“ó¤×FIü ²›«««Í㨬‹‡®Oôư!aaaz0 IăC11´‚|Ơª8}ZtúÉ&‰x÷>;Âñ_ü«ü)Ỏă%o^¼}û®]¦ nÜÖtë»>éGJGƯºrÛÖVo«F̉ rû̀øúf₫Pô-ÑRª`”¢j$ÊeõÈí›71|¸è„ècX8®™3¡k/D'D„ä}æ'OÆÙ³™?¥²ËwC·.UD)Oúyópø°è„(], ÔƠ«3FÙaTäî]¹]µj¦C)<Àƒ~è'…FM꡼rѰ¡èl(], Tụ̀rÛ ;i+†¥Kå “eå˜Ó`ÿQR[[lØ ‡<éƠŒ…£!R“óæ¡tiÑ ¥Đ¯7—CSƒ˜ÿ!G)‡QOÂ$å‚1DjĐ¥ :w–CÖªÅÂÑà+>ó/¿„脈̉¤\B&!NN¢̉a&0‘ÚUQu2&‹Îˆ( ÿû_²ùà́́D'DiaáhX:vLÖñÀÑ ¥Cùơß±b…è„t’7¼•ƒ`x“ÔL¹ÅË—˜5KtB” G²f ¶o—Cˆ! ügÚ·/>Ù«°J 9 †ÔOỷk×D'Dɱp4Ï¡gO9dƠH:ăï¿åvÑ¢¢³Ñ%oñ¶ÚI!'ß!]qó¦Ü.WNt6” GCQ° Ü  ‘öªUĂ?È!û̀k-/̣Jí]Ø¥C¤f®®˜;Wỷ« Gƒ <ëFN¶` ‘đơEåÊrX¸°è„t€²Ĺ‹¾-ĐBtFD0l4C++Ñ Ñ{,ơßgŸÉírå0c†è„ˆ2A¹„̀£Gø₫{Ñ ©<¤ö§øt–‰Îˆ(Ă’ÛÑÑøúkÑ zođ`„†Êá•+¢"Ê4eÏÜ_~Áï¿‹NH¥ÆcüE\”Â{¸':#¢LRô[·bƯ:Ñ  Gư6{6-’Cˆ!/·Û¶ELŒè„Tçü2Ó¥Ă¨I×)¿¹ºwÇ­[¢2x,ơÙ¨Qr;*Jt6DYgb‚?₫CKKÑ ©Î÷oâ?ÆcÑéeƒ£Gå¶««èl  G½¥³e ¿aI_´l‰>}äă-”bVbe!Q6¨W/Ùuôb±pÔOÊóª{w|ơ•脈²Ṇ̃å(RD?ÿ\tBª ¬Û¢íwøNtFDÙfæL¸»ËaÉ’¢2`,ơĐ_Èm¬Y#:!¢l÷àܾp'NH0/xIí<Èó~Q6»zUnß¹ƒ!CD'd¨X8ê›iÓpâ„>{&:!¢¢́3?u*N0‹°h?öKá¼QPô bÿ₫̀2…£^¹x&È!‡Q“ûç¹]³¦èlÄEè` –B£&ưöúµÜọ̈Êüq(ÓX8êỷ_ܹ#:¢œǽ ??94È>óŸAâÿ<΋N‡(gYYaóf94È“^0úCy₫,\ˆ%D'D” z÷F›6rh`_#Ê1S1U¹` ‘¾úúk|û­ØI/ G=‘7¯Üọ̈ A¢"Ê5;vÀ̀L›6P.)ˆ‚R»&jÇxÑå’uëđÉ'rX»¶è„ G}Đ®̃¾•Ă½{E'D”Ë”'À¾}X¼XtB9®'z>ƒ<öíNdá`Dº'<\n?Ÿ~Á`á¨óV­ÂrÈ1d ”ÿô BX˜è„rĐ6l[ƒ5̣Kç€2HÊ“~Ü8\¾,:!ĂÀÂQ·=~ oo9dƠHí¼bhˆ₫ṿÀWçôgƠH†́öm¹]±¢èl  GƯǽ,· ‘XøñG9ÔÓ>ó–× @€ètˆD*Y È¡ôêÂÂQ‡)ÏqăP«–脈„›05jÈ¡££è„²™rơ@ l C Dô!C† Q#9´°¾cᨫ“Û•*aÚ4Ñ ©ÄÉ“rûéSố):¡lS¤¶ \a‘茈TáÏ?åöÿ¡CÑ é5:©Ü¿/‡.ˆNˆHU”½}׬Áöí¢Êc1ö ®Ha(BEgD¤"Ê“̃ß«W‹NH±pÔ=»wcÙ29䀢4(OŒ+:¡, BĐ ̀_Ä¥¢<é{ơÂÓ§¢̉S,uLRZ¶”Ăÿ₫‘j(äË':›,©ƒ:Rû ˆN‡H¥₫úKnë]gµ`á¨cŒŸØÈ‘ÉŒ!¢d6E¹S î·Tˆé…^ÊcˆH©víd£ătö¤W5ºDyôê…Y³D'D¤r—.¡xq9ÔÁỹ”UctX…U¢3"Rµ“'“ưÁèâ":!½ĂÂQgT¯.·±_DÚP.!sù2ÆP4‚<ˈ,¶a›èŒˆtÀ¥Krûî] (:!ưÂÂQ7L™‚Ó§åđßE'D¤C”}æg̀@Pè„´² â Æ FtFD:Cỷ/Y’¬Ă3e Gpî&M’C£&Ê0å[uêd₫8¹å6nûÀG 9Œ(£bj5o.:=ÂÂQT©"·ï̃ ‘.JѽCơ}æK£´Ô¾ŒË¢Ó!̉=ɦpUưI¯3X8ª̣ßú’%ÉŒ!¢ èƠ íÚÉ¡¿F”b~ÂOåQ^tFD:©}ûdKG©ø¤×%,UÍ̀Ln7k†₫ưE'D¤Óüưan.‡MˆN( ö°—ÚuPg ƈΈH‡ưúk² •“ơPæ°pT¯Ö­/‡{öˆNˆH(—ùóO,\(:¡dº¢ë ¼Âc8&:#"§́áü÷ßøñGÑ é8*åç‡?₫Cˆ!Ê6ÊÓiÈ„„ˆNèMØ´å49 †(›(Oú~À¹s¢̉e,ƠèáCôé#‡¬‰²ÙÅ‹r»T)ÑÙ@$"¿Á7RȪ‘({)gtU9¥Œbá¨FE‹ÊíS§DgC¤*VÄôér¨‚>ó6°‘Úp@t:Dú¦xq,Y"‡*8éu GƠQ₫k₫á‡d ÆQ¶;_|!‡Ÿ|"0å0ê¡ú%¾˜ ‘¾êßÍÉ¡©©è„t Gu)RDnW® __Ñ é1å2ÏŸ£[7!Y¸ÁMj—Féù˜/ú}!̉[Êa¦ hƯZtB:ˆ…£¸¹áŸäđ́YÑ é=eâơë1th.?T¹‰›RŒ`Ñï‘Sôü®]E'¤kX8ªÅθ)}p@ QnQl?ÿŒ×¯sí™ăđ9ÈĂ;9 †(w(Oúñđ¡è„t GUˆ‹C›6r¨œ¾‘ˆrœ¿¿Ü¶¶Îµ§mˆ†R[9}#å´c9R•Ré£X8ªBơ#X8 S³¦ÜVNßHD"ÙÛcƯ:9̀Ö>óîp—Ú×q]ôK%"05Åï¿Ë¡™™è„Ô…£Ê/#??8;‹Nˆˆ$ß~‹Nä0›jG倘٘­\0†ˆÄjƯ½{Ë!Y§ƒ…£Ê‘)₫±‘*lÚ„|ùä°Aƒ,Ị̈ôơQFˆ~…D”ŒŸå°JÑ © Çܦ\aỪ,Ùåq"R‘èh¹}äæ̀Éô‘:£ókÈ ̉Áѯˆ̉đï¿rûÜ9L$:!Ubᘫ/Æ̃½røö­è„ˆ(Ê1k#GâÆLc=ÖoÆfùC¤bÊ“~Êüư·è„Ô‡…cî Ă ArÈaÔD:àÚ5¹ñYÁŸăy7t“BVDê§œ¯F ÑÙ¨ ÇÜS¢„ÜVNßHDêU¶,fÍ’Ă ö™ÿŸHm̃¡&̉ E`Å 9ä@™X8æ忼„‡‡è„ˆHK#G¢~}9´±Ṇ̃qÊaÔ#0¢>êkù@"ëûï“-ÿËÚQ‰…cn(XPnר D'DDrDq±02ß|óÑG”B)©]egc¶è×@D°s'LLä°ysÑ © Ç׳'=“Ă“'E'DD™ ́•¼i6nLgß¡‚)¼†k "]£\B& K—NHX8æ¬mÛ°fr@ ‘SÀ]»âÅ‹4÷ú₫ŒŸåq@ ‘ÎRôàî]Ñ © ǃ¯¾’CVD:ïÿ“Ûööiî̉M¤ö<1eÉ=rÛÅEt6*ÀÂñƒ¶mÛÖ±cG/¾øbܸq/>pu!––r; @ôë!¢¬ëÜÇËaª>óÊ1›±¹ jw\"R©fÍ0er  Ç´ÍŸ?„ wîÜ©Zµª•••¿¿ÿ÷ß«ư”ÿ¶ @Ó¦¢_e‹9sP¦ŒººJMeƠø-¾ư_‹Î•ˆ²Áĉ¨^] P,Ó́çççèè¸oß>??¿ưû÷wëÖị́åËs´^s¬B¹]¼8/ư’ˆ()—¹u >>j£¶´Íöë°Nt–D”mN’ÛO W/Ñ ‰ĂÂ1 [·nMLL:thÁ÷óèŒ3ÆÆÆfï̃½‰‰‰}xxøđ+Wä0,Lôë!¢l§́³¼`ÁO!ßÇqiC"DçGDÙLỷ¯^¨¨&™?–.3JâTZµjuûöíăÇÛ+:¿1b×®]7n¬R¥J: B[ßI¡ôGI0‚]áªÜó9Û#eçú )¯[¤³ñ<ÎÏ•[̃àM^äÍôÓܘˆDăä]ü¿«£z¦ø¯ó#¿rËU\-‡r™>àà?ø§0 +·ÜÇưOñi¦x·•“/G¸>øØ¸8¬_à¹=~o#ïôƯûÓ₫âETJ₫ccaa”G BíÚZmK¶åéS,˜ù^¾œ́!€¨(XY¥óX£_WI›ccanCĂÂ1¥¤¤$www;;»ăÇ+·ûùùÍ;wÆŒmÛ¶MçáFF@’Áw%2T·K¡dHÖCD*€fÍ!´6À·ªS‰‰IHH°Mơ·¦ €çÏŸ§ÿpü7DD?aƠH¤ç! ?̃Mn˜ßø,S̉ ¶TN¥°²²đêƠ+Ñ ‘y¯Äà…¢“ ¢œ·ÆcZ ôî¢iÖ¡glmmŒŒbbbRlÂûëé+íZ:88Xôë dÂÂÂ\8s«ÊèÛ‡â x‹Î!;èÛç¢ø¡¨ÍTÀƠua~ÓócJ¦¦¦666©¯,FFF(XÓù‘bá˜GGLjˆM¥( ÓüHtvDDDDb°pLCÆ ₫úë/iKRRR`` ‡‡‡è́ˆˆˆˆÄ`ᘆ;/^¼XÓ¯€ŸŸ_xxxûöíÍROÄEDDDd88& ÎÎÎ#Gœ9sf«V­êÔ©sï̃½S§N¹»»÷îƯ[tjDDDD°pL[¯^½ (đûï¿899uíÚuèĐ¡V©g“'"""2,?¨eË–-[¶‘Z°#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#i……#///Ñ)PJüPÔ‰Ÿ‹ ñC!ơ`áHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZ1JJJƒ¾quuå¬àà`Ñ)À‘ˆˆˆˆ´Â[ƠDDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤ÙfÛ¶m;vôđđøâ‹/Æ÷âÅ Ñ–ØØØ5kÖ´hÑ¢R¥JuêÔùî»ï?z7~L¢˜?₫¬Y³¢¢¢ªV­{̣äÉÓ§O·lÙ̉̀̀Ltj!>>¾[·nÛ·oOHH¨V­µµơéÓ§ẃØall\­Z5i7~L¢$%% 0 ,,̀ƠƠµqăÆÊñCÉ}‡ööö -Q¢DñâÅOŸ>íïïïîîîââ"íĂÏ%7%$$tëÖÍßßß̀̀¬jƠªfffÇÛ²eKµjƠ .,íÆ%w,\¸đÊ•+;v,T¨PióèÿÇ”DYvóæÍ2eÊÔ©SçÉ“'-S§N-]ºô”)SD§f(6nÜXºtéÎ;ÇÄÄh¶Üºu«Zµjnnnׯ_×láÇ$Đ¯¿₫Zºté̉¥K1B¹Jî{ụ̀e•*U*V¬xö́YÍ–K—.•+W®V­Z -ü\r™æ7Ø!Câââ4[Nœ8áææÖ¸qci~(9íƠ«WgΜùá‡4¿¬.^¼˜bm>Cø˜x«:lƯº511qèĐ¡ Ôl3fŒÍ̃½{EggöíÛ`üøñ-¥J•êÛ·oBB‚tĂ“(·oß?~™2eRÿˆJîó÷÷ŒŒ́Û·oåÊ•5[*T¨Đ´iÓđđđ+W®h¶đsÉeçÏŸĐ½{wSSSÍ–5kº¹¹Ư½{÷ùóç-üPrZË–-»té²yóæí ÍG` Çlpæ̀ccăúơëK[LLLêÖ­¡ùu@9-,,̀̉̉̉ƯƯ]¹±T©R|رcG͉Ă%Ô®]»aÆ 6Tö+•hóÈÇd*:“`kk›b» ’ÿI9§lÙ²)¶œ:uÊÏÏ/õ¼++ü˜„¸xñâ/¿ü̉µk×Zµjiêx%~(¹ïíÛ·¯_¿.Y²ääÉ“7mÚ$m/Z´è‚ Ê•+~."¸ºº®_¿¾G=zô6víÚuܸq6?á´ù äcâǬ̉ü¥nii™b»••€W¯^‰NĐà$$$¬[·ÎÛÛ;&&fÆŒàÇ$Blĺ¨Q£-:|øđí~(¹ëơë×BBBfΜù÷ß₫¿½{jêxû¾T‚-BµÂ )"A(ƠTê+j¸£ĐRDñÖQKÅ*öbÑ*ÅDG¨€µèØNñ2Œ`qP¨ â%ŪS/¤ Iµ!ï;=“_ô€xù~₫Ú³gsÎæ<¶ó°{vS×ÜÜüÉ'ŸĐˆ .ú§P(’““?~́ââéççÇår ÊÊÊhÅàØ„à% FŸ–……‡Ăiooתokk#ÿ₫zóÛo¿}ươ× ăÆÛ±cóª ¤)))wï̃ÍËËcV,iAPôÏÔÔ”’““½½½iyÍ5R©4??ÿøñăááላ₫}₫ùç—.]Ú¸qă²eËhT*ŒŒ\¿~ư±cḈííƒc‚—$Lq|Z&&&<O÷/ …BAaÖUÁpS*•IIIK–,‘J¥qqqÅÅÅ/8#LzVUU•——·jƠ*f½….EÿFmjjÊårE"‘f½¯¯/!¤®® .z×̉̉R^^îààÀd„›ØØØ®®®£GåÀ&/I˜8±cÇÊårú/ƒÑØØHOºw/… 68pÀÇǧ¤¤dÍ5º£\“>ѽÈÊÊük₫üù„cÇ ‚àà`Ú AÑ¿1cÆŒ1‚ĂáhV̉ÿ^º»»é!â¢Or¹œÂçóµêííí !­­­ôA186!x„Äqøøø¨TªÊÊJ¦F­VWTTXZZ …BC÷î¥đă?–””,\¸033³¯¿ê&}0a¼ÿ5sæLBˆÍ¼yófÍE›!(ú'‰ Å74+éF!̀^›ˆ‹>ñù|ccc‰D¢V«5ëëëë !ôA186!x)ÂdèÈ_ÍÍÍNNN=¢5ûöísttLMM5t×^ ===¾¾¾Ó¦Mëèèè§ÂdX555º¿ƒ èßµk×#""är9­¹zơªP(œ>}ºL&£5ˆ‹­ZµÊÑÑqÏ=̀÷ܸqĂÓÓó­·̃úóÏ?i ‚¢7›6mêơ—cØ„àeGư¿âÀàää䤤¤ØÚÚzyyƯºuK,;;;çääè.ˇ!×̉̉âååÅår'Nœ¨{öƒ>X´h-#LT[[;₫ü÷̃{oçÎơ₫}ûí·»wïæñxnnnííí/^äp8;wî bÚ .ú$“ÉÂĂĂÿúë/>Ÿḯ́,—Ë/]ºÔÓÓ³yóæèèh¦‚¢›7o>räÈáÇu_Ñf‚>LƉ‰‰†îĂ‹@(̣ùüû÷ïŸ={ÖÄÄ$(((%%EwÇcơơơùùùƯƯƯ-½qrrbVÉ LÔÚÚzèĐ!@àïï¯Y èŸ›››ÍÍ›7kjj™™™-X°€rï̃½?₫ø£««ËÍÍ-55•.Zb (úQVVvíÚµˆˆˆ7̃xC뛼đaˆ#°‚Å1À G`‰#°‚ÄXA⬠qV8+H€$À G`‰#°‚ÄL©Tæåå-_¾ÜËËËƠƠƠßßåÊ•999́/rđàA@ ÂÂÂôÖs‰D"ø×…  đ́zS^^~êÔ©S§Nưư÷ß}µÉÏϧƯvvvV(º D"mÊ₫ÖéééôSü±¡<8ÀÀÔÖÖ&&&;w®¥¥E©T̃ºu«¢¢"%%ÅßßÿôéÓ†îàó'>>>66666¶¾¾¾¯6¾¾¾ÆÆÆ„•JuîÜ9­³ R©”–ƒ‚‚ ư…à……Ä ±±qÑ¢EÍÍÍL Íf¨û÷ï¯[·®®®Í¥Fmkkkkk;f̀C­çÇ{÷Ưwi¹¢¢Bë́™3ghÁÖÖÖƠƠƠĐ€G€”””öövZ +,,¬®®>{ölRR̉èÑ£ !ëÖ­cs©²²²²²²́́́§ïØƯ»w•J¥A‰̃nÍ %9sF­Vkª¬¬Ôj08[çÏŸ///§å•+WîØ±ĂÉÉÉØØøơ×_ß½{7=ƠØØØÔÔDË¯Đ©TªôôôY³f¥§§“>̃q́îîÎËË‹9sæÔ©Sƒƒƒ?û́3­!LÍkÊd²O?ưÔĂĂĂÇÇgÆŒû÷ïÄ÷̉¼ B¡HNN  …ï¿ÿ₫¾}ûº»»që¾̃Œ×|q×®]€ÉÅ—.]*:::zí'3[-—Ëkjj˜ú‹/̣ܹ̉s™úăÇ/^¼X$¹ººD¢Å‹=zTóơÿ4úé9C&“%%%EFF …B__߸¸¸ÚÚÚ§ü—Ï,Cwyyy´Àăñ>úè#­³sæ̀™={vKK !¤¾¾Ïçk5Ø´iÓÑ£Gû¹¾R©Œ¾zơ*S#‘H$É/¿ü²eË–… jµokk‹º}û6=|ôèÑ®]»v́Ø1¸/¨P("##èa]]]]]Ươë×i¦;¬·fĂÂÂÂÓÓ“¾àXQQÁLI‹Åb:äiggçââ´/..f¥R©T*­ªª*//ÏÈÈ’.‰Åâ 6Èd2zØ̃̃~çÎ̉̉̉¥K—nܸqø F€­Ë—/Ó‚¿¿¿™™™nƒưû÷hª©©é?k$„dggÓ¬ÑÔÔÔÇÇgñâÅS¦L!„¨ƠêíÛ·ß¼yS«½X,¾}û¶••ƠôéÓ™₫äçç3ó¶UUUƠĐĐ`cc3eÊ”Q£FÑÊ'NTWWÓ­W¬XQZZÊåréaJJJii©©©i_íiAs󂣿L·fÉ̉̉̉ƯƯ¢V«ijØÔÔtçÎBÈ„ œ™–sçÎMKKKKK‹‰‰¡5mmm̀F›ÿüóÏÓw†ÉM,XÀT†……Ñ1¥Ri?» Às #À ]4Mơ³Ou_&OüŸéæ̀™3éxXcccBB‡Ăqvv5k–··÷Ûo¿­Û̃ÑÑqܸq§µZ}ç·vRk´Çă1î[³H·.?}úthh(3O­¹,†é’B¡¨¬¬¬©©¹víZuuơăLJ°'t•²bÅ^455 ‚á{ qVFŒaiiI˺#pÔ£G>|øđáCƯuÁ̀gû±víÚèèh:ŒGQ«ƠµµµÙÙÙÑÑѺ٪µµµæ!—Ë}ơƠWi™™Ufʸ×Ăa½5{~~~tHÎà3{:jmÄÓƠƠ•œœ́é韓“#‹U*Úmmm̀bđ¾ ̃ÚÊÊΡ+ .Đxø|¾ÖØ^vvvnn®J¥²³³KLL2}út›––– .ĐÔî’3¬‹ỸÚÅÅẽ¼y´ÜÑÑqụ̀寯F;;;f”Nëj´påÊ•ÔÔT6ă›éÎSs8œ9sæ0w/++;uêÔØ±c=<¼@&L2dÈG»ªY³fï̃½K–,)úÀ˜DDDY">>>>>̃8Ûz÷î]BB‚è=ÖuđàÁ9sæXXXÈçÏŸäëë»aÆE‹?~\¥R3&ÅÖ®]û÷߯\¹rdzfÍ:~üøÿ₫÷¿Ơ«W¦·+2DDD†äâââíí½dÉ;;»Ü¹sW¬Xqâĉï̃½Ó®°`Á‚J•*YYY988ÔªUkÆ :ß½páBåÊ•+W®¬Ïú#G7nœM̃¼ykƠªơ÷ßÇÅÅ}óÍ7åÊ•³±±ñôô¼uë–fåØØØ™3g–+W._¾|%J”đ̣̣züøqÖ‡'O|₫ùç^^^E‹•·õ¼¹P¡B}ûöƠ,–*Uªk×®₫₫₫=J̃É/¿üR²dÉj[¶lÙ¢V«]]]ÓÛ G"""Û¶mÛ×_Ư°aĂ &(PÀÇǧY³fjµÀ´iÓF­¹åúƠW_½~ưºOŸ>ươ—ö»¡¡¡-Z´xưúµæù¼®¿~ưúßÿưÛo¿>}zppp×®]5jtäÈ‘Áƒ₫ùç₫₫₫½zở¬éååơƯwß+VlôèÑk֬騱cµZƯ·o_{{û… ÊÛ###ï̃½ëéé©R©´M4IHHH₫¤ăÛ·o/\¸Đ Aƒ¸¸¸S§Nùúú₫|®\¹\»víĉ¯_¿633Û²eK¿~ư~ûí7ͽ¼¼víÚơèÑ£B… üØ̀™3Çßßÿ̀™3ụ̀å“·?ỵD­V;;;Ëœœ<{öL§“G½{÷N¥RƠ¯_ÿü‡s]¼xñ7Ö«W/]]‘¡°p$"¢l«fM‘[W«SûÄÑÑQ₫¤ƯÔ©S—/_¾uëÖ=zœ;w.õ¼ÚÇ₫"""ÄÄÄhW.T¨¶jđÑơkÖ¬©©xzzèÙ³§¦jĐ´iÓ'NÄÄÄØØØ¨Tª“'Õ¿¿D‰~ươ×_ư5ỵqqqÿưwj»Ö¡C‡˜sçÎM}úôÁƒëÔ©Ó·o߇ZYY 4¨wï̃E9}úô‘#G (pâĉ½{÷¶jƠJ§OOÏt­Ÿ†êƠ«W¨PaÖ¬YÁÁÁ*TØ»w¯ƒƒCÏ=uÖÔܪκƒÓ¿ÿƠ«W÷îƯ{ذavvvkÖ¬‰‰‰™>}z+:tÛ¶mÍ5ëƯ»wÑ¢E÷îƯ{áÂ…ñăÇk®æ¤«+2>ă˜²ÈÈÈ .L:uăÆ¢s!"¢l¦V­Z|ụ̀å¢E‹BCCÇ{ôèQ33³âÅ‹ïÙ³§hÑ¢?ÿüó‚ ,--¯]»öÓO?EFF.Z´(y?é]? ¹sç̃»wo¿~ưN:5cÆŒ₫ù§Y³f'O4₫Å9ÿîƯ»oß¾}Μ9¥K—ö÷÷OmRiGGGÿ/¾øâܹs‹-Ê;÷† |||2Đ„*KÿªÈ¾5j$O?]·ªƯÜÜDï%Â;JĂ“¢L 7¹*-oy÷>·E® w˜bc¼:̃*Á:_¼ẽxË< y<¸ú¢xe{ƠB.D¸TÿDŸÆ·QïóX'ỊñƯÈ‚el2Üáëg±ù XÊ[‡F;³̉Yí̉Á wÍ O‡É¿₫úÙ›ụ̈êóƯ[§^ÖiaSĐ1ésë£`Á$-õ ¯n‡ ẠßÖ)6>x€âÅ“´$$À̀,ă¦Øsó$-ÿư‡ä/*êßa²½Îơđ!‘_÷_) Ç”Ơ¯__dàï§‹₫gZá3Ñ{eZ¦̉øÂªăb5\¬† ƠñoI 3-\ônÔ»Ăù)58CàûäMnÜĐ¶ÇŸơq"5)̉R;â—_ yˆ²§OŸnÙ²¥H‘"Ú_ b]¸pá̃½{÷ï߈©aáHbÿÍ¢ÙÁ> tÅ₫Ø×û[ .‡₫'·97ă´--±ï;̀¨ƒÓ¢SS€?₫ÀˆmÜøÙO?Å'@ŒŒLó/eF«V­J–,): c»uëV=:v́¨ÂqƠªU+V¬P´hQ}Ö IăÓ–-[êÓINÀg?ḅäÉÛ¶mK×3*¨ô\3ç¶ÂÆ^ØĐ₫D§¢ư±f*¦—Ä¿¢Q†5pîœè$r.>ăH9ŸqÔ_½ü“¥ª7©;ỵdÆ ˆ¥?Ị\ÚËØ×v–ºOw »Q«p}¯? ¬è́*oy÷.·Eî w˜¼1^÷Ö́í‹7òßÄZÄÄ¿‰5Ù—ïÀ§%Ậ……Y₫–/́ylF‘U4ư‚A¿hÚß½âÿ*wQ§ÿæ {j¡ùÿwïç {úñekĐ úh\#zû‚ĐÓâ?l&¥Kë®ưï¿Đ¹˜‘â3)~WÿÆäÏ8&¶2]ÆÆÂ2ÉÓ¨áưå¸|y 8Ÿ?Úµqæ̀G¯8~D®8æØ¿B4.á̉\¸ˆ‹»°ë d w¸Àˆ/ñ¥³RÂE”§OñçŸøóOüơ×ÇWööÆüù_-[“N¿? B``’=‰ˆ( °p$cȃ<íÑ₫®=ÇsM)ù ÏaQMÔLû‹×p­:iȪ¨z÷DïÁ*„åˋȋQ @Ê«yyA¥Â† ¢Ó5Úµ!¿ró&ÜÜDçDDD$†#G`ÄYœƠÔ‘ñp&XÂ2¯\Æå̉(­‚ª ẾÇ~Ñ{`HU«âéS¨Ơ8z)¬Đ§T*̀+:Qă×wïBa·M‰ˆr2¤EPdfÅ FSG~‡ï¡Xj+"°%Zª 2ƒY7t»!5nŒˆ¨Ơ)?à8nT*Œ+:K#×ÿ₫›ÂÀăDD$ GR¢é˜₫ÔPÇ#~ ¦¤¶êíØ®‚*rmÅVÑY’·7Ôj¼xäcΛ• »v‰N1«Ékǰ0¨8Ê‘x,?bæ̀™ú¿RM†e³˜¡¹ y— A«Å!®;º« *¢₫đµÁØÙáñc¨ƠH₫`ÇP©đæè³”Θ9âZ+‘¢±p¤l£ ªĂ15ÔQˆú_¤¸Îø¯1« jÖ¢ó5¤+W V#ù̀––¨WOtrYJ^;Λ':"¢œ…#e?V°ZƠËăd“øÉíÅ^ͻؾđ¯Á́Ư µ &iv́ØÎ;„„„ÄÇÇ×­[·T©RÚ¯[[['ïÓÚÚºOŸ>:±±±~~~ƠÓèªfÍ5kÖܽ{÷ÇE“‘LÜZ¬]‹µoèSP÷§Ï\Ƀ<ö°@@ÈP÷J¡VĂÇ'J-:ÁƯ^‰Î̀€V¯Æ€‰±J¥;X‘̣ÄÇÇ0777¶̃½{gaaaf¦ˆ‰£G~ơêƠ™3gjÔ¨`ÆŒ\½zơ₫ưû[´h¤ilÚ´iÚư8;;¯[§û—ÿ¸qă *4gÎúwE†¢ˆÿˆ²ZƯغj¨ăW5t>zNpRAuWE§™)&è–R‘‘¦ơÆŒÎê;D'D”2ooï%K–ØÙÙåλbÅ'N|÷îv… TªTÉÊÊÊÁÁ¡V­Zd³Ñk¾{áÂ…Ê•+k‡N{ư‘#G7ÎÆÆ&õ¼µjƠúûï¿ăââ¾ùæ›råÊÙØØxzz̃ºuK³rlĺ̀™3Ë•+—/_¾%Jxyy=~ü8+À‘#G6l¨©5†àôéÓøPí•.]:=Ÿ:ujÁ‚«W¯₫ä“O2Ùe ¯8Rbós8`<ÆÏÁO«  €½ØÛ-Óß·R¨Ơ3&ÉŒ…*®\‰Œa¯VKµp—.¼èHµmÛ¶ÿ₫û¯uëÖ•+W>sæŒÏéÓ§ÿùç•J5mÚ´éÓ§7ỉ¤k×®oß¾Ư¹sgŸ>}lllÚµk§ùnhhh‹-lmm›5kà£ë¯_¿̃ÜÜüÛo¿µ°°˜?~×®]«V­7xđàÀÀÀåË—÷êƠëÊ•+¼¼¼6mÚôÙgŸué̉åÆkÖ¬¹qăÆ™3g »ïqqqÆ «^½º¼ñ₫ưụ̂äÉ (((O<ùóçß¶mÛóçÏƯƯƯkÖ¬™;÷ÇŸzóæMÿ₫ư?ÿüó–FµÍpW”qj2´2eʈNt'oÜ¢̃5Rü?µ¿è”3%.Nw—ÆS2)”ëÔIÚ+₫[ˆcÉ?j„F*¨.ă²è3ÈÜj5Ê”‘Zfφ‰ I!¿C}÷®èlˆRæèè8f̀íâÔ©S­­­·nƯ àܹs—.]²°H¼ă &&F»r¡B…&O¬}Zñ£ë׬Y³lÙ²Xó®qÏ=såÊ¥iÑ<ücff¦R©N<©¹øà×_}ö́Y¡B…t’‹‹Û•ºô₫ù§víÚçÏŸ_ºt©««+€   „„„éÓ§‡……={ölƠªUÿư÷_Ç_¥ùPvxxøO?ư4jÔ¨¢E‹j3ÖeoUSN× ÔP!¨,ÊÆ#^₫QUTˆÀ̉È–Đ`útL›–¸øđ¡©¼R̉·/Ö®MŒûôÁúơ¢"̉åîî.¿ajeeåæævï̃=ööö§N:xđà;wõ¼©§FĂÍÍM₫ËG×wttÔÆz1y KKË… 3ÆÅÅÅƯƯ½nƯº-[¶lÓ¦Ṃ»ÑÑÑS”A­÷‘ >ü¯¿₫ruu=tèP“&M4íÿüóÕ¼y4‹ xóæÍ°aöoß>pàÀÔzóññyóæÍؤsÖg¬+Ê DP¥ă¸¼ÆkùG®pđï-²á¿—©SÑ»7\]¥• ïßĂ"ûí̀ï¿K…ㆠ,s²… Eg 7 ‹èèè·oßvîÜyÏ=5jÔh̃¼yûöíëÔ©SµjUùv²±XơY_Æ ë̉¥ËîƯ»=ºgÏ___777gggùj¶¶¶úW‡©Ù´iÓàÁƒ­­­W®\9`À ÙÂ… ë¬Ü¼ys7õL­·7õ¬^½ºsçÎÚ1Ă]Q&eëßDö >‰Dä3ÿüóÿưï+V¬°±±‘tÿ₫ưƯ»w7ỉ¤\¹rÚÆÈÈH%J”H­Ă­[·>₫\ç"bƺ¢LbáH¤« $ !ÁŸâSyûE\TAå¯_đ‹èÓM­†““4uŸ‡Ö®Å矋N+Ăvï–j᯾báHJó́Ù³ Œ?^³8sæ̀ÈÈÈN:i£–:Û·oNí _z×OC@@@½zơ¾ưöÛ™3g033kܸ1d÷²µ2y«Z­V?¾X±bëÖ­K>†¥¥¥åرckÔ¨qøđaͦæ̀™caa¡y‹OŸâÇñí·‰‹}ûâÆ øøˆN+Ălm¥ñÍoÜ@… ¢"’*ThÊ”)§Nª\¹̣éÓ§|øĐÊÊjĐ A½{÷.R¤ÈéÓ§9R @'ŃƯ»·U«V:ưxzz¦kư4T¯^½B… ³fÍ ®P¡B@@À̃½{zö́©³f&oUß¾}ûÎ;åÊ•ọ̣́̉ù¨sçÎíÚµ›>}ú„ \]][µjegg·ÿ₫Ë—/ÿøăåË—O±ĂØØXÿ¦M›ê oîää”̃®ÈD¿Öm‚ŕ+úJ–ÉF₫Pÿ‘âp!êÑ{–n»v%Ù‡Ö­…e’Ùa_îÜ‘vĂÊJØn˜œ́52•,Y²cÇ₫₫₫5²µµ-[¶́رcß¼y£ùÔßß¿nƯºÖÖÖŸ~ú©——׳gÏ~ươ× ´hÑBû]yoéZ_3^ă¯¿₫ªmÑ\_|üø±Z­ 0`@‰%̣äÉS¼xñ^½ziÇñÉ$ùp»°K uA”7NÇtTÙë̉£¼v|ơ NN¢Êù+–û÷‹Î†(G{úôé–-[Nœ8!:‘D.\زe‹v´s2Dñ.â¢NcTÈü¢SKyíǿ Pôë'Å3gΆZµjU§NÑYÛ­[·zôè1õ<щ$ZµjU=NŸ>-:SĂg /Ç>÷ dY÷ØÖ7øffé4®Çú̃è-z§ơ%PĐÑQ²'«́¤đIGƒâ3”ñGưñ#Q¦ü„ŸÔPëŒøØ}²Ñ43̣Z+<²¹Ê² ù›>ÿü#:""SÆÂ‘È‚tGä-ñˆWA5SD§¦yí‘Ưjdzg¥8éøÀDDdX,‰ Ăj¨c°¼q&fª zƒ7¢³û8Úñ“OD'¤?\ăăE'DDd²X8̉ ¬Đ™ä€%,'b¢èÔ>N^;>¤̀*ÛHq₫́ô~Qö‘ÈđÔP/Ày‹|TPe´?#f.«_¿F¢̉S‡R+:""“Å‘(KŒÂ(5ÔfIÿ‰© J₫ ¶̉ÈkÇ Чè„ôÔ¼¹s"¢¬Á‘( Å#~36Ë[¾Á7Ê¿ô(¯7lÈ&Ă#®Y#Åưû‹Î†ˆÈ4±p$ÊZƯÑ] µ¬ä*¨¶b«èỔ"¯§LÁ¶m¢ú¨B…¤øî]ÑÙ™&DÆ…¨X!oéîUPEt^i‘×ÿû®]ĐGµk'ÅĐ‘ˆ( °p$2’Á¬óÂơU\UAơÏE§–*ù•»Ê•ñîè„̉Æ»ƠDDYŒ…#‘Q©¡Öy?æ|2cEç•2WWüơ—´˜'è„̉æà Å÷ï‹Î†(ñđđP©T*•ªS§N¢sIôƠW_iR*V¬˜è\L G"c›€ :—çabߘiÛsçJ‹*…¦ùA×®R¼¿èlˆrråÊ­_¿~Ô¨Q:í 6œ>}ºNă«W¯† R¼xqkkë† 9s&oß¾Ư¹sçbÅ)R¤[·n§N̉§«/¾øbưúơµk×}`L G"1ÔP†Ïä-*¨.ă²è¼R0f J–”å©äÚñ·ß¤˜w«‰ŒÈÙÙ¹wï̃5’7^¾|ùäÉ“:kFFFV¯^ư·ß~kĐ ÁÀïƯ»×²eËË—S₫éwüøqS§NuíÚµgÏgΜiÖ¬Ù‘#G>ÚUÍ5{÷î]R₫Ă‹ …#‘0qPg†ëª¨ª3i¡B„„ o^i±Y3Ñ ¥ÆÚZ? åtññññÆóƯ»w ¢÷8Q\\ܦM›Ö¢E‹äYÍŸ??((È××wÆ ‹-:~ü¸J¥3fḶ~ÔjơÀmmm¯^½º`Á‚¹sç^¿~½`Á‚ăÆKoWd(,‰D̉̀p-¿Oí _ẽ¶–OÈrè,ÈxWY«wo)₫óOÑÙPNäâââíí½dÉ;;»Ü¹sW¬Xqâĉïd/—-X° R¥JVVVµjƠÚ°aƒÎw/\¸P¹råÊ•+ë³₫È‘#Çgcc“7õZµjưư÷ßqqqß|óM¹rålll<==oƯº¥Y966væ̀™åʕ˗/_‰%¼¼¼gÍßW-Z´˜>}ú³gÏ’ºyóæB… ơíÛW³XªT©®]»úûû?zôHgÍÀÀÀ:;;kŹ́́¼½½/]ºtíÚµtuE†Â‘H¼$ŒÇxy‹ ª„ˆÎK—|€Ñ£qçè„RÄ»Ơ¤Û¶mûúë¯6l8a„ øøø4kÖL­V˜6mÚèÑ£ (0a„¯¾úêơë×}úôùKöZhhh‹-^¿~­y>ï£ë¯_¿₫÷ßÿöÛo§OŸܵk×F9rdđàÁŸ₫¹¿¿¯^½4kzyy}÷ƯwÅ=z´‡‡Ç5k:v́˜»ḯ́¬V«Ơjơd?&"##ï̃½ëéé©’=ở¤I“„„„äO:†††prr’7.\Àơë×ÓƠ…èˆ|à3CJ¡”¶¥JMÀ¥MQxă*THŒË•KRJ*E®\Rüâ…èl(k‰½<¯ó–›Üÿư÷ă?~óÍ7ÅñăÇÏ™3gË–-=zôX·n]™2eöïßoaa¡ùÈÑÑqß¾}í> Dêçç7}úôÉ“'›™™øèúQQQW¯^-[¶, ‹ñăÇGGGŸ?>W®\®]»vâĉׯ_›™™mÙ²¥_¿~¿}øăÊËËk×®]=*$??‹=ỵD­Vk¯ jhJĂä—'5;uêÔ)ù;7GđèÑ£tuE†Â+DJáßC>đ1‡¹è¼’pwÇœ9̉¢B_”ùâ )Γ̃ rtt”?i7uêTkkë­[·8wîÜ¥K—4U €ˆˆ111Ú• *¤­ơY¿fÍ €§§'€={æúđTÓ¦M5ë›™™©Tª“'Õÿ0XƠ¯¿₫ú́Ù³äUc\\Ü®ÔẹÈh2·±±‘7ÚÚÚjwMÎÙÙ¹K—.Û·o÷ññyö́ÙÓ§Oç̀™³|ùr‘‘‘éê …W‰”E ơ` ö…¯f1 *¨̉¸°a|cÇbÏ=¸˜7/̃¼“Ơ«¥Ö_|nƯD'D9»»{îܹµ‹VVVnnn÷îƯ`ooêÔ©ƒ̃¹s'00đæÍ›qqq̣ﺹ¹i«F}ÖwttÔÆz1y KKË… 3ÆÅÅÅƯƯ½nƯº-[¶lÓ¦zôè={|}}ƯÜÜüưưuîöÚÚÚf²:Lƒ³³³™™™Î­äđđpEI¾~æ‹N-‘Z-Ơë×cđ`ÔWÔođ!C°âĂäàë×£OÑ Q–8ă¢SHÙ­[·̃¿¯½Ú{ûöíÆŸ8qbÏ= .9r¤ve+ˆré]? AAAeÊ”ṇ̣̣̣̣̃JHHX¶lÙ×_½bÅ©S§Ê׌‹‹ûûï¿Së§C‡™92åË—?~<ɉ;v́˜J¥rwwO¾₫Ơ«WmllêÔ©S§Nâ_·V©TuëÖMoWd|Æ‘H¹ÔP×C=íâ,(Í%Ç£AÑÙèX¾\å<ųgÏÈÆ¬9sfddd§N>| \¹rÚ¶oßÚ¾ô®Ÿ†€€€ÚµkÏ›7O³hffÖ¸qcÈîekinU§&ógĐ Aÿ₫ûïîƯ»5‹OŸ>Ư¾}{³fÍ\\\’¯ÚK*•"_²¡Ë3D™Q¨P¡)S¦œ:uªråʧOŸ>xđ`:uúöíûđáC++«AƒơîƯ»H‘"§OŸ>räHNœ8±wï̃V­Zéôăéé™®ơÓP½zơ *̀5+88¸B… {÷îuppèÙ³§ÎYz«@ÿ₫ưW¯^Ư»wïaÆÙÙÙ­Y³&&&&ù´„3f̀hƠªU­Zµ:uêô₫ưû­[·ZZZ.^¼8]‘Ađ#‘̉ÄÈÿđŸ¼EƠc(bZ”ï¾CáẨb›6¢’“ƯÚă€ddµjƠ:xđàË—/-Z:v́Ø£G™™/^|Ï=E‹ưùçŸ,X`iiyíÚµŸ~ú)22rÑ¢EÉûIïúiÈ;÷̃½{ûơëwêÔ©3füóÏ?Í5;ỵ¤ñ/ÎÙØØøûûwï̃}ûöísæ̀)]º´¿¿j“J7õ|ß¾}Å‹ÿí·ßö́ÙÓ¹sç[·nisNWWdª,ư«"grss %bw.t†¬Û€ ½ĐKtR@̉AyvíBûöz}Ë'E›™“<st²₫cÉv?T]\\ªT©²sçNщ‡‡‡ƯQíh ѳgÏ'NhOC₫ËvÿY ¯8ej¨]áª]́̃1PtR ›J ™{n>Ë<}*:""SÀ‘(;¹‹»30C»¸«] ₫âP®\øùgiQA£‚ד^-&ÊJOŸ>Ư²eˉ'D'’èÂ… [¶lÑvN†Â‘(›™‚)' ưh₫ÿuMcøpi*Bụ̀‰NHcæL)}:666,,lÊ”)>́Ö­›è}"ÊẒÚñ;|· ˲z‹‡I±Qv²R%£l†ˆÈÔ˜øơ³˜˜˜øøx»d¿‹lmm‘ô¢œ››Ûºuëú÷ïß¿mcŸ>}&M¤çvƯÜÜtZöíÛ'ú`äh>BvŒàR.¥4ñ0 ‹ß6º­Á·¢=)¥JÁƦDddâß±“&=4(k/ øĂQJáøîƯ;___Ḿââ²dÉ’+W®\¸páÊ•+Ë—/×̀Ú¿~ưzÑ™Q"yí8£â¨Á7ñ¿ÿIq?Ă_ÖÚ´‘bDD£”ÂñéÓ§¯_¿/_¾µk×6kÖ̀̉̉@̃¼y›4i²víZkkk/^)I" ]l‚&/ñ̉°ưoÙ"Åk×fñÎpBQ"¢QJáX´hQÍÀîîîNNN:Ÿ(P bÅ4å#)„ă°vÑößÄ´iR\»v́ߺ#"̉›R G 4üîƯ;̃¿ï̃=5kÖ&%ÑMæavÑàƒO*ÅgÏf¼ŸTÉsܸ1 6@Dd:T8Nœ8±xñâ#FŒxôHƯăéÓ§£G~úôiáÂ…‡ &:M"̉5£û vÑàµă¦MRlođkC‡Jñüù?8DD¦DA3Ç 6,**ề™3̀ÍÍË”)ăèèø₫ư{5jÔ°µµƠùÖ̉¥KE'®+Ç&¯dœwÁ*¢â ÜĐ.~tR™t•¬½w¥J4uyïù‘( ÿ±(OåØßơ üĐ¡CÚ8>>₫öíÛ:+œ?^tD”ªë¸.¿ÖØ Íâ ¡:¿t U«&ÆŸ~ÊêˆH Ưª&¢́N~•ñÍÀ Cơ¬EFcï^ƒæ=|¸gƠü†DD¦@AW‡ÊŸ4"¢́I µöºăTLmˆ†ÑØ =GGĂÊ*1nƯÚ Ä’%‰ñªUøñGc-"¢lFA…ăÈ‘#E§@DˆOđ‰&ö„gầaùnó僛´Ï-\ˆQ£ ”q•*R̀‘ˆ(u¼UMDæ‡Ø©]´0ܨwîH±|Czú4Ë Q¶'øc—.]899-_¾\”Î|ÖD¤@Ñq4FÏGâè6*¨>ú’µ:tÀ®]‰q—.0ØÏ;;¼|íĂDD”Ư.oܸ H‘"Ú˜ˆLĂ<̀;ăç‘8‚́ 2!áHƒḉØa¸tļĂ˜ßº…̣åx¨ˆˆ² ̃ª&¢¬rç´ñ+¼ªˆé¶zu)îÜÙ@¹(Å«VáàeG‚¯8NŸ>€•••6&"S"ÉúnüŒŸ¿Æ×™́óüyé¢ăΙêJR®œ¯Z%]}$""Á…c=RŒ‰ÈdÈkÇÑ­?ŧ™́ó»ï0ăĂ‘Íá Á¼zeôƒDD”=đV5e¹+¸¢K£tæ;”ߟÍ9•9 ơ eC ÇQăưû÷÷îƯ»ÿ~|||+´nƯZtD”>•QùGü8 “4‹yÉzÎŒ—שƒÓ§3å€̉—/ëNVCDD€J­˜9_Ơjơï¿ÿ>õ¼wï̃¥±̣çϱŸ+YHHˆ‹‹‹è,rºhp'4±.„\ÈäIQI3cb"™à`|úáú°ả\29 ÿ±(OåØßơ ºU½cÇŸ~ú)íª‘ˆ²¯ă8®Ÿăùè£3Ùạ́åR\¡B¦ó+UJùb5QJt«zíÚµÚØÜÜÜÙÙY%¿@DÙŸüE™?¬ÿØ„M=Ñ3Ă½ ‚¯¾JŒõ4h¢õ:BDD¦ Âñ₫ưû̀ÍÍ}||6m/_>Ñ‘áÉkÇ^èUơ£x†{[¿}ú$Æ%Jà₫ừ%g€.ˆˆL™‚nU—*U €››[»víX5™°C^„.™éªwo)~đïßg.3ù0àgÎ98DDJ¦ Â±fÍ^¿~-:"ÊZMÑ´ ªhµ 3F;u5gç̀e6`€ó1G"¢dT8~ơƠW¥J• •?́HD&é2.;Ä;h›¢i†»jß^_¼@DD&̉*RDY8%#øÇaÆÉƒƒƒøá‡Í›7—(QẦ,…ºvé̉¥bs&"ƒ¸đàB)—Ä™àÈJ¬ŒÁëêÈ4i’,˜éÖªŒˆH9‡R™óá̃½{÷îƯ›e5ù‹2C0¤;ºÛÁ.ưxzJq\^¾„]Fº”)ƒ»wE""…RĐ­j"Êă°6¶‡}†û‘ÿ©‘’åïÇøû <2DD $øăĐ¡CE"© Æà•X©Ỳđl„MeI¾|‰÷ï‘+W†0&$Æ«V¡Q#ÑGˆˆHA#G}ˆH°X±[_à…f±ŹÇ₫ ô³k:tHŒK•Bhh†²qt”âuëÀwơˆˆdx«ˆÄ{çÚø¬Æê t"½úáCÑ»DDdW8¯_¿><<ÀóçÏ'NœØ´iÓN:-[¶ŒÓX™0ù꘱Ö7JqÙ²M¥bEуˆH¡”U8nܸ±mÛ¶ßÿư‹/|ươ×;wî|øđá­[·-Z4pà@5È 2]~đÓÆfúéÔS6ñu@@Fó¿sà€è£BD¤ *ïܹ3cÆŒøøxÍâµk×.\¸ _áܹs~~~鈲ƒÎèÜmµ‹P ụ̈‹W«–¡<ä…#‡'"’QPá¸jƠ*ÍÅzơêÙÛÛ9rDÓ^©R¥3fäÉ“À;D§IDYè/ü¥Ă>̉Ûƒ——_º”¡$¬­¥xëVч„ˆHAT8̃¾}@åÊ•W¯^íèèx́Ø1M»··w÷îƯ›4i 00PtD”µäO7ÎǼ;¸“̃.”↠Eï‘ QPáøđáC•*U~ëÖ-666µjƠP¤H111¢Ó$¢,w7´q9”Kï×åĂ|?¡ ªW} ˆˆ”HA…£µµ5€°°0₫₫₫ÛÖ5277đêƠ+¢Ó$¢,ç÷1£]ÔNK¨¿~âV­̉Ÿü1Ç¿₫Jÿ÷‰ˆL“‚ ÇbÅ8ỵạ̈åËùđ|{Ó¦M>ôÎèÔ)1vwÇíÛzlI₫῭¶m¢÷›ˆH<#Ge/ñR{­q5VÇx7¸¥ư•¥øÎÑ;@D”=)ôVu@@À₫ưû7õ÷êƠ+Ñ‘²ÜÀ m\eơùʼyRܺµ~›)RDô)ˆâ G???OOÏöíÛ1bêÔ©ÏŸ?jܸñâÅ‹•?;";Ü?ÇçÚEG8~ô+£GKñ̃½úmF₫˜#‡˜%¢OY…ă¬Y³&M¦Ó³té̉éÓơz}’ˆrˆµX«#1s>ú•áĂ¥X^G¦ª{w)æû1D”ă)¨p¼yóæ5k4±¹¹¹¶];”ă¦M›ÎŸ?/:M"R5¤ă1₫£ëÿü³/X ÇjÔbD”ă)¨p\±b…Z­633›2eÊÅ‹µí¶¶¶‹/Λ7/€ßÿ]tD¤,Û ½ï¬ÏèŨV«Ï; T©R¢Ó$"%zÚ¸¥½̣… R\½úǺ–¿X}äˆè%"IA…cÅœ9sfĈ'NœĐ4†††;vløđá±|ụ̀¢Ó$"%²ƒ7¼µ‹–°Lceù „/_~¬kNi¬́ë+ÅÍ›§Ù¯³p$¢œMA…£££ă¼yóRüÔÆÆÆÇǧpá¢Ó$"å’Î3ÓXsĐ )>xPï ¼~-z‰ˆDRPá víÚ2dˆ»»{¾|ùXYY•/_̃ËËëđáĂM4 )Ưz¬×ÆiÎ#¯¿ư6ÍN­¬Dï‘"¨”<_TT”µµµè,̉ÍÍÍ- @t”DHHHj/́“(YwR\á„ MÜ]å=êPÉ Ë´~zyaƠªÄøåKØÚưhÿ±(OåØßơʺâ¨ÿàÁƒ›7o>xđ >>^t:D”"PoÇö›¸™ÚUªHñ®]©÷(?fËÑûGD$ŒEæ»0¬    øûû¿ÿ^Ó’+W®&Mx{{óï-"̉ÓmÜ.‡r¸*ÈŸ}”»pAÓ±cÇÔ/:~ö™õŒ/¿½DDb(ëăæÍ›Û·oèĐ!mƠàưû÷û÷ïoÓ¦ŸŸŸè‰({(‹²ƯÑ]»è ×W37O²¦G×G̃9""aT8?₫ûᅲߘΟ?¿6Ÿ:uê¥K—D§IDÙĂfHCç!hv¤¸|BùøDD”œ‚ Çơë×ÇÅÅ(Q¢ÄâÅ‹¯\¹ráÂ…«W¯.]ºTs“úưû÷k×®ÍXçÛ¶mëÖ­›‡‡G½zơ&MôâÅ‹~åúơëÇ÷ôô¬Q£FŸ>}Î=+úQú$ AwA—שSGÓÓT₫8$QN¥ ÂñâÅ‹,--ÿư÷-ZXZZÈ›7ïgŸ}¶nƯ:+++ä3…émÁ‚“'O¾wï^5¬­­ưüü¾ụ̈ËØØØ4¾räÈ‘={9rÄÉÉÉĂĂặåË}ûö=ÂÙÆˆ²Tă0N»h”GièØQûôI¥¯î̉o\¼(zψˆÄPPá˜7o^*T(T¨ÎG ¨T©s'’ôàëëë́́¼oß>__ßưû÷÷íÛ÷ÚµksçÎMí+¯^½0a‚……źuë¶lÙâëë»iӦܹsO™2%!!!='"Áfc¶6Fô2,K¾ÎÎR¼aC*ñÅj""E‚ƒƒß½{§óQ\\\pp024WơÖ­[Fåää¤i™8q¢­­í̃½{S«ưüü"##‡ R­Z5MK¥J•Zµj~ưúuÑljˆ̉G₫Jơ0 KqfͤxƯº”Ö(YR9ñ åT *ÇW¼xñˆˆˆ‘#G>~üXÛ₫ôéSooï'O˜™™yyy¥·ÛóçÏ›™™5nÜXÛbnñ°aĂˆˆˆÔ^µ9v́˜J¥ê(¿}̀=;  2'ʆæa6Nq:™¤¸oßu*z‡ˆˆÄ<ă°aI₫ú·µµpäÈ‘cǹºº:::†‡‡j^±¶¶^½zµö* >ÔjuPPƒƒƒÎØeÊ”Z½zơäߺqă†½½}Á‚/\¸pụ̀å—/_–-[ö³Ï>Ó|(:̉eä“rwK¹”̉Ä31s@È6oÎÛ£GâÖµj½?|X7=§V­¬öîƠÄ!!!Æ?bÆÁ, Ä“"\Ë–-E§ ›9ư4¯Nk̃È–ÓLưêƠ«ä_yưú5€   gÏùøø4nÜøÍ›7Û·o_ºtéÈ‘#wï̃­ÏuÇœ9¥Âqæ!2̣IÙˆ½ĐK—r)¥3Œ‹‹ôLHH®r0 G—sç’¼gmZøExRÄJ₫k=ù¢Bpá8tèĐ,íßÎÎN¥RÅÄÄè´GEEáĂuG—»̀5«I“&xøđáaaa~~~ÿưw×®]Å4"ʘè9ă"ñâÍ Ỵ&MÂ?&Æ#GbÑ¢¤ß—ÿÛ÷ñ1ᑈ(5‚ Ç‘#GfíîYXØÚÚ&¿² @ûµœ••Ũ¼yU*•§§§¼ư³Ï>óóó»sçØ#FD™PíË1+±̣güœ ¹´Ÿ₫đƒT8.^œ¬p”»ySô®   ·ª³ˆ³³sDD„¦RỔ<Ÿä́́œâWœœœråÊ¥R%yơRs‡Zóe_âOmœ¹u>­ZU÷́I½—d£†åÊ*Ï;×·oßÚµk—O]zûlÚ´i||üñăǵ-jµÚßßß̃̃^3rdr‘‘‘wï̃•7jÆî)[¶¬èƒDD™̉íJ¢¤vq†È?=qBÛ´Iöå²åL *5UăÙ³g_¼xŸºôvÛ­[733³%K–hkàëë̃¥K—\¹oQEGG‡„„h_[ëÔ©€É“'k_»¾~ưúªU«lmm›É‡ &¢́)̉;Ñ+±̣¤Ë‡:/¿éÎĐ¡ƒè܉ˆDRPáøóÏ?«Ơề÷££páÂăÆ nß¾ưÔ©Sû÷ï¿`Áww÷Aƒi×ñ÷÷oÙ²å!‰Ê•+7zôè«W¯¶lÙrèĐ¡ưû÷ïѣǻwï¦OŸ₫É'Ÿˆ>NDdá/mœyäíØ!Åơë'ưZûöR̀1¶ˆ(çQĐp<ÚwƯ»víÚ¦M›¼†»%4`À€ üñÇ{ö́)T¨PŸ>}F¥‘'5ƒvtt\»ví©S§́íí›6múơ×_»ºº>HDdmѶ$J₫‹5‹ƒ1x%VjâN¤ƠNŸNú5ùÇ]»À¡Ưˆ(‡QeÅE¾Œñôô svv₫çŸ̀̀t)4½ÜÜÜ8£̉„„„p4¥QÂI‘O?øoµïÊ ‚•‰e$¾ø«WË¿óá+… !,Ll₫YA ç…tđ¤(Pư]¯ úL3 ´µµu¶®‰(Ií†ơ Ùđ¿ư–Ê—=>‘±)¨Dëß¿¿……Ž{÷Ö®]«œë DdÂÚ¢­ ¤ 9e! › K†ƒ6i(èÇ*UªL˜0á‡~øá‡~₫ùg'''‘5vï̃-:S"2ÁÖ̃°@@â,`à̉%”+—¸ÎgŸÉ./6mÇEgMD$†‚ Ç»wï._¾\GFFê ÙMD”E&c̣L̀ÔĹK3‡µ|̀ÖÇekwè çÏ£F Ñé‚nU¯X±B;n"‘Ñ|ï M@ú ¾Ñß}'­3zô‡HçÅj"¢œDAoU7lØđÉ“'j×®Ư²eËÔ†ăé$*C‘ŕ›VJÆwHi'E₫†µæ¢#d¯P~Xj[+TÀơë¢70¥O"åØßơ ºUmnnÀÖÖvƠªU JŒˆr‚•X9ƒ5± *MíèêÀÀÄR¸/}ă†è¬‰ˆŒJA·ª«U« P¡B¬‰Èø¾Ä—̣Å…XàĐ!©å³ÏD§HD$‚ Ç#FØÛÛß½{×ßß_t.D”iïPđ†7€âÅ¥O¥öªT)‘ º¶7wîÜ‚ ¾xñâË/¿¬P¡‚³³sĂñ,]ºTt¦Dd²f`ÆwH|)ÆÖQˆ5 '&~:dV¬:tÀ•+‰MÁÁ(UJtÖDDF¢ —cÜÜÜôYMùÏ¢æØf•Œ–+bOü-™ØØ=u_‘¹|U«&.ÏŸooÑ)’bÏKNÆ“¢@9öw½‚nU)ü†u/ôB̉[Ó₫₫€‡‡´ü矢ó%"2Ưª:t¨èˆˆ`†-EâS1EPäÚ¡ÿ?jÚqq²UÿùGt²DDÆ£ ÂqäÈ‘¢S "€%X¢-Ăvç““@=Íb|¼è䈈ÄQè­ê€€€ưû÷õ¼9***..îƠ«W¢3"¢œå´³S£>êÿü³ôÑçŸʼnNˆHÅ~~~íÛ·1bÄÔ©SŸ?Ơ¸qăÅ‹+ç="2yQ°i ï¨×¯O:ñ ÿ²%¢CY…ă¬Y³&M¦Ó³té̉éÓ§‹Nˆr8 waW­Ï^k§½’½IÍ÷cˆ(ÇPPáxóæÍ5kÖhbÍôƒÚÑ7mÚt₫üyÑiQ²ûµñÙƒ6Úxú:ÙØ»v‰N“ˆÈHT8®X±B­V›™™M™2åâÅ‹Úv[[ÛÅ‹çÍ›Àï¿ÿ.:M"ÊA£¹œ¤åéSSX‰…#å *oß¾  uëÖ}úô±´´”Ô¢E‹F¸sçè4‰(gy‚'̉Âw3´á`¬LŒ’ ÏCDdÊT8FDDHmp|WWWááá¢Ó$¢gæH 1ù4ÿë‹/EçEDdl *5S¦ø£Z­>wî€Rœ–ˆŒn,ÆJ –±èâ§ ¯ èÔˆˆŒJA…cÅœ9sfĈ'NœĐ4†††;vløđá±|ụ̀¢Ó$¢œH>!¶wƠüoḱIlÙ³'Ư=eC *́èè`ÿ₫ưÔ40`Đ A‡`ccĂi ‰H”Ïñ¹´pª.€G(”¸È÷cˆ(gPPáèèè8õ<‡?µ±±ñññ)\¸°è4‰(‡Z‹µ̉BÓ(úÀ÷˜°p$¢œBA…#€Úµk-!‘)\8úùù]ưàßÿp÷îƯ»wïñ¼€]•*U4Ed¥J•4£‚)A7t“/z å÷¢“""ÊB*µZ)"¿zơêÚµkÚ:̣Ơ«W:+˜››»ººîRüènnn|ơ[iBBB\\\DgAI˜ÆIyrøFÁ¦µ‹ếÑÑ4΋‰áIQ û»^)·ªØÚÚ6hĐ AƒÅû÷ï_½zơÊ•+W¯^½sçN\\\||ü;wD§ID$qnZ+cđJÍbuT¿€ ¢“""Ê*Ê}«:₫üÖÖÖÖÖÖụ̀åË•+—ètˆˆR6{ˆ6¾ˆ‹ÁQVQĐÇ„„„ÀÀÀK—.]¹rạ̊åË÷ïßO¾ß•!"¥‡9ă=.ă²‡fñS|j7¬‰ˆR$¸pŒŒŒÔ”‰—/_¾víZtt´Î yóæ­X±¢Çöööb&"̉U¢D©+6Á®p Ô4ŒÇøÙ˜-:-""Ă\8Ö¬Y3ùÛ9 ôđđ¨Zµª‡‡G¹rå,,tY”ˆHW‡/nS®̀]¨‡uœƒ9,‰È$ ®É´U£fpÍeÅB… ©T*QQQçÏŸ×ùJ:uÄæLD”D‡e/€±s1w¬¦Í¶¯đ*3½)R.æiß¶m[Úkæ̀·ß‰H¹40‹Í£-#¹û[ …è䈈 I¹oUe# 1 ̣¿Ö¶´DKÑI G""ĂÈwˆ²Æ̃VÚ–Oñ©è¤ˆˆ Iđ­êƯ»w‹>DD™fm¨¨¿Ñ¦¢ơí[2Á~‹·yGt~DD†!¸ptuu}ˆˆ2­ClØđ%.ΜŒÉ35a^äå°Dd2x«ˆ(Ó:tĐüoøÀ”ïñBtv&fΈÈ0X8eÚ‡Âq;º&¶8<×~8SDçGDd,‰ˆ2-wî'ư¨ ma+:E""`áHDdHkĐ?1úémc$"ÿÄŸ¢S#"Ê,DD†Ô¿K ¹̃kĂè :5"¢̀báHDd-¥á¾ml>Dqơж7@ÑYeàÂ1666666..@|||HHHHHˆècBD”~¤ a;Ïjă ỏÆ'p"üGDÙ˜à±nƯºUªTY¿~=€'O´lÙ²eKN̉EDÙPûöÚĐêÀNù'qQ—B)щeœàÀß¾} ààÁƒ%K–|ư:q×Ó§O§ñ•:uêˆÍ™ˆ(… Kñ®]¿ü2kĐ Ä¥ŸºUußæ~75‹Qñ:®‹N—ˆ(#Ÿ|̣ÉÓ§O/\¸páÂmcÿ₫ưÓøJ@@€Øœ‰ˆ>âÎ//h ÇíÛ¡Æ ç!¼¢ó#"Ê Á·ª5j$úe‰&M¤xÇ Áí¢¶ˆ$"Ê^&LèÙ³gñâÅóåËgii©ì—&ÑGŒˆ(Ơ«Ë—–â.]°ËóAú ö~.Qº ¾U?₫iÓ¦iâ°°0OOO—/_}Xˆˆ̉¯ChŸº¹{eÊè|híµÆÉ˜ü-¾1Qú(hǼyó~öÙgŸ}ö™èDˆˆ2D6"ví°q£ÔĐº5̀Ă>^t^DDú©XQwíĐ³§Ô°w/ŒÆhù7~ů¢“&"JÑÑÑóæÍk×®]•*Uêׯ_¹rå¶mÛÎ=;**JtjDDz;yRó¿íÚImëÖ€jmË JW¯DDb)«p<₫|óæÍ}}}ï̃½«âñưû÷«V­jÙ²åÅ‹3½""£úóO)îÛ71‡qÚÆB($:G""})¨pŒ7n\xxxŸ>{öĺرÑÑÑ¢Ó$"J‹KÚŸ¿³1[Ụ̂wc·è¼‰ˆô¢ ÂÑ××÷Ñ£ǴííG½cÇ“'OîܹśرvvvÂÂÂ~ùåÑi¥N₫~LD„æwí’Ú´¯ÿ½Ámc;´ûxÏDD   ÂñÚµk,--×®];xđ`wwwGGÇ̣åË4hưúơQ9R)Z²«‘dk;–äAÏñ¹¶½ ªˆNˆèăT8̃½{@Í5Ë$ǜƠƠµnƯºà|ƒD¤pK±́JcRó‰ÁZ¬Ơ6^ÅƠc8""eSPá¨‘Úø; ̀ÍÍE'HD¤Ù{1›6IÍ_}%ÅÏđL7§`%"¥SPáèææàüùóׯ_×ùèæÍ›§OŸàêê*:M"¢̀ K áØ̉ƠÈʨ,:5"¢´(¨pôđđđöíÛ₫ưû/Z´èâÅ‹<¸xñâ¢E‹úơë÷æÍí:DDÊec“bó©SRÜ o‚t5̣®ùĂ_ô¥J¥V«3ß‹AÄÆÆ¶oß₫Áƒ©­P¬X±¿₫úK󖌒¹¹¹ñYL¥ qùØ8)dd&{RúöMé@̉°*Ùƒ̣OÂ^¤ ̣Dzɗ́Œ'Eŕïz]q´´´œ?~‘"ERü´páÂóçÏW~ƠHD9]J/Vk|÷&Åṕ ivB̃°&"ÅRPá bÅ{ö́1bD¥J•̣çÏ ₫ü•*Uúúë¯÷îƯ[©R¥ ÷¼mÛ¶nƯºyxxÔ«Wỏ¤I/^¼Đÿ»aaaƠªU7nœ₫_!¢œK^8Êç¦O—âeË’|i#6jc̃°&"Ų€®¼yó6lذa¢¢¢¬­­3ßç‚ V¬XaeeU£Fû÷ïûùù®]»VŸë—jµz„ œ)›ˆôe!û¹ºkV­’X³&ÎKŒÿü3Éáw„£&nŒÆboX¥HYWu¤j đơơuvṽ·oŸ¯¯ï₫ưûûöí{íÚµ¹sçêóơ5kÖœÓ₫˜'"J—“Çh8!Ạ̊K“>Á'̣Ö•ñ{,DDYDÑ…£AlƯº5!!aÔ¨QNNN–‰'ÚÚÚîƯ»W36d,XP¶lYÑ;AD&"W®$‹ï̃%Y”ß°¾ëÿàÑù%aú…ăùóçÍ̀̀˦s077oذaDDÄ¥K—̉øb\\Üøñăííí'Nœ(z'ˆ([IsÄYùṣqy4®=á)zOˆˆ’0ñÂQ­V988888ÈÛ5³†††¦ñƯŸ₫ùöíÛ?ưô“M*£²¥L₫út̉«´k'ÅÉ„ùŸxÁK»X ÅDï ‘Dq/ÇVLLL||¼N»­­-€çÏŸ§öÅ+W®ụ̈Ë/}úô©[·îÍ›7Ó»]Í,8rûöí}0r´‡Nt™đIQƠ®]̣CµjƠ³d#BôéóÉúơ‰‘ñ̉Û;É8“0éW—_.~¶¸]T;‹ Ÿ—́‹'E¸–-[NA)L¼pŒ`ee¥Ó®yíæƠ«W©}küøñÅ3fLƶ›3U8Ÿ«@9á¤Xï̃mtPëÖaưúÄøçŸí/¶ÓYA µ ‰Ă…,0rDÆ̀9'œ—l‡'E¬ä¿Ö“_!Ê!z«: `ÿ₫ư›7o‹‹K­Âû(;;;•J£Ó®^GsƯ19Ÿ‡Î=›ăQf¥2;W©RR,ŸPk ¦hc Sÿ#Ÿˆ² Å~~~íÛ·1bÄÔ©SŸ?Ơ¸qăÅ‹g`vD [[Ûäugdd$í{ÖrçÎÛ´iÓàÁƒ+Wæä D”Q ¦ư¹|\ä¯È˜Ú8ñó0Oô.)¬pœ5kÖ¤I“ÂÂÂtÚcbb–.]:]>ë‚̃œ#""4•¢VHHˆæ£äëX¶l™Û;wđ矺¹¹µmÛVôA"¢́ G)₫ï¿äŸ*$Å© &|,Æ̃%""%7õ\³f&677×¶«T‰úlÚ´éüùóéí¶iÓ¦ñññÇ×¶¨Ơj{{{äë—(Q¢MRơë×P¸pá6mÚ4lØPôq"¢́@^8ñœâ*«WKqÍ)w³ ̉Ô„Ú§‰ˆDQPá¸bÅ µZmff6eÊ”‹/jÛmmm/^œ7o^¿ÿ₫{z»íÖ­›™™Ù’%K´Óúúú†‡‡wé̉%ׇ¡x£££CBB4¯­Ơ¯_~R£GP½zơùóç?^ôq"¢́ V-)N¥püâ )Níâ¯đ•5¤9´Z …è#¢MA…ăíÛ·´nƯºOŸ>:o¥´hÑ¢Q£Fîܹ“̃n .€ïñ^ô₫QÎ¥ Â1""©8àêê <<<]}j 0`îܹ...{ö́y₫üyŸ>}Ö®]›|pG""#[µJ¿ÿ>ƠƠ~ůÚ87r‹Îˆr. ñàæævụ̀åŸbT«ƠçÎPJ>‚Ez´k×®]»TGĐmƯºuëÖ­SûÔƯƯă2QºƠ¯ŸäƯéTT¬ˆë×ăƯ»‘â x1p)–^ÆeÍbK´ÜÎ)@D(ècÅœ9sfĈ'>ü´ =v́ØđáĂ5…cụ̀åE§ID¤ùû1ÿü“ÚẒûØ©ÿy‹K¸¤÷cÿœ½{D”)¨p ĂDï$å ʺ⨰ÿ₫Ư»wGEEÅÅÅ%Ÿlˆ(?æøa‚y{KñÎéuVhcN'CDƤ¸ÂÑÏÏÏÓÓ³}ûö#FŒ˜:uêóçÏ£¢¢7n¼xñbµZù₫‰ˆŒ§{w)Nó1G={Jñ¬Yi­9ƒ ¢ vÑ n¢÷“ˆr e³fÍ4iRXX˜N{LL̀̉¥K§OŸ.:A"¢ôh!›!đc…ăÆRüÍ7éøi㻸ˆ@Ñ»JD9‚‚ Ç›7o®Y³F›››kÛUªÄ1›6m:ŸÚ|®DD wøđGW)]:«o„Ti–AÑ»GD9‚‚ Ç+V¨Ơj33³)S¦\¼xQÛnkk»xñâ¼yóøư÷ßE§ID”UäƒöÙGVĐK»è gÑé‘éSPáxûöm­[·îÓ§¥¥¥ü£-Z4jÔÀ;wD§ID”+ê¿®­m’ÅÇ?²₫lĐÆOñt>æ‹̃["2q *#""¸¸¸¤ø©««+€đđpÑi¥‡üÅêË—?ºú®]R\³æÇ»WCzkp ƈ̃["2q *ƯÜܤø£Z­Ö̀U]ªT)Ñi¥‡~jµo/Å¡¡zma3¤×n8:e)+Vpæ̀™#Fœ8qBÓźرáÇk Ç̣åË‹N“ˆ(=äî~́Åj•+¥¸Q£¯ßƯ=à¡]lŒÆ¢÷™ˆL–J9ƒ#†‡‡wèĐ!›Ñ666»víR₫tƠnnn¢³ $BBBR{ ‚DÉA'E%» ¨ßÜô#ɵÆ=ØÓ ­2–l:/ÙOåØßơ ºâèèè8õ<‡?µ±±ñññQ~ƠHD”y&Hqÿ₫z}%ÑÚ¸5Z‹̃"2M *Ô®]ûàÁƒC† qwwÏ—/++«̣åË{yy>|¸I“&¢$"J¿ÎÓû ù̀1zB–ù¦bªv‘;QVPVáÀÚÚÚÛÛ{Ç—/_¾xñâ¥K—vîÜ9nÜ8Ñ©eˆ|âÁmÛôü̉ÿ₫'ÅzN›5 Ó䋟ăsÑ{ND¦FA…ă¢B?¼Ihmm-:)"¢L“×€ú½ƒ¤o`O›¦ï¦ä£ó¬Çú³8+zç‰È¤(¨pôóó[¶lÙ²eË?.:"¢¬±c‡₫ëÖ¨!Åk×êû­‡x¨k£¶è&"“¢ Â±K—.àÁƒ¢s!"ïÜ9)î×OßoA‘ ^®áĂDd@ *‡̃©S'+V¬xúô©ètˆˆ §xñŒ}ÏÑQ×÷[³0Ë VÚžè+zÿ‰ÈDXˆN@2bÄ  j̃¼y¹rǻííU*Ư¿•—.]*:S"¢têѳg'ÆÁÁĐ{¬›7á́œ7l¨ï˜¢¥½Ö¸ë¾Æ×5PCß/¥BA…ă¡C‡´qlĺ¥K—DgDDd ̣ÂqË|óßsrJ²øđ!Ơw›đ 8¯tÖDMù{3DD£ [ƠDD&ËCPÿ«5Μ‘â ̉ñÅb(6㵋|Ø‘ˆ2OAW‡*:"¢¬wíZºV¯UK_½Jߦ|àó3~E¬fñs|¾ëDï?ec *G):""%5 &ÆŸ~{÷̉ñƯÄh¯5®Çúà OÑ;DDÙoUŇÇ &&]_]°@ƒƒÓ½åçÇmÎƯJD§ +‹-̉g5'''77· *äÎ[tÊDDz8~~‰ñêƠ><]ß^³ưû'Æ•*¥ïv·=́çãŒÑ,ª â‹2D”1*µ₫£;d1777ưWvuu?~™2eDg̣ˆÎ‚’ qqq%‘Ov|±*Upùr†¿ ¤c\­ ¨p75q Ô8‡s)®–Ï‹âñ¤(Pư]Ÿ]oU~₫ùçQQQ¢!"J¿+W2đ¥%K¤¸Ntưnhăó8¿ËE"Ê~T8~ùå—­Zµ̉ÄŸ|̣I‡† ̉µk×¢F-«U«Ö Aƒ:v́X @/_¾üư÷ßEgMDd$ÆI±|ŒưÉïPÅĐ7x#zŸˆ(›QPáøùçŸß¸q@·nƯ92{ölooï~øáÀ^^^®_¿̃®];ŸÔ®]À‰'DgMD¤·^½¤øåË tàă#ÅÍe$…ƯØ­-a)úˆQ6£ ÂqáÂ…¡¡¡NNN3f̀È›7¯¶ƯÜÜ|́رÅ‹‰‰Y²d €|ụ̀?Àÿư':k""½ (Å«Ve ƒñ̉x̃M¶•mЦ ¤÷»Í”ô[€ˆ”OA?2NŸ>  H‘"ffºY©TªÂ… ¸zơª¦%₫ü^¼x!:k""½5‘ …“¡ÂÀwßIqÇéa;¶kc5ÔCÁɈH_ *£££ܸqăÖ­[:_»v €öđ}ûöĐ<́HD”ưܾ±ïMŸ.Å»vepặ‡—cù?øGôá ¢́AA…c5¼ÿ¾oß¾ .¼pხ^½êëëÛ»wïØØXUªT0}úôyóæ(V¬˜è¬‰ˆŒm̀)îƯ;ƒ„#\s."̉“‚ ÇñăÇÛÛÛxưúợåË{÷îƯ¬Y³ÿưïóæÍ{₫ü9 ‹¾}û¸üaü³N:‰Îˆ(=´£xx̣$c}̀+Å7f0‘OđÉ2,Ó.j§%$"Jƒ‚ Ç%J,_¾ÜÉÉ)ÅOsåÊ5mÚ4ÍUIjƠªµnƯZtÖDDé‘é÷c4† ‘â 2ØÉWøª1k ¢ ØcCDʧ Â€‡‡Ç¡C‡¾ùæ›*UªØÚÚÈ“'ϧŸ~Ú³gÏtëÖM³ZŇ¾zơjÎ:HDÙLưúRœ‰Âq¹lôî›73ÎQƠÆOđd$F<8D¤x r0¹¨¨(+++•*›Ư@ɱÓ)'́R œ{R29uà®® JŒûơĂ5™ÈHvŸzÛ£m] u{„HGÎưÇ¢`9öw½²®8j́ß¿÷îƯÑÑÑqqq¯^½‘XX¤›À@)Îä,ZđHw+ÔMÈQ!¢lAq…£ŸŸŸ§§gûöíGŒ1uêÔçÏŸGEE5nÜxñâÅJ¾8JD¤/ùcd¦§‘²Ë]3q•° .Â"í"_”!¢Ô(«pœ5kÖ¤I“ÂÂÂtÚcbb–.]:]>|Q6e ÷c,\(Å~~™JjFÔE]í¢=́…"R87õ\óá!sssm»öÇM›6?^tDD™#"“…#€É“¥¸E‹Luu'µñK¼́ŒID¦KA…ă+Ôjµ™™Ù”)S.^¼¨m·µµ]¼x±föêß3ù ‘¢ü÷_&;ø₫{)>p ³éÈg”Ùˆ‘ÑQ"‰ÈD)¨p¼}û6€Ö­[÷éÓÇ̉̉R₫Q‹-5jàÎ;¢Ó$"Ê4++v6k–׫—Ù̃‚C‚µqoô~‰—F<.D¤t *#""¤6‫«+€đđđtơID¤ḌÇåoGgÈ„ R|ꔲ;ŒĂÚ˜;‘œ‚ G777)>ŨV«Ï; T©R¢Ó$"Ê4Ă½£±t©Wª”Ù̃ ÉHóaó%k"̉RPáX±bEgΜ1bĉ'4¡¡¡Ç>|¸¦p,_¾¼è4‰ˆ2M^Ü­^ù₫†•âë× à\̀-‡rÚEW¸ïà‘‚)¨på/Y/ÄÂØaœcCD¥ Â@íÚµ<8dÈww÷|ụ̀°²²*_¾¼——×áÇ›4i":A""‘?æxă†AºÜ!«ë “f¢´qt ßP$ÊÑ 3eªY[[{{{{{{ˆ²¶¶Q8sæ$Æ«Wc₫ǜwÙ©“¿xÿEÉ’™íÓ V₫đo„FÅ( ¿ ID9²®8ê`ƠHD&ËÍM ñbµÆ… RœÊàféÖ ¿‡4Î8_²&ÊÉtÅ166öâŋ׮]{ö́™æZ£££c¥J•ªV­jeĐÁr‰ˆ”%2̉P=U«–dqÿ₫̀ÎC¨1“ăø$NM£‚׉r&Eï̃½Û´iÓ+?üSKKË;9̉̃ăĐ‘ )T¼×¨(hïÖ´l µ ¼ưØo Ë7x£Y¬ú'pÂ8ljˆ”Cü­ê+W®4kÖ́ÇL±j»iÓ¦Ö­[_¹rEt²DD†#?æ̉%Cơje…2e¤ÅÅ‹ –o,bµñIœüßdíñ!"å\8>₫|Đ A?Ö¶äÊ•«páÂåË—/\¸p®\¹äk~ùå—/^¼›0‘ÁÈ Ç~ư Øq@€iÈ”åw¨gaÖ^́ͪƒCD$¸p\·n]䇇{5k¶nƯºëׯ=ztçÎG½qăÆÆ[|xBçƠ«Wk×®›0‘ÁÈßy6Đˆ0øhŒ̃…]Y²"…#‘bœ=›E·l)Ạ̊ k (R}Ú¯ăzí  $øVơîƯ»E""Ñ̀̀¥[Ø»ÚÙV¯ÆªU†ß„9̀à7Íb%TB”¬²t¿ˆÈÈ®®®¢‘h̃̃˜7/1>sµkgÅFæÎ•†/^¦_0¤2(³{[¡•fÑỌ̈[ØDdx«ˆH´Ñ£¥x₫ü,ÚȘ1R  ,ÙJK´\¥ÚE NdbrJá¸mÛ¶nƯºyxxÔ«Wỏ¤I/^¼H{ưØØØ5kÖ´mÛ¶J•* 48pàÉ“'ơÛQ:–M÷¼m[ÖmçêU)κû=C1t ¤*•µ#‘)É…ă‚ &O|ï̃½5jX[[ûùù}ùå—i ׿ÿŸ~úééÓ§uêÔ)]ºôÙ³g °té̉ôl–ˆHY*UÂ'ŸH‹Ë—gƠ†æbn't̉.²v$2¦_8øúú:;;ïÛ·Ï××wÿ₫ư}ûö½víÚܹsSûÊÖ­[¯\¹R­Z5ÿåË—ÿöÛo;wî´³³[ºtéíÛ·EnƯ¤8,,ë¶.ÅC‡fáíÀʨ¬]díHdL¿pܺukBB¨Q£œœœ4-'N´µµƯ»woB*¯1îÛ·À·ß~«DÛƠƠuÈ!ñññ¼aMDYÂ[6bvÖŒæ¨%b¼K—,ÜĐ\)âÚENfMdL¿p<₫¼™™YăÆµ-æææ 6Œˆˆ¸téR_ ±²²rww—7j^ ½CDdêÔ‘â,.7o–â;²v·îă¾vDxÄ;Ă9k·GDỲÄ GµZäààààà o/S¦ R¯W®\¹Y₫“póæMŽODdê´óf™3¤X•Å÷£¥Ÿâi9”Ëê½#¢¬câ7bbbâăăí́́tÚmmm<₫<Åo•/_^§å̀™3¾¾¾ỵä騱£>ÛussÓiÑÜ₫&Q>|(:̉Å“¢£påÊy>¼ö’¥ÛêÓß}ç¢]üùç§mÛFkâ¬8/Á.åRJßÁêoªo{”…/›₫c®¥|̣¥œÍÄ GÍ«ÓVVºSX[[xơêƠG{ˆß°aẮÙ³ăăăçÍ›çèè¨ÏvDï:érqqÉ|'dX<)ILœˆ=5¡Ëßcøđ,ƯZ-]k1ÂI>cvVœ5ÔÚ÷c.æ½8Êeç³N₫c+ù¯ơäWˆr¿Umgg§R©bbbtÚ£¢¢đáºcÎ=Û®]»~øÁÑÑqƠªU­[·½CDdºzôâ,~̀1ù?û,Ë7'ŸEæOü9Y3g6e%/-,,lmm“_YŒŒŒ }Ï:¹wï̃ưđĂưúơ ûúë¯÷îƯ[·n]Ñ{CD9Fp°6²i“>Œ—/³|‹̣Úq5V‰/°›Dd@&^8pvvˆˆĐTZ燜S~¿/!!à˜1k×®mڴ醮—‡ˆ( 9û¥ăC‡¤Ø̃̃[”׿à—!bä]&¢̀0ư±iÓ¦ñññÇ×¶¨Ơj{{{¿²nƯºôêƠké̉¥i\•$"20ùhưe„ 6m ùÛƒ©OŒ`ḤÚq%VĂ0cl•ˆ Áô ÇnƯº™™™-Y²Dó\#__ßđđđ.]ºäÊ•KÓ¢ymM­V¯_¿>₫ü&L;å0£GKñüùÆÙæ‹R}F¥‘'9ÍuÇØØØ7n$ÿ”¯È‘é™=[*CBr:ăü¨“׋°(A»±[ôÁ ¢´¨Ôjuæ{!9777ă¨4!!!MixRR6l–-KŒ7oN2±tV D™2̉¢13hkGưÑÿ7üf¼mgüÇ¢@9öw½é?ăHD”tí*Å¿ÿn´Íºº¢@i±W/ăí±üyÇ5XÓ·m"J'DDJâé)Å{÷sËOŸJñ¦MĐcj-ƒ‘×;±ó3dưpäD”!,‰ˆ&OQ[>xPåĂô¼v<ŒĂ5QSÔA ¢4°p$"R˜~â_5æ–?û %J¼×.1îàỤ̈Úñ<λ!‡ÎL¤d,‰ˆf̀)₫ö[#oüèчÚxåJcﺼv¼‹»…PÈØQX8)˜üÁCcñó“b•*ăưdŒ¼v|ŒÇ̣w®‰H8DDÊ#G1"ÂÈïỤ̈ÉVÇ7ö̃ËkG$¯‡ˆÄbáHD¤<̣Ç'O6₫öŸ<‘bíØàÆÄÚ‘H™X8)OăÆR¼b…~“ĂmüÖÔPÛÀFʵ#‘°p$"¢ôïŸd\ Áƒäđ ¯*¢¢v‘µ#‘p,‰ˆiÄ)>p@H õH±¯¯˜Ăp ×Ú¢­vQU(BŤBD,‰ˆjæL)ñ˜£ÆO?I±Ö₫Â_Ă1\»XÅ}à#ê€åp,‰ˆ)~)>^T'¢T)i±G1iüŒŸç@zIg"&~ïE¢œŒ…#‘R-*:¸wO·lÁ;b̉‹±[±U»ø¾ë„N‚ QÎĂ‘ˆH©äƒ̣ÈïƯR\®œ°4º¡ÛiœÖ.₫?J¢¤ÀĂB”±p$"Rª¾}¥XÜcÜƯÑ¥‹´X¦Œ°Lj£öHḯÜÇ}¾jMdL,‰ˆ²ƒ„±Ûß¾]±i“°Ḷ ‡'……#‘‚uè ÅbsQ˪µ^½Äæ’ÂÔ20öÜŒD9 G""“?æøí·¢³I’¨Ñy´ÔPB!í¢#åoÏQV`áHD¤`îîŔç':L iÑÛ[p>akƒ6ÚÅîè>"¦¸!Ê1X8Q:¼/Å  Gk7vOÁí¢/|K£´àœˆL G""e›1C7n  ˜Ñy´f`Æ?øG»x÷øº QaáHD¤lS¤ËiJx̀€»;¾₫ZZ₫°#€FhÄW­‰Œ€…#Qöñï¿¢3H´x1̣ä‘ûơ€”^µ̃ŒÍ¢“"2),‰ˆO>÷`h¨èl½‘ÆáÆÚµ8yRtB5Ộg{¢gtÉDD” G""ÅÛ±Cû÷äÑ#)®__t6"P^;îÀ̃¶&2DDW£†9":IÁ‚˜6MZTÂĂ܉̣T:7²‰(X8eR$:ÉÔ©($ ÂbÅD'ôAGtÔ©Í`Ɖ2‰…#Qv°f+én5€°0)~ø[•T›©¡6‡¹v±;ºË'›!¢ôbáHD”Tª$Å yEæƯ;)î̃¯_‹NH&q=ĐC»øùÈ#Q†±p$"Ê&j×–â›7Eg“D®\Ø¿_Z´±PR›°ÉI&lTAu ÇDçE”ư°p$"Ê&~ûMv·@óæ9RZT΋2Ñ9q̣–FhÔ½EçE”Ͱp$"Ê&Ê–•â Dg“‚… Q¦LÊù*9̀ƠP…4(æFlämk¢taáHD”}4j$Å—.‰Î&IbooÑ %Đïñ½¼EƠZ¬QöÀ‘ˆ(ûPöƯj µl œ… qđ è„’™ŒÉOñT̃̉ưZ£µè¼ˆ²DDÙ‡‹‹_¿.:›T½z%ÅÍ›‹Î&%P@ µ¬´-{±—·­‰>…#Q¶̉¬™Ÿ>-:›”ÙØ`ófiQi/ÊhE!ê+|%oQA5óEçE¤\,‰ˆ²ùHà_|!:›Tuï¾}¥EÅÖ˰́1Ë[Æ`Œ#EçE¤P,‰ˆ²•Â…¥X₫*̣ü₫;6”[;:ĂY uy”×¶D BƠQ‘â°p$"ÊnÚ¶•â₫MZüưáä$--ñ®²ÚMÜ\ợ–&hRUEçE¤,,‰ˆ²›lr·ZăÉ)₫ï?|ö™è„R×½ƠPË[.ă² ªKPâÈGDB°p$"Ên>ùDÿưWt6' çđa &:¡´³…ú $)Ç«¡'¢S#2*DDÙV£FR¼aƒèlôU¨níxâ„èœôPåƠP÷AyăDLTA†°ŒöJ”Ͱp$"ʶä£÷é“ánŒ¯P!đQAµỤ̀¼é`áHD”ưùùI±üdvcµcK´TC½ «tÚGa” ª¿ñ·è‰2……#‘Ip’½qé’èl2N­F¾|̉¢J…Í›Eç”~0@ ơ0 Óio‹¶*¨üá/:A¢ báHDdΜ‘ấ6.èè${Đ³'Ú·S†,Á5ÔuQW§½1« º„l\ßSÅ‘ˆÈ$¸¸Hq\\ÆûQ†3gP¾¼´ø×_Ụ̀¶µÆIœTC]EtÚ«¡ ªă8.:A¢t`áHDd*Ö®•âO?MfƯ¼‰­[“´¨TxöLtZơckö†h¨‚j+¶f¨W"ccáHDd*>ÿ\ƒƒñô©è„2«[7Ư×eœœ°p¡è´2*/̣¾Â«gxf–́—owtç›×”-°p$"2!ÇI±³³èl C­F₫ü̉¢·7¬¬Dç” pŒGü5\K₫‘æÍëj¨&:G¢T±p$"2! ÀÑQZœ=[tB†‰Áƒ¥Å˜¨TضMtZ™PƠP?ÅS{Øë|t —TPUDÅhD‹N“H G""Ó" pÂÑÙ̀I.§øßÿ’¼”@çx®†º<Êë|t7¬aÍ¡IiX8™œq㤸\9ÑÙLƒº<₫û/T*øgÿQoâ¦j¤P·EÛR.¥¾Ä—¢s$X8™ ùê;wpû¶è„ I­Ö½Ú¸qö~êQ+Áj¨SœÛúü¢‚ I8DD¦èæM)._>ăư(̉¬Yº—5O=+:3Cø ?©¡̃‡})~ª™{¦:ˆN“r(DD¦¨|y¸¹I‹&ô°£–Z/¾H̉2oT*8 :3Chj¨ßàM^äM₫éŸøSsrLđ̀’’±p$"2QwîH±©¼^­cơjîƯkÖˆÎ)ËơêµG¤đQPªTJ…ÿưOt–†6£5ä.́*i¬¹›ë¡¦ˆ,̣½Đ+‘¢Ó'¥cᘂ€€___ggç}ûöùúúîß¿¿oß¾×®]›;w®èÔˆˆ2*_>¼—½*ñÅX±BtNÆàé µ:Ơ·mƒJ• eËbÓ&ѹT{´ÿÿª¡DähŒN{åÛ¸½ ›la«©# ¢àŒ¹ˆ‹¢w‚‡…c ¶nƯ0jÔ('''MËĉmmm÷îƯ› :;"¢Œ²°H2ăÊW_A¥B‹ Y–+Wj5ÔjôïỴ̈ èƠ+±ˆôô„)](Èüó0Oṣ®ƠGư~å ̀ÇüꨮJ<$*kXwA_ø̃À Ñ;D"±pLÁùóçÍ̀̀7n¬m177oذaDDÄ¥K—DgGD”9:³ơ8€âÅË¥{÷D'—å~û j5Q©RªëüóÆûP1©+ºtÁ÷ßẵ=¼{'z2§"*ÇqMù¾Á7Ö°Öç‹Ñˆ̃ƒ1¸"*ª¤c£RAU •Ê¢́Oøi6œÀ‰P˜₫ß!9™…èG­V988888ÈÛË”) 44´zơê¢s$"ʵ:…ÉU₫ù¥K»ˆNÍ8Jwc†cÉ^´ F©4V‹Ăرß}'*ß,:-—Dï èµ¹̉7úău\0 “D1D'  G]111ñññvvv:í¶¶¶?®O'ṇ)bûLwÜƯlááÇ¢S ]<)båƯºƠñ›orå€KŒi[‚áÚØfà»ä” ›á`3ô_“¸X̣_¬ŒÜïĐøÑ™‘‚°pÔ¥yuÚÊÊJ§ƯÚÚÀ«W¯ôé$ §₫%¢`..9äJJv“"’‹ ºu€sç0h®]xà3>î£Ä ÔÿíÿDû7È+:/A₫-‰ûu«_À÷Sđ̉Ơ.•ăAæD,uÙÙÙ©Tª˜˜ö¨¨(|¸îHDd:jÖL̉đêUxyÅ=~la‘ôWĂÓ§øđ¦ äáC-ªWcL ̣%½†÷ấí3̃ad$ll’´DEÁÚ:ăFDèLä]âíÛyNöÆI@³Ñ÷AËÂïÂâÿ‹/ø_œ³&¸ùε˜Å#₫Ç9´—·ÄẰºïV>Œ+XÔâq†`f–´ÏÇq Z<Ëp‡oƠ¹̣¨’ܤ·w4O:†ñ•‚[ư•Z‡ñÎáqÅÆ•x_,,®ÄĂ·ùc,¬¢¬bÔùbƠV1 ùbă =5©;ƒx\ÑÇ êÓoÿÚüE’¯'ä{c“7ăxn₫,Éci ¹ằ̃Yèó](‰ˆ…£. [[ÛäW###8%ÿéIDd*WÆùó¡!!¼œ¢/Sư¤¨̃ünH:N₫É虡•̃ß- ª|¤?»”KêƯ¨çƠư;´‚^’}×ÍÍ-g>æÈ·ªSà́́¡©µBBB4‰ÎˆˆˆH )hÚ´i||üñăǵ-jµÚßßß̃̃̃ĂĂCtvDDDDb°pLA·nỪ̀̀–,Y¢y®€¯¯oxxx—.]råÊ%:;""""1øŒc .gÏM¾Ï‹1½{÷î—_~éܹ³‡‡G“&MF˜|5#vss»zơjŸês Lû4™O›6Mt¦`Á‚³gϪQ£FlĺéÓ§Ï;×®]»\¹r‰N-Gˆ‹‹ëÛ·ïöíÛăăăkÖ¬iccsîܹ;w™™Ơ¬YS»O“(jµzذa!!!nnnÍ›7—Ä“b|Gṇ̣̃ .UªTÉ’%Ï;ççççîîîââ¢]‡çŘâăăûöíëçç—+W®5jäÊ•ëØ±c[¶l©Y³f‘"E´«ñ¤ÇâÅ‹¯_¿̃­[·‚ ê|¤Ï)0ưÓ¤¦L»sçNÙ²e4hđäÉMË̀™3Ë”)3cÆ Ñ©å6l(S¦LÏ=cbb4-wï̃­Y³f¹rånƯº¥iáihơêƠeÊ”)S¦̀رcåí<)Æ÷̣åËêƠ«W®\ùÂ… –«W¯V¨P¡nƯºñññ#Óü9räû÷ï5-§N*W®\óæÍµëđ¤dµW¯^?₫»ï¾Óü°ºråÎ úœ‚œpx«Ú¶nƯ0jÔ('''MËĉmmm÷îƯ› :»aß¾}¾ưö[KKKM‹««ë!Câăăµ7¬yD \°`AÙ²e“Ä“b|~~~‘‘‘C† ©V­¦¥R¥J­Zµ ¿~ưº¦…çÅÈ.]º _¿~–:uê”+Wîßÿ}₫ü¹¦…'%«µk×®wï̃›7oNm}NAN8M, àüùófff7Ö¶˜››7lØ0""Bóă€²ZHHˆ•••»»»¼ÑƠƠ@hh¨f‘§Iˆ¸¸¸ñăÇÛÛÛOœ81ù§<)ÆẃØ1•JƠ±cGyắÙ³*W®¬Yäy1²B… ĐÖˆÔjơË—/Í̀̀´¥$OJVûᇖ-[¶lÙ²ºu릸‚>§ 'œ&™¥V«ƒ‚‚äíeÊ”¬j¡,µråÊä&̃¼y@±bÅÀÓ$ÎÏ?ÿ|ûöíŸ~úÉÆÆFç#!nܸaoo_°`Á .ụ̈Ë/sæ̀ù믿bccµ+đ¼_Û¶móæÍûĂ?œ>}:666,,lÊ”)>́Ö­›æOÔ¯_¿iÓ¦M›6•?Wª¥Ï)È!§ÉBtÙ^LLL||¼N»­­-’₫IY§|ụ̀:-gΜñơơÍ“'æÊ O“W®\ùå—_úôéS·n]M/Ç“b|ï̃½{ưúué̉¥§M›¶iÓ&m{±bÅ.\X¡Bđ¼ˆàææ¶nƯº₫ưû÷ïß_ÛØ§OŸI“&ibáô99ä4ñcfi₫R·²²̉i·¶¶đêƠ+Ñ æ8ñññk×®ợ̣‰‰™5k–££#xDˆ?~|±bÅÆŒ“Ú àI1®×¯_ Ú³gÏÙ³gưưư¿₫úëÿ₫ûoäÈ‘3Âób|‘‘‘³fÍvwwïÑ£G³fÍ,--ÿøă#GhVàINŸSCN¯8f–J¥‰‰Ñi‡¿3ÈhÎ=;}úô{÷î*TèÇÔ>ªÂÓd|>>>>Ü´i“ö%<)Æ—7o^M0kÖ¬&MhâáLJ……ùùùưư÷ß]»våy1¾ñăÇ_¼xqâĉ_|ñ…¦%,,¬G̃̃̃₫ùg©R¥xR„ÓçäÓÄ+™eaaakk›ü/‰ÈÈHÚ÷ª(«½{÷î‡~èׯ_XXØ×_½wï^ùÎ''§\¹r©T*y£æßK\\œf‘çŘ"""”,YR§½T©R={¦YäINŸSN GhÚ´i||üñăǵ-jµÚßßß̃̃̃ĂĂCtv9ºuë8Đ«W¯¥K—¦öWO“1•(Q¢MRơë×P¸pá6mÚ4lØP³OñyzzFFF̃½{W̃¨(D;Ö&Ï‹1•,ỶÜÜ<00P­VËÛ”.]Z³È“"œ>§ Gœ&Ñ#›‚ÿ₫û¯lÙ²-[¶|ưúµ¦eÅeÊ”™={¶èÔr„„„„Ï>û¬Zµj±±±i¬ÆÓ$Ö7’ÏĂ“b|·nƯ*S¦L·nƯ"""4-×®]óđđ¨Q£Fxx¸¦…çÅÈ\¦L™… j'ï¹{÷níÚµ+T¨¤iáI1o¿ư6Å™cô99á4©ÔIÿÄ¡ŒY½zµO‘"E4hpÿ₫ư3gΔ/_~ơêƠÉ_Ë'ƒ{úôiƒ ,--?ưôÓäŸvêÔ©OŸ>˜§I ›7ovîܹ}ûösæ̀‘·ó¤ßÊ•+çÏŸokk[½zơ˜˜˜óçÏ«Tª9sæ´jƠJ»Ï‹1…‡‡wíÚơÑ£G%K–,_¾|DDÄÅ‹&OÜ»woíj<)Æ1ỵämÛ¶mƯº5ù#Úúœ“?MæÓ¦Mƒ)đđđ(Y²ä“'ONœ8aaaѪU+Ÿä#SVđóó‹‹‹{’²eËjß’áièÙ³g[¶lqssk̃¼¹¼'ÅøªW¯^¸páààà7n¼}û¶víÚóçϯU«–|cÊ—/ßÿ₫÷??¾råÊû÷ï«W¯>{ölÍKKZ<)ÆqäÈ‘[·nuëÖ­`Á‚:és L₫4ñ#é…/Ç‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8‘^X8Qº½{÷nÓ¦M hĐ AÅ›7o₫å—_®^½úÍ›7úw²yóf77777·.]º-óÀÀ@·NŸ>-àØ¥äèÑ£‡>|øđóçÏS[ÇÏÏO“vụ̀å###“¯àéé©Yaö́ÙúozÑ¢Eo 6Lôa ¢l€…#ư¿½ûiêjă~Z-n-¬L3"cBÂMÛש­TĐAF†:„á\6G‚Qܲ 3%QŒ0\F'°¸Å.Ë26"l,l 2°a &&¦Á2™Ă\­Â ]ß?Ñ“¦üØ)¨ï÷ó×¹÷{ϹWb<çGg¦§§'))©°°°½½}ppĐápü₫ûï­­­ÅÅÅ›7o>wîÜBwđÁ“ŸŸŸ›››››{åÊ•©ê$$$øøøBœNg{{»ÇƠ¾¾>‹ÅBË[¶lY耇G˜³Ù¼cÇëׯ³34¡₫üóϽ{÷öööryỔ¥K%‰D"Y¶lÙB¿Ö@$=÷Üs´ÜÚÚêqơüùó´ ‘Hbbbº³đĐBà3P\\|÷î]ZNKK«­­5?ÿüsQQÑ̉¥K !###{÷îạ̊¨”””ææææææÊÊÊ{ïØüáp8ä›̀[Ó,•x₫üy—Ëå~©­­Í£€7 p®:::ZZZhùơ×_?zôèªU«|||üñmÛ¶}øá‡ô’Ùlîïï§e÷)tN§³¬¬lưúơeeed9ăăăUUUZ­vƯºu«W¯NNN~ûí·=R˜îÏ´Z­o½ơ–B¡Ø´iS||üÉ“'gñ^î´ÙlÇKKK‹‹‹{ñÅ?ùä“ñññY4=ƠÜÁüü|÷™ˆÇ—Éd,ÏÉÉ‘Éd###“ö“V uww³ó###¿ụ̈ -oƯº•ÿçŸ~øá‡¬¬,•J£R©²²²Îœ9ă₫FÓizÎX­Ö¢¢¢ŒŒŒ¸¸¸„„„¼¼¼{üK€û–ïBwUUU´ ‰̃|óM«7nܰaĂàà !äÊ•+¡¡¡8pæ̀™iïp8233/]ºÄΘL&“Éôư÷ß>>‡̣óó£]Ú¿?=ñâEö¨ §Q#!$,,lÍ5´́¾ÜKMs(—Ë !.—‹††ưưư„+VDEE±[·n------ÍÎΦǵv;Ûhó¯¿₫º÷ΰØtûöí́dZZˆi±X¦Ù]PÈ8'tÑ45Í>ƠS‰ŒŒü×psƯºu4f6› x<^TTÔúơëƠjơÓO?=±~DDÄO<á~;-¸\®•+Wδ“Ù>‘HÄèí¦¹KJJ¢[—Ÿ;w.55•S»/‹a]²ÙlmmmƯƯƯ¿ưö›Ñh¼sçÎö„&Y !»ví´B¿L&ó̃§€ù‡Œ#p²hÑ¢ÀÀ@Z˜£nß¾}ëÖ­[·nM\̀îÆ={233iâr¹zzz*++ÓÓÓ333'F«AAAî‡àÑG¥e6ª>#lÈx̉C¯6ÍF£¡)=:‚Ïötô؈glĺرcJ¥2??ÿÔ©SƒÁét̉¡í9a·ÛÙbđ© {ơSÀüCà\ÅÅÅÑBKKˤ[º$%%) …BÁÖ_3ÓaŒ¯¯ïÁƒ ĂG}”’’" Ù¥_ưuâ/é ¹²ñt‰DâƠO±€M‹Åb:†n³Ù.\¸@7â ơÈíUVVêơz§Ó)•J ¿ûî»®®.•J5WƯxä‘GXúÔ©SM“INNöê§€ù‡À¸bSÙ,Ë×_íqµ¥¥…%Ûè<¼q8V«Ơjµ:-[¶”–– ½^Ï©ÙV…ŒÉd¢»ÿPtLyÑ¢EÁÁÁ^ưÜ›öø]iˆsvXr±´´”N©ô§&„|ơƠW´pèĐ!­V+“É|||nܸÁ½•íù+hÁét†¸‰DB¡P(N³<P€+•JOËG)//¿yó&!dll¬¶¶–-Ư ‰ŒŒœéĂûúú₫ó?tDŸøøømÛ¶Ñ î HjlĺđáĂccc„›7o~đÁô¼Z­vÿ!Doø×¦Ù ÈK—.±íĐ;;;§,—Ö5 ŸÏ'„\¾|™ñïÜ¹Ă†‰Yü×ÓÓĂeî=g ß|ó ›ÚĐĐ —Ë …J¥Û)•p?Àâ˜÷̃{/==}ttÔårét:Nh³ÙœN'­°xñbN7‹¸M&“Y­V§Ó©ƠjU*•H$º~ưzss3­ Ñh&̃ƠØØ¨V«Ÿzê)£ÑH‹ù|₫={æáSLß4Ûˆ{tt455522rxx˜­&ñ  é|Á “ÉôÊ+¯øúN÷ŸsPPĐ5kX$Æöh¤üưưưưưé38PWWÇăñÚÚÚ¦ÿ͘™öü7̃8}ú´Ífûñdz³³år¹Édbs.wîÜÉVÀCG˜ˆˆ½^ï¾>zxx˜E‰äă?Eº‘ÂçóËËËéà¦ƠjưöÛo?û́³úúz:+—Ë_{í5[Ö®]<88xáºÑ]r¼º¨™cÓÑÑÑ/¼đ-ŒŒtuu™Íf©TʲtO£…‹/–””pÉ;ºoN4qœÇămܸ‘µ̃ÜÜüÓO?-_¾\¡PĐ“4U<)î= …ÅÅÅ4ÜÙÙyâĉ††ºăV«ÍËËóö¿̀?03Ï<óLcccAA\.‹Å~~~O>ù¤Z­.((8{ö́† fưäƠ«W755åææÆÄÄ,[¶̀××W(>û́³EEE_|ñ[m͈D¢ªªªíÛ·‡††%&&~₫ùçóđ¸4]RR²oß¾ˆˆ@•}úôéIW—¤¤¤ˆÅb@Îe!Qbb"­&ÖS³gFDDBø|₫ªU«rrrjjjèƠºº:6 =÷«ƠêÚÚÚôôôèèh@ •J5Í—_~YXXÈå-àĂ›¸?Àư¬¬¬¬¢¢‚’P^^₫̉ô,Œ·´´)FùfsN¾¾¾`na¨8Aàœ pN°88AÆ8Aàœ pN8'€“ÿˆ3là iÖIEND®B`‚fuzzy-logic-toolkit-0.6.1/docs/bounded_difference.html000066400000000000000000000112641466512601400231040ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: bounded_difference

Function Reference: bounded_difference

Function File: retval = bounded_difference (x)
Function File: retval = bounded_difference (x, y)

Return the bounded difference of the input. The bounded difference of two real scalars x and y is: max (0, x + y - 1)

For one vector argument, apply the bounded difference to all of the elements of the vector. (The bounded difference is associative.) For one two-dimensional matrix argument, return a vector of the bounded difference of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise bounded difference.

See also: algebraic_product, algebraic_sum, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/bounded_sum.html000066400000000000000000000111631466512601400216140ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: bounded_sum

Function Reference: bounded_sum

Function File: retval = bounded_sum (x)
Function File: retval = bounded_sum (x, y)

Return the bounded sum of the input. The bounded sum of two real scalars x and y is: min (1, x + y)

For one vector argument, apply the bounded sum to all of elements of the vector. (The bounded sum is associative.) For one two-dimensional matrix argument, return a vector of the bounded sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise bounded sum.

See also: algebraic_product, algebraic_sum, bounded_difference, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/cubic_approx_demo.html000066400000000000000000000104311466512601400227670ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: cubic_approx_demo

Function Reference: cubic_approx_demo

Script File: cubic_approx_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a non-linear function using a Sugeno-type FIS with linear output functions.

The demo:

  • reads an FIS structure from a file
  • plots the input membership functions
  • plots the (linear) output functions
  • plots the FIS output as a function of the input

See also: heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/defuzz.html000066400000000000000000000122421466512601400206160ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: defuzz

Function Reference: defuzz

Function File: crisp_x = defuzz (x, y, defuzz_method)
Function File: crisp_x = defuzz ([x1 x2 ... xn], [y1 y2 ... yn], defuzz_method)

For a given domain, set of fuzzy function values, and defuzzification method, return the defuzzified (crisp) value of the fuzzy function.

The arguments x and y must be either two real numbers or two equal-length, non-empty vectors of reals, with the elements of x strictly increasing. defuzz_method must be a (case-sensitive) string corresponding to a defuzzification method. Defuzz handles both built-in and custom defuzzification methods.

The built-in defuzzification methods are:

MethodValue Returned
centroidReturn the x-value of the centroid.
bisectorReturn the x-value of the vertical bisector of the area.
momReturn the mean x-value of the points with maximum y-values.
somReturn the smallest (absolute) x-value of the points with maximum y-values.
lomReturn the largest (absolute) x-value of the points with maximum y-values.
wtaverReturn the weighted average of the x-values, with the y-values used as weights.
wtsumReturn the weighted sum of the x-values, with the y-values used as weights.
fuzzy-logic-toolkit-0.6.1/docs/drastic_product.html000066400000000000000000000113641466512601400225040ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: drastic_product

Function Reference: drastic_product

Function File: retval = drastic_product (x)
Function File: retval = drastic_product (x, y)

Return the drastic product of the input.

The drastic product of two real scalars x and y is:

     min (x, y)     if max (x, y) == 1
     0              otherwise
 

For one vector argument, apply the drastic product to all of the elements of the vector. (The drastic product is associative.) For one two-dimensional matrix argument, return a vector of the drastic product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise drastic product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/drastic_sum.html000066400000000000000000000113241466512601400216240ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: drastic_sum

Function Reference: drastic_sum

Function File: retval = drastic_sum (x)
Function File: retval = drastic_sum (x, y)

Return the drastic sum of the input.

The drastic sum of two real scalars x and y is:

     max (x, y)     if min (x, y) == 0
     1              otherwise
 

For one vector argument, apply the drastic sum to all of the elements of the vector. (The drastic sum is associative.) For one two-dimensional matrix argument, return a vector of the drastic sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise drastic sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/dsigmf.html000066400000000000000000000155771466512601400205760ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: dsigmf

Function Reference: dsigmf

Function File: y = dsigmf (x, params)
Function File: y = dsigmf ([x1 x2 ... xn], [a1 c1 a2 c2])

For a given domain x and parameters params (or [a1 c1 a2 c2]), return the corresponding y values for the difference between two sigmoidal membership functions.

The argument x must be a real number or a non-empty list of strictly increasing real numbers, and a1, c1, a2, and c2 must be real numbers. This membership function satisfies the equation:

     f(x) = 1/(1 + exp(-a1*(x - c1))) - 1/(1 + exp(-a2*(x - c2)))
 

and in addition, is bounded above and below by 1 and 0 (regardless of the value given by the formula above).

If the parameters a1 and a2 are positive and c1 and c2 are far enough apart with c1 < c2, then:

      (a1)/4 ~ the rising slope at c1
          c1 ~ the left inflection point
     (-a2)/4 ~ the falling slope at c2
          c2 ~ the right inflection point
 

and at each inflection point, the value of the function is about 0.5:

       f(c1) ~ f(c2) ~ 0.5.
 

Here, the symbol ~ means "approximately equal".

To run the demonstration code, type "demo dsigmf" (without the quotation marks) at the Octave prompt.

See also: gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [0.5 20 0.3 60];
 y1 = dsigmf(x, params);
 params = [0.3 20 0.2 60];
 y2 = dsigmf(x, params);
 params = [0.2 20 0.1 60];
 y3 = dsigmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'dsigmf demo');
 plot(x, y1, 'r;params = [0.5 20 0.3 60];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [0.3 20 0.2 60];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [0.2 20 0.1 60];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/einstein_product.html000066400000000000000000000112621466512601400226660ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: einstein_product

Function Reference: einstein_product

Function File: retval = einstein_product (x)
Function File: retval = einstein_product (x, y)

Return the Einstein product of the input. The Einstein product of two real scalars x and y is: (x * y) / (2 - (x + y - x * y))

For one vector argument, apply the Einstein product to all of the elements of the vector. (The Einstein product is associative.) For one two-dimensional matrix argument, return a vector of the Einstein product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise Einstein product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/einstein_sum.html000066400000000000000000000112071466512601400220110ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: einstein_sum

Function Reference: einstein_sum

Function File: retval = einstein_sum (x)
Function File: retval = einstein_sum (x, y)

Return the Einstein sum of the input. The Einstein sum of two real scalars x and y is: (x + y) / (1 + x * y)

For one vector argument, apply the Einstein sum to all of the elements of the vector. (The Einstein sum is associative.) For one two-dimensional matrix argument, return a vector of the Einstein sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise Einstein sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/evalfis.html000066400000000000000000000306451466512601400207470ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: evalfis

Function Reference: evalfis

Function File: output = evalfis (user_input, fis)
Function File: output = evalfis (user_input, fis, num_points)
Function File: [output, rule_input, rule_output, fuzzy_output] = evalfis (user_input, fis)
Function File: [output, rule_input, rule_output, fuzzy_output] = evalfis (user_input, fis, num_points)

Return the crisp output(s) of an FIS for each row in a matrix of crisp input values. Also, for the last row of user_input, return the intermediate results:

Intermediate ResultValue Returned
rule_inputa matrix of the degree to which each FIS rule matches each FIS input variable
rule_outputa matrix of the fuzzy output for each (rule, FIS output) pair
fuzzy_outputa matrix of the aggregated output for each FIS output variable

The optional argument num_points specifies the number of points over which to evaluate the fuzzy values. The default value of num_points is 101.

Argument user_input: user_input is a matrix of crisp input values. Each row represents one set of crisp FIS input values. For an FIS that has N inputs, an input matrix of z sets of input values will have the form:

   [[input_11 input_12 ... input_1N]   <-- 1st row is 1st set of inputs
    [input_21 input_22 ... input_2N]   <-- 2nd row is 2nd set of inputs
    [             ...              ]                  ...
    [input_z1 input_z2 ... input_zN]]  <-- zth row is zth set of inputs
 

Return value output: output is a matrix of crisp output values. Each row represents the set of crisp FIS output values for the corresponding row of user_input. For an FIS that has M outputs, an output matrix corresponding to the preceding input matrix will have the form:

   [[output_11 output_12 ... output_1M]   <-- 1st row is 1st set of outputs
    [output_21 output_22 ... output_2M]   <-- 2nd row is 2nd set of outputs
    [               ...               ]                  ...
    [output_z1 output_z2 ... output_zM]]  <-- zth row is zth set of outputs
 

The intermediate result rule_input: The matching degree for each (rule, input value) pair is specified by the rule_input matrix. For an FIS that has Q rules and N input variables, the matrix will have the form:

            in_1  in_2 ...  in_N
   rule_1 [[mu_11 mu_12 ... mu_1N]
   rule_2  [mu_21 mu_22 ... mu_2N]
           [            ...      ]
   rule_Q  [mu_Q1 mu_Q2 ... mu_QN]]
 

Evaluation of hedges and "not": Each element of each FIS rule antecedent and consequent indicates the corresponding membership function, hedge, and whether or not "not" should be applied to the result. The index of the membership function to be used is given by the positive whole number portion of the antecedent/consequent vector entry, the hedge is given by the fractional portion (if any), and "not" is indicated by a minus sign. A "0" as the integer portion in any position in the rule indicates that the corresponding FIS input or output variable is omitted from the rule.

For custom hedges and the four built-in hedges "somewhat," "very," "extremely," and "very very," the membership function value (without the hedge or "not") is raised to the power corresponding to the hedge. All hedges are rounded to 2 digits.

For example, if "mu(x)" denotes the matching degree of the input to the corresponding membership function without a hedge or "not," then the final matching degree recorded in rule_input will be computed by applying the hedge and "not" in two steps. First, the hedge is applied:

   (fraction == .05) <=>  somewhat x       <=>  mu(x)^0.5  <=>  sqrt(mu(x))
   (fraction == .20) <=>  very x           <=>  mu(x)^2    <=>  sqr(mu(x))
   (fraction == .30) <=>  extremely x      <=>  mu(x)^3    <=>  cube(mu(x))
   (fraction == .40) <=>  very very x      <=>  mu(x)^4
   (fraction == .dd) <=>  <custom hedge> x <=>  mu(x)^(dd/10)
 

After applying the appropriate hedge, "not" is calculated by:

   minus sign present           <=> not x         <=> 1 - mu(x)
   minus sign and hedge present <=> not <hedge> x <=> 1 - mu(x)^(dd/10)
 

Hedges and "not" in the consequent are handled similarly.

The intermediate result rule_output: For either a Mamdani-type FIS (that is, an FIS that does not have constant or linear output membership functions) or a Sugeno-type FIS (that is, an FIS that has only constant and linear output membership functions), rule_output specifies the fuzzy output for each (rule, FIS output) pair. The format of rule_output depends on the FIS type.

For a Mamdani-type FIS, rule_output is a num_points x (Q * M) matrix, where Q is the number of rules and M is the number of FIS output variables. Each column of this matrix gives the y-values of the fuzzy output for a single (rule, FIS output) pair.

                     Q cols            Q cols              Q cols 
                ---------------   ---------------     ---------------
                out_1 ... out_1   out_2 ... out_2 ... out_M ... out_M
            1 [[                                                     ]
            2  [                                                     ]
           ... [                                                     ]
   num_points  [                                                     ]]
 

For a Sugeno-type FIS, rule_output is a 2 x (Q * M) matrix. Each column of this matrix gives the (location, height) pair of the singleton output for a single (rule, FIS output) pair.

                   Q cols            Q cols                  Q cols 
              ---------------   ---------------         ---------------
              out_1 ... out_1   out_2 ... out_2   ...   out_M ... out_M
   location [[                                                         ]
     height  [                                                         ]]
 

The intermediate result fuzzy_output: The format of fuzzy_output depends on the FIS type (’mamdani’ or ’sugeno’).

For either a Mamdani-type FIS or a Sugeno-type FIS, fuzzy_output specifies the aggregated fuzzy output for each FIS output.

For a Mamdani-type FIS, the aggregated fuzzy_output is a num_points x M matrix. Each column of this matrix gives the y-values of the fuzzy output for a single FIS output, aggregated over all rules.

                out_1  out_2  ...  out_M
            1 [[                        ]
            2  [                        ]
           ... [                        ]
   num_points  [                        ]]
 

For a Sugeno-type FIS, the aggregated output for each FIS output is a 2 x L matrix, where L is the number of distinct singleton locations in the rule_output for that FIS output:

              singleton_1  singleton_2 ... singleton_L
   location [[                                        ]
     height  [                                        ]]
 

Then fuzzy_output is a vector of M structures, each of which has an index and one of these matrices.

Examples: Five examples of using evalfis are shown in:

  • heart_disease_demo_2.m
  • investment_portfolio_demo.m
  • linear_tip_demo.m
  • mamdani_tip_demo.m
  • sugeno_tip_demo.m

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/evalmf.html000066400000000000000000000160011466512601400205560ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: evalmf

Function Reference: evalmf

Function File: y = evalmf (x, param, mf_type)
Function File: y = evalmf (x, param, mf_type, hedge)
Function File: y = evalmf (x, param, mf_type, hedge, not_flag)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type, hedge)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type, hedge, not_flag)

For a given domain, set of parameters, membership function type, and optional hedge and not_flag, return the corresponding y-values for the membership function.

The argument x must be a real number or a non-empty list of strictly increasing real numbers, param must be a valid parameter or a vector of valid parameters for mf_type, and mf_type must be a string corresponding to a membership function type. Evalmf handles both built-in and custom membership functions.

For custom hedges and the four built-in hedges "somewhat", "very", "extremely", and "very very", raise the membership function values to the power corresponding to the hedge.

   (fraction == .05) <=>  somewhat x       <=>  mu(x)^0.5  <=>  sqrt(mu(x))
   (fraction == .20) <=>  very x           <=>  mu(x)^2    <=>  sqr(mu(x))
   (fraction == .30) <=>  extremely x      <=>  mu(x)^3    <=>  cube(mu(x))
   (fraction == .40) <=>  very very x      <=>  mu(x)^4
   (fraction == .dd) <=>  <custom hedge> x <=>  mu(x)^(dd/10)
 

The not_flag negates the membership function using:

   mu(not(x)) = 1 - mu(x)
 

To run the demonstration code, type "demo evalmf" (without the quotation marks) at the Octave prompt.

Example: 1

 

 x = 0:100;
 params = [25 50 75];
 mf_type = 'trimf';
 y = evalmf(x, params, mf_type);
 figure('NumberTitle', 'off', 'Name', "evalmf(0:100, [25 50 75], 'trimf')");
 plot(x, y, 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/fcm.html000066400000000000000000000426421466512601400200630ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: fcm

Function Reference: fcm

Function File: cluster_centers = fcm (input_data, num_clusters)
Function File: cluster_centers = fcm (input_data, num_clusters, options)
Function File: cluster_centers = fcm (input_data, num_clusters, [m, max_iterations, epsilon, display_intermediate_results])
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters, options)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters, [m, max_iterations, epsilon, display_intermediate_results])

Using the Fuzzy C-Means algorithm, calculate and return the soft partition of a set of unlabeled data points.

Also, if display_intermediate_results is true, display intermediate results after each iteration. Note that because the initial cluster prototypes are randomly selected locations in the ranges determined by the input data, the results of this function are nondeterministic.

The required arguments to fcm are:

  • input_data: a matrix of input data points; each row corresponds to one point
  • num_clusters: the number of clusters to form

The optional arguments to fcm are:

  • m: the parameter (exponent) in the objective function; default = 2.0
  • max_iterations: the maximum number of iterations before stopping; default = 100
  • epsilon: the stopping criteria; default = 1e-5
  • display_intermediate_results: if 1, display results after each iteration, and if 0, do not; default = 1

The default values are used if any of the optional arguments are missing or evaluate to NaN.

The return values are:

  • cluster_centers: a matrix of the cluster centers; each row corresponds to one point
  • soft_partition: a constrained soft partition matrix
  • obj_fcn_history: the values of the objective function after each iteration

Three important matrices used in the calculation are X (the input points to be clustered), V (the cluster centers), and Mu (the membership of each data point in each cluster). Each row of X and V denotes a single point, and Mu(i, j) denotes the membership degree of input point X(j, :) in the cluster having center V(i, :).

X is identical to the required argument input_data; V is identical to the output cluster_centers; and Mu is identical to the output soft_partition.

If n denotes the number of input points and k denotes the number of clusters to be formed, then X, V, and Mu have the dimensions:

                                     1    2   ...  #features
                               1 [[                           ]
    X  =  input_data       =   2  [                           ]
                              ... [                           ]
                               n  [                           ]]

                                     1    2   ...  #features
                               1 [[                           ]
    V  =  cluster_centers  =   2  [                           ]
                              ... [                           ]
                               k  [                           ]]

                                     1    2   ...   n
                               1 [[                    ]
    Mu  =  soft_partition  =   2  [                    ]
                              ... [                    ]
                               k  [                    ]]
 

See also: gustafson_kessel, partition_coeff, partition_entropy, xie_beni_index

Example: 1

 

 ## This demo:
 ##    - classifies a small set of unlabeled data points using
 ##      the Fuzzy C-Means algorithm into two fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data is taken from Chapter 13, Example 17 in
 ##       Fuzzy Logic: Intelligence, Control and Information, by
 ##       J. Yen and R. Langari, Prentice Hall, 1999, page 381
 ##       (International Edition). 

 ## Use fcm to classify the input_data.
 input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4];
 number_of_clusters = 2;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   fcm (input_data, number_of_clusters)
 
 ## Plot the data points as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 1');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor

 ## Plot the cluster centers as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor

 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

Iteration count = 1,  Objective fcn = 48.836786
Iteration count = 2,  Objective fcn = 28.958626
Iteration count = 3,  Objective fcn = 28.758695
Iteration count = 4,  Objective fcn = 28.757469
Iteration count = 5,  Objective fcn = 28.757461
Iteration count = 6,  Objective fcn = 28.757460
Iteration count = 7,  Objective fcn = 28.757460
Iteration count = 8,  Objective fcn = 28.757460
cluster_centers =

    4.2023   11.2805
   12.2859    5.3691

soft_partition =

   0.965400   0.939806   0.888774   0.020467   0.033486   0.031290
   0.034600   0.060194   0.111226   0.979533   0.966514   0.968710

obj_fcn_history =

   48.837   28.959   28.759   28.757   28.757   28.757   28.757   28.757

hold is now off for current axes
Partition Coefficient: 0.909483
Partition Entropy (with a = 2): 0.267539
Xie-Beni Index: 0.095582

                    
plotted figure

Example: 2

 

 ## This demo:
 ##    - classifies three-dimensional unlabeled data points using
 ##      the Fuzzy C-Means algorithm into three fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data was selected to form three areas of
 ##       different shapes.
 
 ## Use fcm to classify the input_data.
 input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7;
               3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11;
               3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9;
               6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12;
               11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15;
               14 6 14; 14 8 13];
 number_of_clusters = 3;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   fcm (input_data, number_of_clusters, [NaN NaN NaN 0])
 
 ## Plot the data points in two dimensions (using features 1 & 2)
 ## as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 2) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Plot the data points in two dimensions
 ## (using features 1 & 3) as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 3) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 3), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 3');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

cluster_centers =

    3.1989    3.6232    9.5521
    2.0937   11.9016    6.0942
   11.0424    9.5332   13.3569

soft_partition =

 Columns 1 through 6:

   3.7871e-02   1.3572e-02   3.0172e-02   2.5327e-02   3.2448e-04   2.0488e-02
   9.4461e-01   9.7904e-01   9.5109e-01   9.6197e-01   9.9948e-01   9.6487e-01
   1.7523e-02   7.3841e-03   1.8740e-02   1.2705e-02   1.9250e-04   1.4638e-02

 Columns 7 through 12:

   2.3598e-02   2.1516e-02   2.8591e-02   8.6766e-01   9.1223e-01   9.1464e-01
   9.6332e-01   9.6457e-01   9.4834e-01   7.6424e-02   5.6743e-02   4.6202e-02
   1.3086e-02   1.3915e-02   2.3066e-02   5.5911e-02   3.1032e-02   3.9162e-02

 Columns 13 through 18:

   9.0697e-01   9.8825e-01   9.0909e-01   9.7506e-01   7.6774e-01   8.2343e-01
   5.1152e-02   6.5170e-03   5.0542e-02   1.4244e-02   1.5868e-01   1.0410e-01
   4.1879e-02   5.2361e-03   4.0373e-02   1.0700e-02   7.3582e-02   7.2479e-02

 Columns 19 through 24:

   6.2230e-01   6.7200e-01   6.7469e-02   7.4870e-02   9.2741e-02   1.6712e-02
   2.2741e-01   1.4085e-01   6.2864e-02   9.0815e-02   1.1768e-01   1.2265e-02
   1.5029e-01   1.8715e-01   8.6967e-01   8.3432e-01   7.8958e-01   9.7102e-01

 Columns 25 through 30:

   8.4745e-02   5.1715e-03   3.9804e-02   1.3556e-01   7.4614e-02   2.7318e-02
   1.2048e-01   4.3134e-03   4.4784e-02   7.1964e-02   4.3901e-02   1.9996e-02
   7.9477e-01   9.9052e-01   9.1541e-01   7.9248e-01   8.8149e-01   9.5269e-01

 Columns 31 and 32:

   1.2256e-01   6.7204e-02
   7.2840e-02   4.8500e-02
   8.0460e-01   8.8430e-01

obj_fcn_history =

 Columns 1 through 10:

   408.08   240.46   184.85   181.00   180.66   180.61   180.61   180.61   180.61   180.61

 Columns 11 through 16:

   180.61   180.61   180.61   180.61   180.61   180.61

hold is now off for current axes
hold is now off for current axes
Partition Coefficient: 0.813224
Partition Entropy (with a = 2): 0.541401
Xie-Beni Index: 0.207218

                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.1/docs/gauss2mf.html000066400000000000000000000162221466512601400210400ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gauss2mf

Function Reference: gauss2mf

Function File: y = gauss2mf (x, params)
Function File: y = gauss2mf ([x1 x2 ... xn], [sig1 c1 sig2 c2])

For a given domain x and parameters params (or [sig1 c1 sig2 c2]), return the corresponding y values for the two-sided Gaussian composite membership function. This membership function is a smooth curve calculated from two Gaussian membership functions as follows:

Given parameters sig1, c1, sig2, and c2, that define two Gaussian membership functions, let:

     f1(x) = exp((-(x - c1)^2)/(2 * sig1^2))    if x <= c1
             1                                  otherwise

     f2(x) = 1                                  if x <= c2
             exp((-(x - c2)^2)/(2 * sig2^2))    otherwise
 

Then gauss2mf is given by:

     f(x) = f1(x) * f2(x)
 

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and sig1, c1, sig2, and c2 must be real numbers. Gauss2mf always returns a continuously differentiable curve with values in the range [0, 1].

If c1 < c2, gauss2mf is a normal membership function (has a maximum value of 1), with the rising curve identical to that of f1(x) and a falling curve identical to that of f2(x), above. If c1 >= c2, gauss2mf returns a subnormal membership function (has a maximum value less than 1).

To run the demonstration code, type "demo gauss2mf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = -10:0.2:10;
 params = [3 0 1.5 2];
 y1 = gauss2mf(x, params);
 params = [1.5 0 3 2];
 y2 = gauss2mf(x, params);
 params = [1.5 2 3 0];
 y3 = gauss2mf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gauss2mf demo');
 plot(x, y1, 'r;params = [3 0 1.5 2];', 'LineWidth', 2);
 hold on ;
 plot(x, y2, 'b;params = [1.5 0 3 2];', 'LineWidth', 2);
 hold on ;
 plot(x, y3, 'g;params = [1.5 2 3 0];', 'LineWidth', 2);
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;
 hold;

hold is now off for current axes
                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/gaussmf.html000066400000000000000000000154471466512601400207660ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gaussmf

Function Reference: gaussmf

Function File: y = gaussmf (x, params)
Function File: y = gaussmf ([x1 x2 ... xn], [sig c])

For a given domain x and parameters params (or [sig c]), return the corresponding y values for the Gaussian membership function. This membership function is shaped like the Gaussian (normal) distribution, but scaled to have a maximum value of 1. By contrast, the area under the Gaussian distribution curve is 1.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and sig and c must be real numbers. This membership function satisfies the equation:

     f(x) = exp((-(x - c)^2)/(2 * sig^2))
 

which always returns values in the range [0, 1].

Just as for the Gaussian (normal) distribution, the parameters sig and c represent:

     sig^2 == the variance (a measure of the width of the curve)
         c == the center (the mean; the x value of the peak)
 

For larger values of sig, the curve is flatter, and for smaller values of sig, the curve is narrower. The y value at the center is always 1:

     f(c) == 1
 

To run the demonstration code, type "demo gaussmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = -5:0.1:5;
 params = [0.5 0];
 y1 = gaussmf(x, params);
 params = [1 0];
 y2 = gaussmf(x, params);
 params = [2 0];
 y3 = gaussmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gaussmf demo');
 plot(x, y1, 'r;params = [0.5 0];', 'LineWidth', 2);
 hold on ;
 plot(x, y2, 'b;params = [1 0];', 'LineWidth', 2);
 hold on ;
 plot(x, y3, 'g;params = [2 0];', 'LineWidth', 2);
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value');
 ylabel('Degree of Membership');
 grid;
 hold;

hold is now off for current axes
                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/gbellmf.html000066400000000000000000000157201466512601400207230ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gbellmf

Function Reference: gbellmf

Function File: y = gbellmf (x, params)
Function File: y = gbellmf ([x1 x2 ... xn], [a b c])

For a given domain x and parameters params (or [a b c]), return the corresponding y values for the generalized bell-shaped membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, a, b, and c must be real numbers, a must be non-zero, and b must be an integer. This membership function satisfies the equation:

     f(x) = 1/(1 + (abs((x - c)/a))^(2 * b))
 

which always returns values in the range [0, 1].

The parameters a, b, and c give:

     a == controls the width of the curve at f(x) = 0.5;
          f(c-a) = f(c+a) = 0.5
     b == controls the slope of the curve at x = c-a and x = c+a;
          f'(c-a) = b/2a and f'(c+a) = -b/2a
     c == the center of the curve
 

This membership function has a value of 0.5 at the two points c - a and c + a, and the width of the curve at f(x) == 0.5 is 2 * |a|:

     f(c - a) == f(c + a) == 0.5
     2 * |a| == the width of the curve at f(x) == 0.5
 

The generalized bell-shaped membership function is continuously differentiable and is symmetric about the line x = c.

To run the demonstration code, type "demo gbellmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:255;
 params = [20 4 100];
 y1 = gbellmf(x, params);
 params = [30 3 100];
 y2 = gbellmf(x, params);
 params = [40 2 100];
 y3 = gbellmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gbellmf demo');
 plot(x, y1, 'r;params = [20 4 100];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [30 3 100];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [40 2 100];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/gensurf.html000066400000000000000000000136711466512601400207670ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gensurf

Function Reference: gensurf

Function File: gensurf (fis)
Function File: gensurf (fis, input_axes)
Function File: gensurf (fis, input_axes, output_axes)
Function File: gensurf (fis, input_axes, output_axes, grids)
Function File: gensurf (fis, input_axes, output_axes, grids, ref_input)
Function File: gensurf (fis, input_axes, output_axes, grids, ref_input, num_points)
Function File: [x, y, z] = gensurf (...)

Generate and plot a surface (or 2-dimensional curve) showing one FIS output as a function of two (or one) of the FIS inputs. The reference input is used for all FIS inputs that are not in the input_axes vector.

Grids, which specifies the number of grids to show on the input axes, may be a scalar or a vector of length 2. If a scalar, then both axes will use the same number of grids. If a vector of length 2, then the grids on the two axes are controlled separately.

Num_points specifies the number of points to use when evaluating the FIS.

The final form "[x, y, z] = gensurf(...)" suppresses plotting.

Default values for arguments not supplied are:

  • input_axes == [1 2]
  • output_axis == 1
  • grids == [15 15]
  • ref_input == []
  • num_points == 101

Six demo scripts that use gensurf are:

  • cubic_approx_demo.m
  • heart_disease_demo_1.m
  • heart_disease_demo_2.m
  • investment_portfolio_demo.m
  • linear_tip_demo.m
  • mamdani_tip_demo.m
  • sugeno_tip_demo.m

Current limitation: The form of gensurf that suppresses plotting (the final form above) is not yet implemented.

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo, plotmf

fuzzy-logic-toolkit-0.6.1/docs/getfis.html000066400000000000000000000175331466512601400206000ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: getfis

Function Reference: getfis

Function File: retval = getfis (fis)
Function File: retval = getfis (fis, property)
Function File: retval = getfis (fis, in_or_out, var_index)
Function File: retval = getfis (fis, in_or_out, var_index, var_property)
Function File: retval = getfis (fis, in_or_out, var_index, mf, mf_index)
Function File: retval = getfis (fis, in_or_out, var_index, mf, mf_index, mf_property)

Return or print the property (field) values of an FIS structure specified by the arguments.

There are six forms of getfis:

Number of ArgumentsAction Taken
1Print (some) properties of an FIS structure on standard output. Return the empty set.
2Return a specified property of the FIS structure. The properties that may be specified are: name, type, version, numinputs, numoutputs, numinputmfs, numoutputmfs, numrules, andmethod, ormethod, impmethod, addmethod, defuzzmethod, inlabels, outlabels, inrange, outrange, inmfs, outmfs, inmflabels, outmflabels, inmftypes, outmftypes, inmfparams, outmfparams, and rulelist.
3Print the properties of a specified input or output variable of the FIS structure. Return the empty set.
4Return a specified property of an input or output variable. The properties that may be specified are: name, range, nummfs, and mflabels.
5Print the properties of a specified membership function of the FIS structure. Return the empty set.
6Return a specified property of a membership function. The properties that may be specified are: name, type, and params.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
propertya string; one of: ’name’, ’type’, ’version’, ’numinputs’, ’numoutputs’, ’numinputmfs’, ’numoutputmfs’, ’numrules’, ’andmethod’, ’ormethod’, ’impmethod’, ’addmethod’, ’defuzzmethod’ ’inlabels’, ’outlabels’, ’inrange’, ’outrange’, ’inmfs’, ’outmfs’, ’inmflabels’, ’outmflabels’, ’inmftypes’, ’outmftypes’, ’inmfparams’, ’outmfparams’, and ’rulelist’ (case-insensitive)
in_or_outeither ’input’ or ’output’ (case-insensitive)
var_indexa valid integer index of an input or output FIS variable
var_propertya string; one of: ’name’, ’range’, ’nummfs’, and ’mflabels’
mfthe string ’mf’
mf_indexa valid integer index of a membership function
mf_propertya string; one of ’name’, ’type’, or ’params’

Note that all of the strings representing properties above are case insensitive.

See also: setfis, showfis

fuzzy-logic-toolkit-0.6.1/docs/gustafson_kessel.html000066400000000000000000000470111466512601400226700ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gustafson_kessel

Function Reference: gustafson_kessel

Function File: cluster_centers = gustafson_kessel (input_data, num_clusters)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume, options)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume, [m, max_iterations, epsilon, display_intermediate_results])
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume, options)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume, [m, max_iterations, epsilon, display_intermediate_results])

Using the Gustafson-Kessel algorithm, calculate and return the soft partition of a set of unlabeled data points.

Also, if display_intermediate_results is true, display intermediate results after each iteration. Note that because the initial cluster prototypes are randomly selected locations in the ranges determined by the input data, the results of this function are nondeterministic.

The required arguments to gustafson_kessel are:

  • input_data: a matrix of input data points; each row corresponds to one point
  • num_clusters: the number of clusters to form

The third (optional) argument to gustafson_kessel is a vector of cluster volumes. If omitted, a vector of 1’s will be used as the default.

The fourth (optional) argument to gustafson_kessel is a vector consisting of:

  • m: the parameter (exponent) in the objective function; default = 2.0
  • max_iterations: the maximum number of iterations before stopping; default = 100
  • epsilon: the stopping criteria; default = 1e-5
  • display_intermediate_results: if 1, display results after each iteration, and if 0, do not; default = 1

The default values are used if any of the four elements of the vector are missing or evaluate to NaN.

The return values are:

  • cluster_centers: a matrix of the cluster centers; each row corresponds to one point
  • soft_partition: a constrained soft partition matrix
  • obj_fcn_history: the values of the objective function after each iteration

Three important matrices used in the calculation are X (the input points to be clustered), V (the cluster centers), and Mu (the membership of each data point in each cluster). Each row of X and V denotes a single point, and Mu(i, j) denotes the membership degree of input point X(j, :) in the cluster having center V(i, :).

X is identical to the required argument input_data; V is identical to the output cluster_centers; and Mu is identical to the output soft_partition.

If n denotes the number of input points and k denotes the number of clusters to be formed, then X, V, and Mu have the dimensions:

                                     1    2   ...  #features
                               1 [[                           ]
    X  =  input_data       =   2  [                           ]
                              ... [                           ]
                               n  [                           ]]

                                     1    2   ...  #features
                               1 [[                           ]
    V  =  cluster_centers  =   2  [                           ]
                              ... [                           ]
                               k  [                           ]]

                                     1    2   ...   n
                               1 [[                    ]
    Mu  =  soft_partition  =   2  [                    ]
                              ... [                    ]
                               k  [                    ]]
 

See also: fcm, partition_coeff, partition_entropy, xie_beni_index

Example: 1

 

 ## This demo:
 ##    - classifies a small set of unlabeled data points using
 ##      the Gustafson-Kessel algorithm into two fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data is taken from Chapter 13, Example 17 in
 ##       Fuzzy Logic: Intelligence, Control and Information, by
 ##       J. Yen and R. Langari, Prentice Hall, 1999, page 381
 ##       (International Edition). 
 
 ## Use gustafson_kessel to classify the input_data.
 input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4];
 number_of_clusters = 2;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   gustafson_kessel (input_data, number_of_clusters)
 
 ## Plot the data points as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 1');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

Iteration count = 1,  Objective fcn = 32.036570
Iteration count = 2,  Objective fcn = 26.486425
Iteration count = 3,  Objective fcn = 26.199786
Iteration count = 4,  Objective fcn = 25.994545
Iteration count = 5,  Objective fcn = 25.831740
Iteration count = 6,  Objective fcn = 25.730027
Iteration count = 7,  Objective fcn = 25.679108
Iteration count = 8,  Objective fcn = 25.657508
Iteration count = 9,  Objective fcn = 25.649243
Iteration count = 10,  Objective fcn = 25.646251
Iteration count = 11,  Objective fcn = 25.645199
Iteration count = 12,  Objective fcn = 25.644835
Iteration count = 13,  Objective fcn = 25.644709
Iteration count = 14,  Objective fcn = 25.644666
Iteration count = 15,  Objective fcn = 25.644652
Iteration count = 16,  Objective fcn = 25.644647
Iteration count = 17,  Objective fcn = 25.644645
Iteration count = 18,  Objective fcn = 25.644644
Iteration count = 19,  Objective fcn = 25.644644
Iteration count = 20,  Objective fcn = 25.644644
Iteration count = 21,  Objective fcn = 25.644644
Iteration count = 22,  Objective fcn = 25.644644
Iteration count = 23,  Objective fcn = 25.644644
Iteration count = 24,  Objective fcn = 25.644644
Iteration count = 25,  Objective fcn = 25.644644
cluster_centers =

    4.2228   11.3276
   12.2661    5.3877

soft_partition =

   0.934026   0.890527   0.870501   0.023530   0.028088   0.012592
   0.065974   0.109473   0.129499   0.976470   0.971912   0.987408

obj_fcn_history =

 Columns 1 through 10:

   32.037   26.486   26.200   25.995   25.832   25.730   25.679   25.658   25.649   25.646

 Columns 11 through 20:

   25.645   25.645   25.645   25.645   25.645   25.645   25.645   25.645   25.645   25.645

 Columns 21 through 25:

   25.645   25.645   25.645   25.645   25.645

hold is now off for current axes
Partition Coefficient: 0.888484
Partition Entropy (with a = 2): 0.308027
Xie-Beni Index: 0.107028

                    
plotted figure

Example: 2

 

 ## This demo:
 ##    - classifies three-dimensional unlabeled data points using
 ##      the Gustafson-Kessel algorithm into three fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data was selected to form three areas of
 ##       different shapes.
 
 ## Use gustafson_kessel to classify the input_data.
 input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7;
               3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11;
               3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9;
               6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12;
               11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15;
               14 6 14; 14 8 13];
 number_of_clusters = 3;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   gustafson_kessel (input_data, number_of_clusters, [1 1 1], ...
                     [NaN NaN NaN 0])
 
 ## Plot the data points in two dimensions (using features 1 & 2)
 ## as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 2) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
  
 ## Plot the data points in two dimensions
 ## (using features 1 & 3) as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 3) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 3), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 3');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

cluster_centers =

   11.1675    9.5123   13.4360
    2.0744   11.9210    6.0810
    3.2679    3.7416    9.5189

soft_partition =

 Columns 1 through 6:

   1.1157e-02   7.1682e-03   9.2570e-03   1.3792e-02   6.1636e-05   1.8522e-02
   9.6971e-01   9.8313e-01   9.8010e-01   9.6123e-01   9.9985e-01   9.6174e-01
   1.9130e-02   9.7022e-03   1.0643e-02   2.4973e-02   8.9272e-05   1.9737e-02

 Columns 7 through 12:

   1.0694e-02   2.5264e-02   2.0999e-02   9.2634e-03   1.8979e-02   1.3117e-02
   9.6753e-01   9.3340e-01   9.5532e-01   2.2956e-02   6.1145e-02   2.9746e-02
   2.1778e-02   4.1336e-02   2.3681e-02   9.6778e-01   9.1988e-01   9.5714e-01

 Columns 13 through 18:

   2.2734e-02   2.4881e-03   3.1043e-02   4.4868e-03   2.9448e-02   2.6948e-02
   5.6777e-02   6.5225e-03   7.9769e-02   1.3945e-02   1.4999e-01   9.6884e-02
   9.2049e-01   9.9099e-01   8.8919e-01   9.8157e-01   8.2056e-01   8.7617e-01

 Columns 19 through 24:

   3.3446e-02   5.4461e-02   7.2961e-01   9.0208e-01   8.6338e-01   9.0000e-01
   1.4314e-01   1.2767e-01   1.3230e-01   5.3105e-02   7.6953e-02   5.2614e-02
   8.2342e-01   8.1786e-01   1.3809e-01   4.4813e-02   5.9663e-02   4.7385e-02

 Columns 25 through 30:

   7.8178e-01   9.8041e-01   8.8736e-01   8.1782e-01   8.9517e-01   9.2117e-01
   1.0864e-01   1.0972e-02   5.8405e-02   1.0065e-01   6.3515e-02   4.6914e-02
   1.0958e-01   8.6145e-03   5.4237e-02   8.1536e-02   4.1313e-02   3.1917e-02

 Columns 31 and 32:

   9.3144e-01   8.7447e-01
   4.2581e-02   7.2530e-02
   2.5982e-02   5.3000e-02

obj_fcn_history =

 Columns 1 through 10:

   231.36   183.01   167.78   158.16   149.79   141.02   133.08   127.09   123.40   121.53

 Columns 11 through 20:

   120.64   120.26   120.11   120.06   120.04   120.04   120.03   120.03   120.03   120.03

 Columns 21 through 30:

   120.03   120.03   120.03   120.03   120.03   120.03   120.03   120.03   120.03   120.03

hold is now off for current axes
Partition Coefficient: 0.841843
Partition Entropy (with a = 2): 0.472418
Xie-Beni Index: 0.192630

                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.1/docs/hamacher_product.html000066400000000000000000000112541466512601400226210ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: hamacher_product

Function Reference: hamacher_product

Function File: retval = hamacher_product (x)
Function File: retval = hamacher_product (x, y)

Return the Hamacher product of the input. The Hamacher product of two real scalars x and y is: (x * y) / (x + y - x * y)

For one vector argument, apply the Hamacher product to all of the elements of the vector. (The Hamacher product is associative.) For one two-dimensional matrix argument, return a vector of the Hamacher product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise Hamacher product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_sum

fuzzy-logic-toolkit-0.6.1/docs/hamacher_sum.html000066400000000000000000000112241466512601400217420ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: hamacher_sum

Function Reference: hamacher_sum

Function File: retval = hamacher_sum (x)
Function File: retval = hamacher_sum (x, y)

Return the Hamacher sum of the input. The Hamacher sum of two real scalars x and y is: (x + y - 2 * x * y) / (1 - x * y)

For one vector argument, apply the Hamacher sum to all of the elements of the vector. (The Hamacher sum is associative.) For one two-dimensional matrix argument, return a vector of the Hamacher sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pairwise Hamacher sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product

fuzzy-logic-toolkit-0.6.1/docs/heart_disease_demo_1.html000066400000000000000000000106441466512601400233370ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: heart_disease_demo_1

Function Reference: heart_disease_demo_1

Script File: heart_disease_demo_1

Demonstrate the use of newfis, addvar, addmf, and addrule to build and evaluate an FIS. Also demonstrate the use of the algebraic product and sum as the T-norm/S-norm pair, and demonstrate the use of hedges in the FIS rules.

The demo:

  • builds an FIS
  • plots the input membership functions
  • plots the constant output functions
  • displays the FIS rules in verbose format in the Octave window
  • plots the FIS output as a function of the inputs

See also: cubic_approx_demo, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/heart_disease_demo_2.html000066400000000000000000000104701466512601400233350ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: heart_disease_demo_2

Function Reference: heart_disease_demo_2

Script File: heart_disease_demo_2

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS stored in a file.

The demo:

  • reads the FIS structure from a file
  • plots the input membership functions
  • plots the (constant) output functions
  • plots the FIS output as a function of the inputs
  • evaluates the Sugeno-type FIS for four inputs

See also: cubic_approx_demo, heart_disease_demo_1, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/index.html000066400000000000000000000554151466512601400204270ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit
fuzzy-logic-toolkit

fuzzy-logic-toolkit

0.6.1 2024-08-31

A mostly MATLAB-compatible fuzzy logic toolkit for Octave.

Select Category:

Evaluation

defuzz For a given domain, set of fuzzy function values, and defuzzification method, return the defuzzified (crisp) value of the fuzzy function.
evalfis Return the crisp output(s) of an FIS for each row in a matrix of crisp input values.
evalmf For a given domain, set of parameters, membership function type, and optional hedge and not_flag, return the corresponding y-values for the membership function.

Plotting

gensurf Generate and plot a surface (or 2-dimensional curve) showing one FIS output as a function of two (or one) of the FIS inputs.
plotmf Plot the membership functions defined for the specified FIS input or output variable on a single set of axes.

File Input/Output of Fuzzy Inference Systems

readfis Read the information in an FIS file, and using this information, create and return an FIS structure.
writefis Save the specified FIS currently in the Octave workspace to a file named by the user.

Command-Line Creation and Modification of Fuzzy Inference Systems

addmf Add a membership function to an existing FIS structure and return the updated FIS.
addrule Add a list of rules to an existing FIS structure and return the updated FIS.
addvar Add an input or output variable to an existing FIS structure and return the updated FIS.
newfis Create and return a new FIS structure using the argument values provided.
rmmf Remove a membership function from an existing FIS structure and return the updated FIS.
rmvar Remove an input or output variable from an existing FIS structure and return the updated FIS.
setfis Set a property (field) value of an FIS structure and return the updated FIS.

Text Representation of Fuzzy Inference Systems

getfis Return or print the property (field) values of an FIS structure specified by the arguments.
showfis Print all of the property (field) values of the FIS structure and its substructures.
showrule Show the rules for an FIS structure in verbose, symbolic, or indexed format.

Membership Functions

dsigmf For a given domain X and parameters PARAMS (or [A1 C1 A2 C2]), return the corresponding Y values for the difference between two sigmoidal membership functions.
gauss2mf For a given domain X and parameters PARAMS (or [SIG1 C1 SIG2 C2]), return the corresponding Y values for the two-sided Gaussian composite membership function.
gaussmf For a given domain X and parameters PARAMS (or [SIG C]), return the corresponding Y values for the Gaussian membership function.
gbellmf For a given domain X and parameters PARAMS (or [A B C]), return the corresponding Y values for the generalized bell-shaped membership function.
pimf For a given domain X and parameters PARAMS (or [A B C D]), return the corresponding Y values for the pi-shaped membership function.
psigmf For a given domain X and parameters PARAMS (or [A1 C1 A2 C2]), return the corresponding Y values for the product of two sigmoidal membership functions.
sigmf For a given domain X and parameters PARAMS (or [A C]), return the corresponding Y values for the sigmoidal membership function.
smf For a given domain X and parameters PARAMS (or [A B]), return the corresponding Y values for the S-shaped membership function.
trapmf For a given domain X and parameters PARAMS (or [A B C D]), return the corresponding Y values for the trapezoidal membership function.
trimf For a given domain X and parameters PARAMS (or [A B C]), return the corresponding Y values for the triangular membership function.
zmf For a given domain X and parameters PARAMS (or [A B]), return the corresponding Y values for the Z-shaped membership function.

T-Norms and S-Norms (in addition to max/min)

algebraic_product Return the algebraic product of the input.
algebraic_sum Return the algebraic sum of the input.
bounded_difference Return the bounded difference of the input.
bounded_sum Return the bounded sum of the input.
drastic_product Return the drastic product of the input.
drastic_sum Return the drastic sum of the input.
einstein_product Return the Einstein product of the input.
einstein_sum Return the Einstein sum of the input.
hamacher_product Return the Hamacher product of the input.
hamacher_sum Return the Hamacher sum of the input.

Complete Fuzzy Inference System Demos

cubic_approx_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a non-linear function using a Sugeno-type FIS with linear output functions.
heart_disease_demo_1 Demonstrate the use of newfis, addvar, addmf, and addrule to build and evaluate an FIS.
heart_disease_demo_2 Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS stored in a file.
investment_portfolio_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.
linear_tip_demo Demonstrate the use of linear output membership functions to simulate constant membership functions.
mamdani_tip_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.
sugeno_tip_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS with multiple outputs stored in a text file.

Fuzzy Clustering Functions

fcm Using the Fuzzy C-Means algorithm, calculate and return the soft partition of a set of unlabeled data points.
gustafson_kessel Using the Gustafson-Kessel algorithm, calculate and return the soft partition of a set of unlabeled data points.
partition_coeff Return the partition coefficient for a given soft partition.
partition_entropy Return the partition entropy for a given soft partition.
xie_beni_index Return the Xie-Beni validity index for a given soft partition.
fuzzy-logic-toolkit-0.6.1/docs/investment_portfolio_demo.html000066400000000000000000000112611466512601400246040ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: investment_portfolio_demo

Function Reference: investment_portfolio_demo

Script File: investment_portfolio_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file. Also demonstrate the use of hedges and weights in the FIS rules, the use of the Einstein product and sum as the T-norm/S-norm pair, and the non-standard use of the Einstein sum as the aggregation method.

The demo:

  • reads the FIS structure from a file
  • plots the input and output membership functions
  • plots the FIS output as a function of the inputs
  • plots the output of the 4 individual rules for (Age, Risk-Tolerance) = (40, 7)
  • plots the aggregated fuzzy output and the crisp output for (Age, Risk-Tolerance) = (40, 7)
  • shows the rules in verbose format in the Octave window

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/linear_tip_demo.html000066400000000000000000000103661466512601400224460ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: linear_tip_demo

Function Reference: linear_tip_demo

Script File: linear_tip_demo

Demonstrate the use of linear output membership functions to simulate constant membership functions.

The demo:

  • reads the FIS structure from a file
  • plots the input membership functions
  • plots the FIS output as a function of the inputs
  • evaluates the Sugeno-type FIS for six inputs

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/mamdani_tip_demo.html000066400000000000000000000107601466512601400226000ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: mamdani_tip_demo

Function Reference: mamdani_tip_demo

Script File: mamdani_tip_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.

The demo:

  • reads the FIS structure from a file
  • plots the input and output membership functions
  • plots each of the two FIS outputs as a function of the inputs
  • plots the output of the 4 individual rules for (Food-Quality, Service) = (4, 6)
  • plots the aggregated fuzzy output and the crisp output for (Food-Quality, Service) = (4, 6)
  • displays the FIS rules in symbolic format in the Octave window

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/newfis.html000066400000000000000000000136431466512601400206100ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: newfis

Function Reference: newfis

Function File: a = newfis (fis_name)
Function File: a = newfis (fis_name, fis_type)
Function File: a = newfis (fis_name, fis_type, and_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method, defuzz_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method, defuzz_method, fis_version)

Create and return a new FIS structure using the argument values provided. Only the first argument is required. If fewer than eight arguments are given, then some or all of the following default values will be used:

ArgumentDefault Value
fis_type’mamdani’
and_method’min’
or_method’max’
imp_method’min’
agg_method’max’
defuzz_method’centroid’
fis_version1.0

See also: addmf, addrule, addvar, setfis

fuzzy-logic-toolkit-0.6.1/docs/partition_coeff.html000066400000000000000000000106721466512601400224670ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: partition_coeff

Function Reference: partition_coeff

Function File: vpc = partition_coeff (soft_partition)

Return the partition coefficient for a given soft partition.

The argument to partition_coeff is:

  • soft_partition: the membership degree of each input data point in each cluster

The return value is:

  • vpc: the partition coefficient for the given soft partition

To run demonstration code that uses this function, type "demo fcm" or "demo gustafson_kessel" (without the quotation marks) at the Octave prompt.

For more information about the soft_partition matrix, please see the documentation for function fcm.

See also: fcm, gustafson_kessel, partition_entropy, xie_beni_index

fuzzy-logic-toolkit-0.6.1/docs/partition_entropy.html000066400000000000000000000111711466512601400231000ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: partition_entropy

Function Reference: partition_entropy

Function File: vpe = partition_entropy (soft_partition, a)

Return the partition entropy for a given soft partition.

The arguments to partition_entropy are:

  • soft_partition: the membership degree of each input data point in each cluster
  • a: the log base to use in the calculation; must be a real number a > 1

The return value is:

  • vpe: the partition entropy for the given soft partition

To run demonstration code that uses this function, type "demo fcm" or "demo gustafson_kessel" (without the quotation marks) at the Octave prompt.

For more information about the soft_partition matrix, please see the For more information about the soft_partition matrix, please see the documentation for function fcm.

See also: fcm, gustafson_kessel, partition_coeff, xie_beni_index

fuzzy-logic-toolkit-0.6.1/docs/pimf.html000066400000000000000000000151731466512601400202500ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: pimf

Function Reference: pimf

Function File: y = pimf (x, params)
Function File: y = pimf ([x1 x2 ... xn], [a b c d])

For a given domain x and parameters params (or [a b c d]), return the corresponding y values for the pi-shaped membership function.

The argument x must be a real number or a non-empty vector of real numbers, and a, b, c, and d must be real numbers, with a < b <= c < d. This membership function satisfies:

           0                             if x <= a
           2 * ((x - a)/(b - a))^2       if a < x <= (a + b)/2
           1 - 2 * ((x - b)/(b - a))^2   if (a + b)/2 < x < b
   f(x) =  1                             if b <= x <= c
           1 - 2 * ((x - c)/(d - c))^2   if c < x <= (c + d)/2
           2 * ((x - d)/(d - c))^2       if (c + d)/2 < x < d
           0                             if x >= d
 

which always returns values in the range [0, 1].

To run the demonstration code, type "demo pimf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:255;
 params = [70 80 100 140];
 y1 = pimf(x, params);
 params = [50 75 105 175];
 y2 = pimf(x, params);
 params = [30 70 110 200];
 y3 = pimf(x, params);
 figure('NumberTitle', 'off', 'Name', 'pimf demo');
 plot(x, y1, 'r;params = [70 80 100 140];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [50 75 105 175];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [30 70 110 200];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/plotmf.html000066400000000000000000000136761466512601400206240ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: plotmf

Function Reference: plotmf

Function File: plotmf (fis, in_or_out, var_index)
Function File: plotmf (fis, in_or_out, var_index, y_lower_limit)
Function File: plotmf (fis, in_or_out, var_index, y_lower_limit, y_upper_limit)

Plot the membership functions defined for the specified FIS input or output variable on a single set of axes. Fuzzy output membership functions are represented by the [0, 1]-valued fuzzy functions, and constant output membership functions are represented by unit-valued singleton spikes. Linear output membership functions, however, are represented by two-dimensional lines y = ax + c, regardless of how many dimensions the linear function is defined to have. In effect, all of the other dimensions of the linear function are set to 0.

If both constant and linear membership functions are used for a single FIS output, then two sets of axes are used: one for the constant membership functions, and another for the linear membership functions. To plot both constant and linear membership functions together, or to plot constant membership functions as horizontal lines instead of unit-valued spikes, represent the constant membership functions using ’linear’ functions, with 0 for all except the last parameter, and with the desired constant value as the last parameter.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
in_or_outeither ’input’ or ’output’ (case-insensitive)
var_indexan FIS input or output variable index
y_lower_limita real scalar (default value = -0.1)
y_upper_limita real scalar (default value = 1.1)

Six examples that use plotmf are:

  • cubic_approx_demo.m
  • heart_disease_demo_1.m
  • heart_disease_demo_2.m
  • investment_portfolio_demo.m
  • linear_tip_demo.m
  • mamdani_tip_demo.m
  • sugeno_tip_demo.m

See also: gensurf

fuzzy-logic-toolkit-0.6.1/docs/psigmf.html000066400000000000000000000154771466512601400206110ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: psigmf

Function Reference: psigmf

Function File: y = psigmf (x, params)
Function File: y = psigmf ([x1 x2 ... xn], [a1 c1 a2 c2])

For a given domain x and parameters params (or [a1 c1 a2 c2]), return the corresponding y values for the product of two sigmoidal membership functions.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a1, c1, a2, and c2 must be real numbers. This membership function satisfies the equation:

     f(x) = (1/(1 + exp(-a1*(x - c1)))) * (1/(1 + exp(-a2*(x - c2))))
 

The function is bounded above by 1 and below by 0.

If a1 is positive, a2 is negative, and c1 and c2 are far enough apart with c1 < c2, then:

     (a1)/4 ~ the rising slope at c1
         c1 ~ the left inflection point
     (a2)/4 ~ the falling slope at c2
         c2 ~ the right inflection point
 

and at each inflection point, the value of the function is about 0.5:

      f(c1) ~ f(c2) ~ 0.5.
 

(Here, the symbol ~ means "approximately equal".)

To run the demonstration code, type "demo psigmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [0.5 20 -0.3 60];
 y1 = psigmf(x, params);
 params = [0.3 20 -0.2 60];
 y2 = psigmf(x, params);
 params = [0.2 20 -0.1 60];
 y3 = psigmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'psigmf demo');
 plot(x, y1, 'r;params = [0.5 20 -0.3 60];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [0.3 20 -0.2 60];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [0.2 20 -0.1 60];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/readfis.html000066400000000000000000000115521466512601400207270ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: readfis

Function Reference: readfis

Function File: fis = readfis ()
Function File: fis = readfis (filename)

Read the information in an FIS file, and using this information, create and return an FIS structure. If called without any arguments or with an empty string as an argument, present the user with a file dialog GUI. If called with a filename that does not end with ’.fis’, append ’.fis’ to the filename. The filename is expected to be a string.

Six examples of the input file format and example scripts that use readfis:

Example FIS FileCorresponding Example Script
cubic_approximator.fiscubic_approx_demo.m
heart_disease_risk.fisheart_disease_demo_2.m
investment_portfolio.fisinvestment_portfolio_demo.m
linear_tip_calculator.fislinear_tip_demo.m
mamdani_tip_calculator.fismamdani_tip_demo.m
sugeno_tip_calculator.fissugeno_tip_demo.m

See also: writefis

fuzzy-logic-toolkit-0.6.1/docs/rmmf.html000066400000000000000000000111761466512601400202550ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: rmmf

Function Reference: rmmf

Function File: fis = rmmf (fis, in_or_out, var_index, mf, mf_index)

Remove a membership function from an existing FIS structure and return the updated FIS.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
in_or_out’input’ or ’output’ (case-insensitive)
var_indexvalid index of an FIS input/output variable
mfthe string ’mf’
mf_indexan integer

Note that rmmf will allow the user to delete membership functions that are currently in use by rules in the FIS.

See also: addmf, rmvar

fuzzy-logic-toolkit-0.6.1/docs/rmvar.html000066400000000000000000000106761466512601400204470ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: rmvar

Function Reference: rmvar

Function File: fis = rmvar (fis, in_or_out, var_index)

Remove an input or output variable from an existing FIS structure and return the updated FIS.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
in_or_outeither ’input’ or ’output’ (case-insensitive)
var_indexan FIS input or output variable index

Note that rmvar will allow the user to delete an input or output variable that is currently in use by rules in the FIS.

See also: addvar, rmmf

fuzzy-logic-toolkit-0.6.1/docs/setfis.html000066400000000000000000000156041466512601400206110ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: setfis

Function Reference: setfis

Function File: fis = setfis (fis, property, property_value)
Function File: fis = setfis (fis, in_or_out, var_index, var_property, var_property_value)
Function File: fis = setfis (fis, in_or_out, var_index, mf, mf_index, mf_property, mf_property_value)

Set a property (field) value of an FIS structure and return the updated FIS.

There are three forms of setfis:

Number of ArgumentsAction Taken
3Set a property of the FIS structure. The properties that may be set are: name, type, andmethod, ormethod, impmethod, addmethod, defuzzmethod, and version.
5Set a property of an input or output variable of the FIS structure. The properties that may be set are: name and range.
7Set a property of a membership function. The properties that may be set are: name, type, and params.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure
propertya string; one of ’name’, ’type’, ’andmethod’, ’ormethod’, ’impmethod’, ’addmethod’, ’defuzzmethod’, and ’version’ (case-insensitive)
property_valuea number (if property is ’version’); a string (otherwise)
in_or_outeither ’input’ or ’output’ (case-insensitive)
var_indexa valid integer index of an input or output FIS variable
var_propertya string; either ’name’ or ’range’
var_property_valuea string (if var_property is ’name’) or a vector range (if var_property is ’range’)
mfthe string ’mf’
mf_indexa valid integer index of a membership function
mf_propertya string; one of ’name’, ’type’, or ’params’
mf_property_valuea string (if mf_property is ’name’ or ’type’); an array (if mf_property is ’params’)

Note that all of the strings representing properties above are case insensitive.

See also: newfis, getfis, showfis

fuzzy-logic-toolkit-0.6.1/docs/showfis.html000066400000000000000000000073321466512601400207750ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: showfis

Function Reference: showfis

Function File: showfis (fis)

Print all of the property (field) values of the FIS structure and its substructures.

See also: getfis, showrule

fuzzy-logic-toolkit-0.6.1/docs/showrule.html000066400000000000000000000263061466512601400211650ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: showrule

Function Reference: showrule

Function File: showrule (fis)
Function File: showrule (fis, index_list)
Function File: showrule (fis, index_list, format)
Function File: showrule (fis, index_list, 'verbose', language)
Function File: showrule (fis, index_list, 'verbose', 'custom', {"and" "or" "If" "then" "is" "isn't" "somewhat" "very" "extremely" "very very"})

Show the rules for an FIS structure in verbose, symbolic, or indexed format. Built in languages for the ’verbose’ format are: English, Chinese (or Mandarin, Pinyin), Russian (or Pycckii, Russkij), French (or Francais), Spanish (or Espanol), and German (or Deutsch). The names of the languages are case-insensitive, Chinese is written in Pinyin, and Russian is transliterated.

To use a custom language, enter ’verbose’ and ’custom’ for the third and fourth parameters, respectively, and a cell array of ten strings (to specify the custom language) corresponding to the English {"and" "or" "If" "then" "is" "isn’t" "somewhat" "very" "extremely" "very very"} for the fifth parameter.

To run the demonstration code, type "demo showrule" (without the quotation marks) at the Octave prompt.

See also: addrule, getfis, showfis

Example: 1

 

 fis = readfis ('sugeno_tip_calculator.fis');
 puts ("Output of: showrule(fis)\n");
 showrule (fis)
 puts ("\n");

Output of: showrule(fis)
1. If (Food-Quality is extremely Bad) and (Service is extremely Bad), then (Cheap-Tip is extremely Low) and (Average-Tip is very Low) and (Generous-Tip is Low) (1)
2. If (Food-Quality is Good) and (Service is extremely Bad), then (Cheap-Tip is Low) and (Average-Tip is Low) and (Generous-Tip is Medium) (1)
3. If (Food-Quality is very Good) and (Service is very Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
4. If (Food-Quality is Bad) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Low) and (Generous-Tip is Medium) (1)
5. If (Food-Quality is Good) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
6. If (Food-Quality is extremely Good) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is very High) (1)
7. If (Food-Quality is Bad) and (Service is Good), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
8. If (Food-Quality is Good) and (Service is Good), then (Cheap-Tip is Medium) and (Average-Tip is Medium) and (Generous-Tip is very High) (1)
9. If (Food-Quality is very Bad) and (Service is very Good), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
10. If (Food-Quality is very very Good) and (Service is very very Good), then (Cheap-Tip is High) and (Average-Tip is very High) and (Generous-Tip is extremely High) (1)

                    

Example: 2

 

 fis = readfis ('sugeno_tip_calculator.fis');
 puts ("Output of: showrule(fis, [2 4], 'symbolic')\n");
 showrule (fis, [2 4], 'symbolic')
 puts ("\n");

Output of: showrule(fis, [2 4], 'symbolic')
2.  (Food-Quality == Good) && (Service == Bad^3.0) => (Cheap-Tip == Low) && (Average-Tip == Low) && (Generous-Tip == Medium) (1)
4.  (Food-Quality == Bad) && (Service == Bad) => (Cheap-Tip == Low) && (Average-Tip == Low) && (Generous-Tip == Medium) (1)

                    

Example: 3

 

 fis = readfis ('sugeno_tip_calculator.fis');
 puts ("Output of: showrule(fis, 1:4, 'indexed')\n");
 showrule (fis, 1:4, 'indexed')
 puts ("\n");

Output of: showrule(fis, 1:4, 'indexed')
1.30 1.30, 1.30 1.20 1 (1) : 1
2 1.30, 1 1 2 (1) : 1
2.20 1.20, 1 2 3 (1) : 1
1 1, 1 1 2 (1) : 1

                    

Example: 4

 

 fis = readfis ('sugeno_tip_calculator.fis');
 puts ("Output of: showrule(fis, 1, 'verbose', 'francais')\n");
 showrule (fis, 1, 'verbose', 'francais')
 puts ("\n");

Output of: showrule(fis, 1, 'verbose', 'francais')
1. Si (Food-Quality est extremement Bad) et (Service est extremement Bad), alors (Cheap-Tip est extremement Low) et (Average-Tip est tres Low) et (Generous-Tip est Low) (1)

                    
fuzzy-logic-toolkit-0.6.1/docs/sigmf.html000066400000000000000000000145511466512601400204210ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: sigmf

Function Reference: sigmf

Function File: y = sigmf (x, params)
Function File: y = sigmf ([x1 x2 ... xn], [a c])

For a given domain x and parameters params (or [a c]), return the corresponding y values for the sigmoidal membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and c must be real numbers. This membership function satisfies the equation:

     f(x) = 1/(1 + exp(-a*(x - c)))
 

which always returns values in the range [0, 1].

The parameters a and c specify:

     a == the slope at c
     c == the inflection point
 

and at the inflection point, the value of the function is 0.5:

     f(c) == 0.5.
 

To run the demonstration code, type "demo sigmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [0.3 40];
 y1 = sigmf(x, params);
 params = [0.2 40];
 y2 = sigmf(x, params);
 params = [0.1 40];
 y3 = sigmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'sigmf demo');
 plot(x, y1, 'r;params = [0.3 40];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [0.2 40];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [0.1 40];', 'LineWidth', 2)
 ylim([-0.1 1.2]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/smf.html000066400000000000000000000145171466512601400201030ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: smf

Function Reference: smf

Function File: y = smf (x, params)
Function File: y = smf ([x1 x2 ... xn], [a b])

For a given domain x and parameters params (or [a b]), return the corresponding y values for the S-shaped membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and b must be real numbers, with a < b. This membership function satisfies:

           0                                if x <= a
   f(x) =  2 * ((x - a)/(b - a))^2          if a < x <= (a + b)/2
           1 - 2 * ((x - b)/(b - a))^2      if (a + b)/2 < x < b
           1                                if x >= b
 

which always returns values in the range [0, 1].

To run the demonstration code, type "demo smf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, trapmf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [40 60];
 y1 = smf(x, params);
 params = [25 75];
 y2 = smf(x, params);
 params = [10 90];
 y3 = smf(x, params);
 figure('NumberTitle', 'off', 'Name', 'smf demo');
 plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2)
 ylim([-0.1 1.2]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/sugeno_tip_demo.html000066400000000000000000000110301466512601400224610ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: sugeno_tip_demo

Function Reference: sugeno_tip_demo

Script File: sugeno_tip_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS with multiple outputs stored in a text file. Also demonstrate the use of hedges in the FIS rules and the Einstein product and sum as the T-norm/S-norm pair.

The demo:

  • reads the FIS structure from a file
  • plots the input membership functions
  • plots the (constant) output functions
  • plots each of the three FIS outputs as a function of the inputs
  • displays the FIS rules in verbose format in the Octave window
  • evaluates the Sugeno-type FIS for six inputs

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo

fuzzy-logic-toolkit-0.6.1/docs/trapmf.html000066400000000000000000000151551466512601400206060ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: trapmf

Function Reference: trapmf

Function File: y = trapmf (x, params)
Function File: y = trapmf ([x1 x2 ... xn], [a b c d])

For a given domain x and parameters params (or [a b c d]), return the corresponding y values for the trapezoidal membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and parameters a, b, c, and d must satisfy the inequalities: a < b <= c < d. None of the parameters a, b, c, d are required to be in the domain x. The minimum and maximum values of the trapezoid are assumed to be 0 and 1.

The parameters [a b c d] correspond to the x values of the corners of the trapezoid:

        1-|      --------
          |     /        \
          |    /          \
          |   /            \
        0-----------------------
             a   b      c   d
 

To run the demonstration code, type "demo trapmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [-1 0 20 40];
 y1 = trapmf(x, params);
 params = [20 40 60 80];
 y2 = trapmf(x, params);
 params = [60 80 100 101];
 y3 = trapmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'trapmf demo');
 plot(x, y1, 'r;params = [-1 0 20 40];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [20 40 60 80];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [60 80 100 101];', 'LineWidth', 2)
 ylim([-0.1 1.2]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/trimf.html000066400000000000000000000150651466512601400204360ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: trimf

Function Reference: trimf

Function File: y = trimf (x, params)
Function File: y = trimf ([x1 x2 ... xn], [a b c])

For a given domain x and parameters params (or [a b c]), return the corresponding y values for the triangular membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and parameters a, b, and c must be real numbers that satisfy a < b < c. None of the parameters a, b, and c are required to be in the domain x. The minimum and maximum values of the triangle are assumed to be 0 and 1.

The parameters [a b c] correspond to the x values of the vertices of the triangle:

        1-|         /\
          |        /  \
          |       /    \
          |      /      \
        0-----------------------
                a   b   c
 

To run the demonstration code, type "demo trimf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf_demo, zmf

Example: 1

 

 x = 0:100;
 params = [-1 0 50];
 y1 = trimf(x, params);
 params = [0 50 100];
 y2 = trimf(x, params);
 params = [50 100 101];
 y3 = trimf(x, params);
 figure('NumberTitle', 'off', 'Name', 'trimf demo');
 plot(x, y1, 'r;params = [-1 0 50];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [0 50 100];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [50 100 101];', 'LineWidth', 2)
 ylim([-0.1 1.2]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/docs/writefis.html000066400000000000000000000131441466512601400211450ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: writefis

Function Reference: writefis

Function File: writefis (fis)
Function File: writefis (fis, filename)
Function File: writefis (fis, filename, dialog)

Save the specified FIS currently in the Octave workspace to a file named by the user.

There are three forms of writefis:

Number of ArgumentsAction Taken
1Open a dialog GUI to help the user choose a directory and name for the output file.
2Do not open a dialog GUI. Save the FIS to a file in the current directory with the specified filename. If the specified filename does not end in ’.fis’, append ’.fis’ to the filename.
3Open a dialog GUI with the specified filename in the ’filename’ textbox of the GUI. If the specified filename does not end in ’.fis’, append ’.fis’ to the filename.

The types/values of the arguments are expected to be:

ArgumentExpected Type or Value
fisan FIS structure satisfying is_fis (see private/is_fis.m)
filenamea string; if the string does not already end with the extension ".fis", then ".fis" is added
dialogthe string ’dialog’ (case insensitive)

Note: The GUI dialog requires zenity to be installed on the system.

Known error: When using the file dialog, if the user clicks "Cancel" instead of saving the file, an error message is generated.

See also: readfis

fuzzy-logic-toolkit-0.6.1/docs/xie_beni_index.html000066400000000000000000000113631466512601400222630ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: xie_beni_index

Function Reference: xie_beni_index

Function File: vxb = xie_beni_index (input_data, cluster_centers, soft_partition)

Return the Xie-Beni validity index for a given soft partition.

The arguments to xie_beni_index are:

  • input_data: a matrix of input data points; each row corresponds to one point
  • cluster_centers: a matrix of cluster centers; each row corresponds to one point
  • soft_partition: the membership degree of each input data point in each cluster

The return value is:

  • vxb: the Xie-Beni validity index for the given partition

To run demonstration code that uses this function, type "demo fcm" or "demo gustafson_kessel" (without the quotation marks) at the Octave prompt.

For more information about the input_data, cluster_centers, and soft_partition matrices, please see the documentation for function fcm.

See also: fcm, gustafson_kessel, partition_coeff, partition_entropy

fuzzy-logic-toolkit-0.6.1/docs/zmf.html000066400000000000000000000152051466512601400201050ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: zmf

Function Reference: zmf

Function File: y = zmf (x, params)
Function File: y = zmf ([x1 x2 ... xn], [a b])

For a given domain x and parameters params (or [a b]), return the corresponding y values for the Z-shaped membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and b must be real numbers, with a < b. This membership function satisfies:

             1                               if x <= a
     f(x) =  1 - 2 * ((x - a)/(b - a))^2     if a < x <= (a + b)/2
             2 * ((x - b)/(b - a))^2         if (a + b)/2 < x < b
             0                               if x >= b
 

which always returns values in the range [0, 1].

The parameters a and b specify:

     a == the rightmost point at which f(x) = 1
     b == the leftmost point at which f(x) = 0
 

At the midpoint of the segment [a, b], the function value is 0.5:

     f((a + b)/2) = 0.5
 

To run the demonstration code, type "demo zmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf_demo

Example: 1

 

 x = 0:100;
 params = [40 60];
 y1 = zmf(x, params);
 params = [25 75];
 y2 = zmf(x, params);
 params = [10 90];
 y3 = zmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'zmf demo');
 plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.1/inst/000077500000000000000000000000001466512601400164455ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.1/inst/addmf.m000066400000000000000000000147201466512601400177020ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_name}, @var{mf_type}, @var{mf_params}) ## ## Add a membership function to an existing FIS ## structure and return the updated FIS. ## ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .35 .65 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{in_or_out} ## @tab 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab valid index of an FIS input/output variable ## @item @var{mf_name} ## @tab a string ## @item @var{mf_type} ## @tab a string ## @item @var{mf_params} ## @tab a vector ## @end multitable ## @sp 1 ## If @var{mf_type} is one of the built-in membership functions, then the ## number and values of the parameters must satisfy the membership function ## requirements for the specified @var{mf_type}. ## ## Note that addmf will allow the user to add membership functions or ## membership function names for a given input or output variable that ## duplicate mfs or mf names already entered. ## ## Also, constant and linear membership functions are not restricted to FIS ## structure outputs or to Sugeno-type FIS structures, and the result of using ## them for FIS inputs or Mamdani-type FIS outputs has not yet been tested. ## ## To run the demonstration code, type "@t{demo addmf}" (without the quotation ## marks) at the Octave prompt. ## This demo creates two FIS input variables and associated membership functions ## and then produces two figures showing the term sets for the two FIS inputs. ## ## @seealso{rmmf, setfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addmf.m ## Note: The demo code is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Last-Modified: 12 Jun 2024 function fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, ... mf_params) ## If the caller did not supply 6 argument values with the correct ## types, print an error message and halt. if (nargin != 6) error ("addmf requires 6 arguments\n"); elseif (!is_fis (fis)) error ("addmf's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("addmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("addmf's third argument must be a variable index\n"); elseif (!(is_string (mf_name) && is_string (mf_type))) error ("addmf's fourth and fifth arguments must be strings\n"); elseif (!are_mf_params (mf_type, mf_params)) error ("addmf's sixth argument must be a vector of parameters\n"); endif ## Create a new membership function struct and update the ## FIS structure. new_mf = struct ('name', mf_name, 'type', mf_type, 'params', ... mf_params); if (strcmp (tolower (in_or_out), 'input')) if (length (fis.input(var_index).mf) == 0) fis.input(var_index).mf = new_mf; else fis.input(var_index).mf = [fis.input(var_index).mf, new_mf]; endif else if (length (fis.output(var_index).mf) == 0) fis.output(var_index).mf = new_mf; else fis.output(var_index).mf = [fis.output(var_index).mf, new_mf]; endif endif endfunction %!demo %! ## Create new FIS. %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %! %! ## Add two inputs and their membership functions. %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); %! a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ... %! [90 110 120 140]); %! a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ... %! [120 140 150 170]); %! a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ... %! [150 170 180 200]); %! a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); %! %! a = addvar (a, 'input', 'HDL-Level', [0 100]); %! a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); %! a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); %! a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); %! %! ## Plot the input membership functions. %! plotmf (a, 'input', 1); %! plotmf (a, 'input', 2); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addmf(fis, 'input', 1, 'Excellent', 'trapmf', [5 8 10 11]); %! assert(fis.input(1).mf(3).name, 'Excellent'); ## Test input validation %!error %! addmf() %!error %! addmf(1) %!error %! addmf(1, 2) %!error %! addmf(1, 2, 3) %!error %! addmf(1, 2, 3, 4) %!error %! addmf(1, 2, 3, 4, 5) %!error %! addmf(1, 2, 3, 4, 5, 6, 7) %!error %! addmf(1, 2, 3, 4, 5, 6) %!error %! addmf(fis, 'file', 3, 4, 5, 6) %!error %! addmf(fis, 'input', 3, 4, 5, 6) %!error %! addmf(fis, 'input', 1, 4, 'string', 6) %!error %! addmf(fis, 'input', 1, 'string', 5, 6) %!error %! addmf(fis, 'input', 1, 'string', 'trapmf', []) fuzzy-logic-toolkit-0.6.1/inst/addrule.m000066400000000000000000000113411466512601400202430ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addrule (@var{fis}, @var{rule_matrix}) ## ## Add a list of rules to an existing FIS structure and return ## the updated FIS. ## ## Each row of the @var{rule_matrix} represents one rule and has the form: ## ## @verbatim ## [in1_mf ... inM_mf out1_mf ... outN_mf weight connect] ## @end verbatim ## ## where: ## ## @multitable @columnfractions .25 .70 ## @headitem Element in Rule Vector @tab Expected Type or Value ## @item in_mf ## @tab membership function index for input i ## @item out_mf ## @tab membership function index for output j ## @item weight ## @tab relative weight of the rule (0 <= weight <= 1) ## @item connect ## @tab antecedent connective (1 == and; 2 == or) ## @item @ @ ## @tab @ @ ## @headitem Hedge String @tab Effect of Applying Hedge ## @item "not" ## @tab prepend a minus sign to the membership function index ## @item "somewhat" ## @tab append ".05" to the membership function index ## @item "very" ## @tab append ".20" to the membership function index ## @item "extremely" ## @tab append ".30" to the membership function index ## @item "very very" ## @tab append ".40" to the membership function index ## @item custom hedge ## @tab append .xy, where x.y is the degree to which the membership ## value should be raised, to the membership function index ## @end multitable ## @sp 1 ## To omit an input or output, use 0 for the membership function index. ## The consequent connective is always "and". ## ## For example, to express: ## ## @verbatim ## "If (input_1 is mf_2) or (input_3 is not mf_1) or (input_4 is very mf_1), ## then (output_1 is mf_2) and (output_2 is mf_1^0.3)." ## @end verbatim ## ## with weight 1, the corresponding row of @var{rule_matrix} would be: ## ## @verbatim ## [2 0 -1 4.2 2 1.03 1 2] ## @end verbatim ## ## For a complete example that uses addrule, see heart_disease_demo_1.m. ## ## @seealso{heart_disease_demo_1, showrule} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy rule ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addrule.m ## Last-Modified: 13 Jun 2024 function fis = addrule (fis, rule_matrix) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("addrule requires 2 arguments\n"); elseif (!is_fis (fis)) error ("addrule's first argument must be an FIS structure\n"); elseif (!is_real_matrix (rule_matrix)) error ("addrule's second argument must be a matrix of real numbers\n"); endif ## For each row in the rule_matrix, create a new rule struct and ## update the FIS structure. num_inputs = columns (fis.input); num_outputs = columns (fis.output); for i = 1 : rows (rule_matrix) antecedent = rule_matrix(i, 1 : num_inputs); consequent = rule_matrix(i, ... (num_inputs+1) : (num_inputs+num_outputs)); weight = rule_matrix(i, num_inputs + num_outputs + 1); connection = rule_matrix(i, num_inputs + num_outputs + 2); new_rules(i) = struct ('antecedent', antecedent, ... 'consequent', consequent, ... 'weight', weight, ... 'connection', connection); endfor if (length (fis.rule) == 0) fis.rule = new_rules; else fis.rule = [fis.rule, new_rules]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addrule(fis, [1 2 2 1 1 1]); %! assert(fis.rule(5).antecedent, [1 2]); ## Test input validation %!error %! addrule() %!error %! addrule(1) %!error %! addrule(1, 2, 3) %!error %! addrule(1, 2) %!error %! addrule(fis, 2j) fuzzy-logic-toolkit-0.6.1/inst/addvar.m000066400000000000000000000101601466512601400200620ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addvar (@var{fis}, @var{in_or_out}, @var{var_name}, @var{var_range}) ## ## Add an input or output variable to an existing FIS ## structure and return the updated FIS. ## ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .35 .40 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{in_or_out} ## @tab either 'input' or 'output' (case-insensitive) ## @item @var{var_name} ## @tab a string ## @item @var{var_range} ## @tab a vector [x1 x2] of two real numbers ## @end multitable ## @sp 1 ## The vector components x1 and x2, which must also satisfy x1 <= x2, ## specify the lower and upper bounds of the variable's domain. ## ## To run the demonstration code, type "@t{demo addvar}" (without the quotation ## marks) at the Octave prompt. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy variable ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addvar.m ## Last-Modified: 13 Jun 2024 function fis = addvar (fis, in_or_out, var_name, var_range) ## If the caller did not supply 4 argument values with the correct ## types, print an error message and halt. if (nargin != 4) error ("addvar requires 4 arguments\n"); elseif (!is_fis (fis)) error ("addvar's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("addvar's second argument must be 'input' or 'output'\n"); elseif (!is_string (var_name)) error ("addvar's third argument must be a string\n"); elseif (!are_bounds (var_range)) error ("addvar's fourth argument must specify variable bounds\n"); endif ## Create a new variable struct and update the FIS input or output ## variable list. new_variable = struct ('name', var_name, 'range', var_range, ... 'mf', []); if (strcmp (tolower (in_or_out), 'input')) if (length (fis.input) == 0) fis.input = new_variable; else fis.input = [fis.input, new_variable]; endif else if (length (fis.output) == 0) fis.output = new_variable; else fis.output = [fis.output, new_variable]; endif endif endfunction %!demo %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! getfis (a, 'input', 1); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addvar(fis, 'input', 'Dining-Room', [1 10]); %! assert(fis.input(3).name == 'Dining-Room'); ## Test input validation %!error %! addvar() %!error %! addvar(1) %!error %! addvar(1, 2) %!error %! addvar(1, 2, 3) %!error %! addvar(1, 2, 3, 4, 5) %!error %! addvar(1, 2, 3, 4) %!error %! addvar(fis, 2, 3, 4) %!error %! addvar(fis, 'input', 3, 4) %!error %! addvar(fis, 'input', 'string', 4) fuzzy-logic-toolkit-0.6.1/inst/algebraic_product.m000066400000000000000000000065231466512601400223020ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} algebraic_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} algebraic_product (@var{x}, @var{y}) ## ## Return the algebraic product of the input. ## The algebraic product of two real scalars x and y is: x * y ## ## For one vector argument, apply the algebraic product to all of elements of ## the vector. (The algebraic product is associative.) For one two-dimensional ## matrix argument, return a vector of the algebraic product of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise product. ## ## @seealso{algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy algebraic_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: algebraic_product.m ## Last-Modified: 26 Jul 2024 function retval = algebraic_product (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("algebraic_product requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("arguments to algebraic_product must be real scalars or matrices\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = x .* y; elseif (nargin == 1 && ndims (x) <= 2) retval = prod (x); else error ("invalid arguments to function algebraic_product\n"); endif endfunction %!test %! x = [5 2 3 6]; %! z = algebraic_product(x); %! assert(z, 180); %!test %! x = [5 2 3 6]; %! y = [-1 0 2 3]; %! z = algebraic_product(x, y); %! assert(z, [-5 0 6 18]); ## Test input validation %!error %! algebraic_product() %!error %! algebraic_product(1, 2, 3) %!error %! algebraic_product(2j) %!error %! algebraic_product(1, 2j) %!error %! algebraic_product([1 2j]) %!error %! algebraic_product([1 2], [1 2 3]) %!error %! algebraic_product([1 2], [1 2; 3 4]) %!error %! algebraic_product(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/algebraic_sum.m000066400000000000000000000071361466512601400214270ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} algebraic_sum (@var{x, y}) ## @deftypefnx {Function File} {@var{retval} =} algebraic_sum (@var{x, y}) ## ## Return the algebraic sum of the input. ## The algebraic sum of two real scalars x and y is: x + y - x * y ## ## For one vector argument, apply the algebraic sum to all of elements of ## the vector. (The algebraic sum is associative.) For one two-dimensional ## matrix argument, return a vector of the algebraic sum of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise algebraic sum. ## ## @seealso{algebraic_product, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy algebraic_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: algebraic_sum.m ## Last-Modified: 26 Jul 2024 function retval = algebraic_sum (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("algebraic_sum requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("algebraic_sum requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = x + y - x .* y; elseif (nargin == 1 && isvector (x)) retval = algebraic_sum_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = algebraic_sum_of_vector (x(:, i)); endfor else error ("invalid arguments to function algebraic_sum\n"); endif endfunction function retval = algebraic_sum_of_vector (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = x + y - x * y; endfor retval = x; endfunction %!test %! x = [5 2]; %! z = algebraic_sum(x); %! assert(z, -3); %!test %! x = [5 2 3 6]; %! y = [-1 0 2 3]; %! z = algebraic_sum(x, y); %! assert(z, [9 2 -1 -9]); ## Test input validation %!error %! algebraic_sum() %!error %! algebraic_sum(1, 2, 3) %!error %! algebraic_sum(2j) %!error %! algebraic_sum(1, 2j) %!error %! algebraic_sum([1 2j]) %!error %! algebraic_sum([1 2], [1 2 3]) %!error %! algebraic_sum([1 2], [1 2; 3 4]) %!error %! algebraic_sum(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/bounded_difference.m000066400000000000000000000074421466512601400224240ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} bounded_difference (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} bounded_difference (@var{x}, @var{y}) ## ## Return the bounded difference of the input. ## The bounded difference of two real scalars x and y is: max (0, x + y - 1) ## ## For one vector argument, apply the bounded difference to all of the elements ## of the vector. (The bounded difference is associative.) For one ## two-dimensional matrix argument, return a vector of the bounded difference ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise bounded difference. ## ## @seealso{algebraic_product, algebraic_sum, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy bounded_difference ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: bounded_difference.m ## Last-Modified: 26 Jul 2024 function retval = bounded_difference (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("bounded_difference requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("bounded_difference requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = max (0, (x + y - 1)); elseif (nargin == 1 && isvector (x)) retval = bounded_difference_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = bounded_difference_of_vector (x(:, i)); endfor else error ("invalid arguments to function bounded_difference\n"); endif endfunction function retval = bounded_difference_of_vector (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); x = max (0, (x + y - 1)); endfor retval = x; endfunction %!test %! x = [5 2]; %! z = bounded_difference(x); %! assert(z, 6); %!test %! x = [5 2 3 -6]; %! y = [-1 0 2 3]; %! z = bounded_difference(x, y); %! assert(z, [3 1 4 0]); ## Test input validation %!error %! bounded_difference() %!error %! bounded_difference(1, 2, 3) %!error %! bounded_difference(2j) %!error %! bounded_difference(1, 2j) %!error %! bounded_difference([1 2j]) %!error %! bounded_difference([1 2], [1 2 3]) %!error %! bounded_difference([1 2], [1 2; 3 4]) %!error %! bounded_difference(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/bounded_sum.m000066400000000000000000000071031466512601400211300ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} bounded_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} bounded_sum (@var{x}, @var{y}) ## ## Return the bounded sum of the input. ## The bounded sum of two real scalars x and y is: min (1, x + y) ## ## For one vector argument, apply the bounded sum to all of elements of ## the vector. (The bounded sum is associative.) For one two-dimensional ## matrix argument, return a vector of the bounded sum of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise bounded sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy bounded_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: bounded_sum.m ## Last-Modified: 26 Jul 2024 function retval = bounded_sum (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("bounded_sum requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("bounded_sum requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = min (1, (x + y)); elseif (nargin == 1 && isvector (x)) retval = bounded_sum_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = bounded_sum_of_vector (x(:, i)); endfor else error ("invalid arguments to function bounded_sum\n"); endif endfunction function retval = bounded_sum_of_vector (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = min (1, (x + y)); endfor retval = x; endfunction %!test %! x = [0.5 0.2]; %! z = bounded_sum(x); %! assert(z, 0.7, 1e-5); %!test %! x = [0.5 0.2 0.3 0.6]; %! y = [1 0 0.2 0.3]; %! z = bounded_sum(x, y); %! assert(z, [1 0.2 0.5 0.9], 1e-5); ## Test input validation %!error %! bounded_sum() %!error %! bounded_sum(1, 2, 3) %!error %! bounded_sum(2j) %!error %! bounded_sum(1, 2j) %!error %! bounded_sum([1 2j]) %!error %! bounded_sum([1 2], [1 2 3]) %!error %! bounded_sum([1 2], [1 2; 3 4]) %!error %! bounded_sum(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/cubic_approx_demo.m000066400000000000000000000043361466512601400223130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} cubic_approx_demo ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a ## non-linear function using a Sugeno-type FIS with linear output functions. ## ## The demo: ## @itemize @bullet ## @item ## reads an FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (linear) output functions ## @item ## plots the FIS output as a function of the input ## @end itemize ## ## @seealso{heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: cubic_approx_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('cubic_approximator.fis'); ## Plot the input membership functions and linear output functions. plotmf (fis, 'input', 1); plotmf (fis, 'output', 1, -150, 150); ## Plot the FIS output y as a function of the input x. gensurf (fis); %!test %! fis = readfis ('cubic_approximator.fis'); %! cubes = evalfis([-2.5; -2; -1.5; -1; 0; 1; 1.5; 2; 2.5], fis, 101); %! expected_result = ... %! [-13.7500 %! -8.0000 %! -2.2500 %! -1.0000 %! 0 %! 1.0000 %! 2.2500 %! 8.0000 %! 13.7500]; %! assert(cubes, expected_result, 1e-4); fuzzy-logic-toolkit-0.6.1/inst/cubic_approximator.fis000066400000000000000000000045061466512601400230470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: cubic_approximator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Cubic-Approximator' Type='sugeno' Version=2.0 NumInputs=1 NumOutputs=1 NumRules=11 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='wtaver' [Input1] Name='X' Range=[-5 5] NumMFs=11 MF1 = 'About-Neg-Five':'trimf', [-6 -5 -4] MF2 = 'About-Neg-Four':'trimf', [-5 -4 -3] MF3 = 'About-Neg-Three':'trimf', [-4 -3 -2] MF4 = 'About-Neg-Two':'trimf', [-3 -2 -1] MF5 = 'About-Neg-One':'trimf', [-2 -1 0] MF6 = 'About-Zero':'trimf', [-1 0 1] MF7 = 'About-One':'trimf', [0 1 2] MF8 = 'About-Two':'trimf', [1 2 3] MF9 = 'About-Three':'trimf', [2 3 4] MF10 = 'About-Four':'trimf', [3 4 5] MF11 = 'About-Five':'trimf', [4 5 6] [Output1] Name='Approx-X-Cubed' Range=[-5 5] NumMFs=11 MF1 = 'Tangent-at-Neg-Five':'linear', [75 250] MF2 = 'Tangent-at-Neg-Four':'linear', [48 128] MF3 = 'Tangent-at-Neg-Three':'linear', [27 54] MF4 = 'Tangent-at-Neg-Two':'linear', [12 16] MF5 = 'Tangent-at-Neg-One':'linear', [3 2] MF6 = 'Tangent-at-Zero':'linear', [0 0] MF7 = 'Tangent-at-One':'linear', [3 -2] MF8 = 'Tangent-at-Two':'linear', [12 -16] MF9 = 'Tangent-at-Three':'linear', [27 -54] MF10 = 'Tangent-at-Four':'linear', [48 -128] MF11 = 'Tangent-at-Five':'linear', [75 -250] [Rules] 1, 1 (1) : 1 2, 2 (1) : 1 3, 3 (1) : 1 4, 4 (1) : 1 5, 5 (1) : 1 6, 6 (1) : 1 7, 7 (1) : 1 8, 8 (1) : 1 9, 9 (1) : 1 10, 10 (1) : 1 11, 11 (1) : 1 fuzzy-logic-toolkit-0.6.1/inst/defuzz.m000066400000000000000000000252621466512601400201410ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{crisp_x} =} defuzz (@var{x}, @var{y}, @var{defuzz_method}) ## @deftypefnx {Function File} {@var{crisp_x} =} defuzz (@var{[x1 x2 ... xn]}, @var{[y1 y2 ... yn]}, @var{defuzz_method}) ## ## For a given domain, set of fuzzy function values, and defuzzification method, ## return the defuzzified (crisp) value of the fuzzy function. ## ## The arguments @var{x} and @var{y} must be either two real numbers or ## two equal-length, non-empty vectors of reals, with the elements of @var{x} ## strictly increasing. @var{defuzz_method} must be a (case-sensitive) string ## corresponding to a defuzzification method. Defuzz handles both built-in ## and custom defuzzification methods. ## ## The built-in defuzzification methods are: ## ## @multitable @columnfractions .20 .75 ## @headitem Method @tab Value Returned ## @item centroid ## @tab Return the x-value of the centroid. ## @item bisector ## @tab Return the x-value of the vertical bisector of the area. ## @item mom ## @tab Return the mean x-value of the points with maximum y-values. ## @item som ## @tab Return the smallest (absolute) x-value of the points with ## maximum y-values. ## @item lom ## @tab Return the largest (absolute) x-value of the points with ## maximum y-values. ## @item wtaver ## @tab Return the weighted average of the x-values, with the y-values ## used as weights. ## @item wtsum ## @tab Return the weighted sum of the x-values, with the y-values ## used as weights. ## @end multitable ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy defuzzification ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: defuzz.m ## Last-Modified: 10 Jun 2024 ##---------------------------------------------------------------------- function crisp_x = defuzz (x, y, defuzz_method) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if (nargin != 3) error ("defuzz requires 3 arguments\n"); elseif (!is_domain (x)) error ("defuzz's first argument must be a valid domain\n"); elseif (!(isvector (y) && isreal (y) && length (x) == length (y))) error ("defuzz's 1st and 2nd arguments must have the same length\n"); elseif (!is_string (defuzz_method)) error ("defuzz's third argument must be a string\n"); endif ## Calculate and return the defuzzified (crisp_x) value using the ## method specified by the argument defuzz_method. crisp_x = str2func (defuzz_method) (x, y); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = centroid (x, y) ## crisp_x = centroid ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the x-value of the centroid of the ## region described by the points (xi, yi). ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = centroid (x, y) crisp_x = trapz (x, x.*y) / trapz (x, y); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = bisector (x, y) ## crisp_x = bisector ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the x-value of a bisector of the region ## described by the points (xi, yi). ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = bisector (x, y) ## Find the bisector using a binary search. To ensure that the ## function terminates, add a counter to limit the iterations to the ## length of the vectors x and y. half_area = trapz (x, y) / 2; x_len = length (x); upper = x_len; lower = 1; count = 1; while ((lower <= upper) && (count++ < x_len)) midpoint = round ((lower + upper)/2); left_domain = [ones(1, midpoint), zeros(1, x_len-midpoint)]; left_y_vals = left_domain .* y; left_area = trapz (x, left_y_vals); error = left_area - half_area; if (error > 0) upper = midpoint; else lower = midpoint; endif endwhile crisp_x = midpoint; endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = mom (x, y) ## crisp_x = mom ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Mean of Maximum"; that is, return ## the average of the x-values corresponding to the maximum y-value ## in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = mom (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else 0 endif; y_val = @(y_val) 1 * (y_val == max_y); max_y_locations = arrayfun (y_val, y); crisp_x = sum (x .* max_y_locations) / sum (max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = som (x, y) ## crisp_x = som ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Smallest of Maximum"; that is, ## return the smallest x-value corresponding to the maximum y-value ## in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = som (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; y_val = @(y_val) one_or_NaN(y_val, max_y); max_y_locations = arrayfun (y_val, y); crisp_x = min (x .* max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = lom (x, y) ## crisp_x = lom ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Largest of Maximum"; that is, ## return the largest x-value corresponding to the maximum y-value in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = lom (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; y_val = @(y_val) one_or_NaN(y_val, max_y); max_y_locations = arrayfun (y_val, y); crisp_x = max (x .* max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: one_or_NaN (a, b) ## ## Return 1 if the arguments are equal, and otherwise return NaN. ## Called by som and lom (immediately above) to fix anonymous function ## bodies, which must be expressions, not statements. ## ## Examples: ## one_or_NaN (2, 2) ==> 1 ## one_or_NaN (2, 3) ==> NaN ##---------------------------------------------------------------------- function retval = one_or_NaN (a, b) if (a == b) retval = 1; else retval = NaN; endif endfunction ##---------------------------------------------------------------------- ## Usage: retval = wtaver (values, weights) ## ## Return the weighted average of the values. The parameters are assumed ## to be equal-length vectors of real numbers. ## ## Examples: ## wtaver ([1 2 3 4], [1 1 1 1]) ==> 2.5 ## wtaver ([1 2 3 4], [1 2 3 4]) ==> 3 ## wtaver ([1 2 3 4], [0 0 1 1]) ==> 3.5 ##---------------------------------------------------------------------- function retval = wtaver (values, weights) retval = sum (weights .* values) / sum (weights); endfunction ##---------------------------------------------------------------------- ## Usage: retval = wtsum (values, weights) ## ## Return the weighted sum of the values. The parameters are assumed to ## be equal-length vectors of real numbers. ## ## Examples: ## wtsum ([1 2 3 4], [1 1 1 1]) ==> 10 ## wtsum ([1 2 3 4], [1 2 3 4]) ==> 30 ## wtsum ([1 2 3 4], [0 0 1 1]) ==> 7 ##---------------------------------------------------------------------- function retval = wtsum (values, weights) retval = sum (weights .* values); endfunction ## Test each of the defuzzification methods %!assert(defuzz([1 2 3 4], [1 2 3 4], 'centroid'), 2.8667, 1e-4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'bisector'), 3) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'mom'), 4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'som'), 4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'lom'), 4) %!assert(defuzz([1 2 3 4], [1 1 1 1], 'wtaver'), 2.5) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'wtaver'), 3) %!assert(defuzz([1 2 3 4], [0 0 1 1], 'wtaver'), 3.5) %!assert(defuzz([1 2 3 4], [1 1 1 1], 'wtsum'), 10) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'wtsum'), 30) %!assert(defuzz([1 2 3 4], [0 0 1 1], 'wtsum'), 7) ## Test input validation %!error %! defuzz() %!error %! defuzz(1) %!error %! defuzz(1, 2) %!error %! defuzz(1, 2, 3, 4) %!error %! defuzz([1 0], 2, 3) %!error %! defuzz([0 1], 2, 3) %!error %! defuzz([0 1], [2 3], 3) fuzzy-logic-toolkit-0.6.1/inst/drastic_product.m000066400000000000000000000101561466512601400220170ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} drastic_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} drastic_product (@var{x}, @var{y}) ## ## Return the drastic product of the input. ## ## The drastic product of two real scalars x and y is: ## ## @verbatim ## min (x, y) if max (x, y) == 1 ## 0 otherwise ## @end verbatim ## ## For one vector argument, apply the drastic product to all of the elements ## of the vector. (The drastic product is associative.) For one ## two-dimensional matrix argument, return a vector of the drastic product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise drastic product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy drastic_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: drastic_product.m ## Last-Modified: 26 Jul 2024 function retval = drastic_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function drastic_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function drastic_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function drastic_product\n"); endif endif endfunction function retval = scalar_args (x, y) if (max (x, y) == 1) retval = min (x, y); else retval = 0; endif endfunction function retval = vector_arg (x) if (isempty (x)) retval = 1; elseif (max (x) == 1) retval = min (x); else retval = 0; endif endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [0.5 0.2]; %! z = drastic_product(x); %! assert(z, 0); %!test %! x = [0.5 0.2 0.3 1]; %! y = [1 0 0.2 0.3]; %! z = drastic_product(x, y); %! assert(z, [0.5 0 0 0.3]); ## Test input validation %!error %! drastic_product() %!error %! drastic_product(1, 2, 3) %!error %! drastic_product(2j) %!error %! drastic_product(1, 2j) %!error %! drastic_product([1 2j]) %!error %! drastic_product([1 2], [1 2 3]) %!error %! drastic_product([1 2], [1 2; 3 4]) %!error %! drastic_product(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/drastic_sum.m000066400000000000000000000077611466512601400211530ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} drastic_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} drastic_sum (@var{x}, @var{y}) ## ## Return the drastic sum of the input. ## ## The drastic sum of two real scalars x and y is: ## ## @verbatim ## max (x, y) if min (x, y) == 0 ## 1 otherwise ## @end verbatim ## ## For one vector argument, apply the drastic sum to all of the elements ## of the vector. (The drastic sum is associative.) For one ## two-dimensional matrix argument, return a vector of the drastic sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise drastic sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy drastic_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: drastic_sum.m ## Last-Modified: 26 Jul 2024 function retval = drastic_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function drastic_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function drastic_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function drastic_sum\n"); endif endif endfunction function retval = scalar_args (x, y) if (min (x, y) == 0) retval = max (x, y); else retval = 1; endif endfunction function retval = vector_arg (x) if (isempty (x)) retval = 0; elseif (min (x) == 0) retval = max (x); else retval = 1; endif endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [0.5 0.2]; %! z = drastic_sum(x); %! assert(z, 1); %!test %! x = [0.5 0.2 0.3 1]; %! y = [1 0 0.2 0.3]; %! z = drastic_sum(x, y); %! assert(z, [1 0.2 1 1]); ## Test input validation %!error %! drastic_sum() %!error %! drastic_sum(1, 2, 3) %!error %! drastic_sum(2j) %!error %! drastic_sum(1, 2j) %!error %! drastic_sum([1 2j]) %!error %! drastic_sum([1 2], [1 2 3]) %!error %! drastic_sum([1 2], [1 2; 3 4]) %!error %! drastic_sum(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/dsigmf.m000066400000000000000000000116321466512601400200770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} dsigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} dsigmf (@var{[x1 x2 ... xn]}, @var{[a1 c1 a2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[a1 c1 a2 c2]}), return the corresponding @var{y} values for the ## difference between two sigmoidal membership functions. ## ## The argument @var{x} must be a real number or a non-empty list of strictly ## increasing real numbers, and @var{a1}, @var{c1}, @var{a2}, and @var{c2} must ## be real numbers. This membership function satisfies the equation: ## ## @verbatim ## f(x) = 1/(1 + exp(-a1*(x - c1))) - 1/(1 + exp(-a2*(x - c2))) ## @end verbatim ## ## and in addition, is bounded above and below by 1 and 0 (regardless of the ## value given by the formula above). ## ## If the parameters @var{a1} and @var{a2} are positive and @var{c1} and ## @var{c2} are far enough apart with @var{c1} < @var{c2}, then: ## ## @verbatim ## (a1)/4 ~ the rising slope at c1 ## c1 ~ the left inflection point ## (-a2)/4 ~ the falling slope at c2 ## c2 ~ the right inflection point ## @end verbatim ## ## and at each inflection point, the value of the function is about 0.5: ## ## @verbatim ## f(c1) ~ f(c2) ~ 0.5. ## @end verbatim ## ## Here, the symbol ~ means "approximately equal". ## ## To run the demonstration code, type "@t{demo dsigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: dsigmf.m ## Last-Modified: 26 Jul 2024 function y = dsigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("dsigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("dsigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('dsigmf', params)) error ("dsigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a1 = params(1); c1 = params(2); a2 = params(3); c2 = params(4); y_val = @(x_val) max (0, ... min (1, 1 / (1 + exp (-a1 * (x_val - c1))) - ... 1 / (1 + exp (-a2 * (x_val - c2))))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.5 20 0.3 60]; %! y1 = dsigmf(x, params); %! params = [0.3 20 0.2 60]; %! y2 = dsigmf(x, params); %! params = [0.2 20 0.1 60]; %! y3 = dsigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'dsigmf demo'); %! plot(x, y1, 'r;params = [0.5 20 0.3 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.3 20 0.2 60];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.2 20 0.1 60];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [5 2 3 6]; %! y = [4.5383e-05 6.6925e-03 0.5000 0.9932 0.9975 0.9526 ... %! 0.5000 0.047426 2.4726e-03 1.2339e-04 6.1442e-06]; %! z = dsigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! dsigmf() %!error %! dsigmf(1) %!error %! dsigmf([1 0], 2) %!error %! dsigmf(1, 2) %!error %! dsigmf(1, 2, 3) %!error %! dsigmf(0:100, []) %!error %! dsigmf(0:100, [30]) %!error %! dsigmf(0:100, [2 3]) %!error %! dsigmf(0:100, [90 80 30]) %!error %! dsigmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.1/inst/einstein_product.m000066400000000000000000000101221466512601400221750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} einstein_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} einstein_product (@var{x}, @var{y}) ## ## Return the Einstein product of the input. ## The Einstein product of two real scalars x and y is: ## (x * y) / (2 - (x + y - x * y)) ## ## For one vector argument, apply the Einstein product to all of the elements ## of the vector. (The Einstein product is associative.) For one ## two-dimensional matrix argument, return a vector of the Einstein product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise Einstein product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy einstein_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: einstein_product.m ## Last-Modified: 26 Jul 2024 function retval = einstein_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function einstein_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function einstein_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function einstein_product\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x * y) / (2 - (x + y - x * y)); endfunction function retval = vector_arg (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); x = (x * y) / (2 - (x + y - x * y)); endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = einstein_product(x); %! assert(z, 1.6667, 1e-3); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = einstein_product(x, y); %! assert(z, [0.7134 2.0000 2.0000 1.6364], 1e-3); ## Test input validation %!error %! einstein_product() %!error %! einstein_product(2j) %!error %! einstein_product(1, 2j) %!error %! einstein_product([1 2j]) %!error %! einstein_product(1, 2, 3) %!error %! einstein_product([1 2], [1 2 3]) %!error %! einstein_product([1 2], [1 2; 3 4]) %!error %! einstein_product(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/einstein_sum.m000066400000000000000000000076561466512601400213430ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} einstein_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} einstein_sum (@var{x}, @var{y}) ## ## Return the Einstein sum of the input. ## The Einstein sum of two real scalars x and y is: (x + y) / (1 + x * y) ## ## For one vector argument, apply the Einstein sum to all of the elements ## of the vector. (The Einstein sum is associative.) For one ## two-dimensional matrix argument, return a vector of the Einstein sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise Einstein sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy einstein_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: einstein_sum.m ## Last-Modified: 26 Jul 2024 function retval = einstein_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function einstein_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function einstein_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function einstein_sum\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x + y) / (1 + x * y); endfunction function retval = vector_arg (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = (x + y) / (1 + x * y); endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = einstein_sum(x); %! assert(z, 0.5000); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = einstein_sum(x, y); %! assert(z, [-1.000 1.000 0.7143 0.4737], 1e-4); ## Test input validation %!error %! einstein_sum() %!error %! einstein_sum(2j) %!error %! einstein_sum(1, 2j) %!error %! einstein_sum([1 2j]) %!error %! einstein_sum(1, 2, 3) %!error %! einstein_sum([1 2], [1 2 3]) %!error %! einstein_sum([1 2], [1 2; 3 4]) %!error %! einstein_sum(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/evalfis.m000066400000000000000000000260401466512601400202560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} evalfis (@var{user_input}, @var{fis}) ## @deftypefnx {Function File} {@var{output} =} evalfis (@var{user_input}, @var{fis}, @var{num_points}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis (@var{user_input}, @var{fis}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis (@var{user_input}, @var{fis}, @var{num_points}) ## ## Return the crisp output(s) of an FIS for each row in a matrix of crisp input ## values. ## Also, for the last row of @var{user_input}, return the intermediate results: ## ## @multitable @columnfractions .25 .65 ## @headitem Intermediate Result @tab Value Returned ## @item @var{rule_input} ## @tab a matrix of the degree to which each FIS rule matches each ## FIS input variable ## @item @var{rule_output} ## @tab a matrix of the fuzzy output for each (rule, FIS output) pair ## @item @var{fuzzy_output} ## @tab a matrix of the aggregated output for each FIS output variable ## @end multitable ## @sp 1 ## The optional argument @var{num_points} specifies the number of points over ## which to evaluate the fuzzy values. The default value of @var{num_points} is ## 101. ## ## @strong{Argument @var{user_input}:} ## @var{user_input} is a matrix of crisp input values. Each row ## represents one set of crisp FIS input values. For an FIS that has N inputs, ## an input matrix of z sets of input values will have the form: ## ## @verbatim ## [[input_11 input_12 ... input_1N] <-- 1st row is 1st set of inputs ## [input_21 input_22 ... input_2N] <-- 2nd row is 2nd set of inputs ## [ ... ] ... ## [input_z1 input_z2 ... input_zN]] <-- zth row is zth set of inputs ## @end verbatim ## ## @strong{Return value @var{output}:} ## @var{output} is a matrix of crisp output values. Each row represents ## the set of crisp FIS output values for the corresponding row of ## @var{user_input}. For an FIS that has M outputs, an @var{output} matrix ## corresponding to the preceding input matrix will have the form: ## ## @verbatim ## [[output_11 output_12 ... output_1M] <-- 1st row is 1st set of outputs ## [output_21 output_22 ... output_2M] <-- 2nd row is 2nd set of outputs ## [ ... ] ... ## [output_z1 output_z2 ... output_zM]] <-- zth row is zth set of outputs ## @end verbatim ## ## @strong{The intermediate result @var{rule_input}:} ## The matching degree for each (rule, input value) pair is specified by the ## @var{rule_input} matrix. For an FIS that has Q rules and N input variables, ## the matrix will have the form: ## @verbatim ## in_1 in_2 ... in_N ## rule_1 [[mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN]] ## @end verbatim ## ## @strong{Evaluation of hedges and "not":} ## Each element of each FIS rule antecedent and consequent indicates the ## corresponding membership function, hedge, and whether or not "not" should ## be applied to the result. The index of the membership function to be used is ## given by the positive whole number portion of the antecedent/consequent ## vector entry, the hedge is given by the fractional portion (if any), and ## "not" is indicated by a minus sign. A "0" as the integer portion in any ## position in the rule indicates that the corresponding FIS input or output ## variable is omitted from the rule. ## ## For custom hedges and the four built-in hedges "somewhat," "very," ## "extremely," and "very very," the membership function value (without the ## hedge or "not") is raised to the power corresponding to the hedge. All ## hedges are rounded to 2 digits. ## ## For example, if "mu(x)" denotes the matching degree of the input to the ## corresponding membership function without a hedge or "not," then the final ## matching degree recorded in @var{rule_input} will be computed by applying ## the hedge and "not" in two steps. First, the hedge is applied: ## ## @verbatim ## (fraction == .05) <=> somewhat x <=> mu(x)^0.5 <=> sqrt(mu(x)) ## (fraction == .20) <=> very x <=> mu(x)^2 <=> sqr(mu(x)) ## (fraction == .30) <=> extremely x <=> mu(x)^3 <=> cube(mu(x)) ## (fraction == .40) <=> very very x <=> mu(x)^4 ## (fraction == .dd) <=> x <=> mu(x)^(dd/10) ## @end verbatim ## ## After applying the appropriate hedge, "not" is calculated by: ## ## @verbatim ## minus sign present <=> not x <=> 1 - mu(x) ## minus sign and hedge present <=> not x <=> 1 - mu(x)^(dd/10) ## @end verbatim ## ## Hedges and "not" in the consequent are handled similarly. ## ## @strong{The intermediate result @var{rule_output}:} ## For either a Mamdani-type FIS (that is, an FIS that does not have constant or ## linear output membership functions) or a Sugeno-type FIS (that is, an FIS ## that has only constant and linear output membership functions), ## @var{rule_output} specifies the fuzzy output for each (rule, FIS output) pair. ## The format of rule_output depends on the FIS type. ## ## For a Mamdani-type FIS, @var{rule_output} is a @var{num_points} x (Q * M) ## matrix, where Q is the number of rules and M is the number of FIS output ## variables. Each column of this matrix gives the y-values of the fuzzy ## output for a single (rule, FIS output) pair. ## ## @verbatim ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## For a Sugeno-type FIS, @var{rule_output} is a 2 x (Q * M) matrix. ## Each column of this matrix gives the (location, height) pair of the ## singleton output for a single (rule, FIS output) pair. ## ## @verbatim ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [[ ] ## height [ ]] ## @end verbatim ## ## @strong{The intermediate result @var{fuzzy_output}:} ## The format of @var{fuzzy_output} depends on the FIS type ('mamdani' or ## 'sugeno'). ## ## For either a Mamdani-type FIS or a Sugeno-type FIS, @var{fuzzy_output} ## specifies the aggregated fuzzy output for each FIS output. ## ## For a Mamdani-type FIS, the aggregated @var{fuzzy_output} is a ## @var{num_points} x M matrix. Each column of this matrix gives the y-values ## of the fuzzy output for a single FIS output, aggregated over all rules. ## ## @verbatim ## out_1 out_2 ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## For a Sugeno-type FIS, the aggregated output for each FIS output is a 2 x L ## matrix, where L is the number of distinct singleton locations in the ## @var{rule_output} for that FIS output: ## ## @verbatim ## singleton_1 singleton_2 ... singleton_L ## location [[ ] ## height [ ]] ## @end verbatim ## ## Then @var{fuzzy_output} is a vector of M structures, each of which has an index and ## one of these matrices. ## ## @strong{Examples:} ## Five examples of using evalfis are shown in: ## @itemize @bullet ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: evalfis.m ## Last-Modified: 13 Jun 2024 function [output, rule_input, rule_output, fuzzy_output] = ... evalfis (user_input, fis, num_points = 101) ## If evalfis was called with an incorrect number of arguments, or ## the arguments do not have the correct type, print an error message ## and halt. if ((nargin != 2) && (nargin != 3)) error ("evalfis requires 2 or 3 arguments\n"); elseif (!is_fis (fis)) error ("evalfis's second argument must be an FIS structure\n"); elseif (!is_input_matrix (user_input, fis)) error ("evalfis's 1st argument must be a matrix of input values\n"); elseif (!is_pos_int (num_points)) error ("evalfis's third argument must be a positive integer\n"); endif ## Call a private function to compute the output. ## (The private function is also called by gensurf.) [output, rule_input, rule_output, fuzzy_output] = ... evalfis_private (user_input, fis, num_points); endfunction %!shared fis, food_service %! fis = readfis ('sugeno_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %!test %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 10.000 12.500 %! 10.868 13.681 19.138 %! 17.500 17.500 20.000 %! 10.604 14.208 19.452 %! 10.427 13.687 19.033 %! 10.471 14.358 19.353]; %! assert(tip, expected_result, 1e-3); ## Test input validation %!error %! evalfis() %!error %! evalfis(1) %!error %! evalfis(1, 2, 3, 4) %!error %! evalfis(food_service, 2, 3) %!error %! evalfis(0, fis, 3) %!error %! evalfis(food_service, fis, -3) fuzzy-logic-toolkit-0.6.1/inst/evalmf.m000066400000000000000000000116561466512601400201060ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## ## For a given domain, set of parameters, membership function type, and ## optional hedge and not_flag, return the corresponding y-values for the ## membership function. ## ## The argument @var{x} must be a real number or a non-empty list of strictly ## increasing real numbers, @var{param} must be a valid parameter or a vector ## of valid parameters for @var{mf_type}, and @var{mf_type} must be a string ## corresponding to a membership function type. Evalmf handles both built-in and ## custom membership functions. ## ## For custom hedges and the four built-in hedges "somewhat", "very", ## "extremely", and "very very", raise the membership function values to ## the power corresponding to the hedge. ## ## @verbatim ## (fraction == .05) <=> somewhat x <=> mu(x)^0.5 <=> sqrt(mu(x)) ## (fraction == .20) <=> very x <=> mu(x)^2 <=> sqr(mu(x)) ## (fraction == .30) <=> extremely x <=> mu(x)^3 <=> cube(mu(x)) ## (fraction == .40) <=> very very x <=> mu(x)^4 ## (fraction == .dd) <=> x <=> mu(x)^(dd/10) ## @end verbatim ## ## The @var{not_flag} negates the membership function using: ## ## @verbatim ## mu(not(x)) = 1 - mu(x) ## @end verbatim ## ## To run the demonstration code, type "@t{demo evalmf}" (without the quotation ## marks) at the Octave prompt. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership evaluate ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: evalmf.m ## Last-Modified: 12 Jun 2024 function y = evalmf (x, params, mf_type, hedge = 0, not_flag = false) ## If the caller did not supply 3 - 5 argument values with the correct ## types, print an error message and halt. if ((nargin < 3) || (nargin > 5)) error ("evalmf requires between 3 and 5 arguments\n"); elseif (!is_domain (x)) error ("evalmf's first argument must be a valid domain\n"); elseif (!is_string (mf_type)) error ("evalmf's third argument must be a string\n"); elseif (!is_real (hedge)) error ("evalmf's fourth argument must be a real number\n"); elseif (!isbool (not_flag)) error ("evalmf's fifth argument must be a Boolean\n"); endif ## Calculate and return the y values of the membership function on ## the domain x. y = evalmf_private (x, params, mf_type, hedge, not_flag); endfunction %!demo %! x = 0:100; %! params = [25 50 75]; %! mf_type = 'trimf'; %! y = evalmf(x, params, mf_type); %! figure('NumberTitle', 'off', 'Name', "evalmf(0:100, [25 50 75], 'trimf')"); %! plot(x, y, 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 50 75]; %! mf_type = 'trimf'; %! y = evalmf(x, params, mf_type); %! assert(y, [0 0 0 0.2 0.6 1 0.6 0.2 0 0 0]); ## Test input validation %!error %! evalmf() %!error %! evalmf(1) %!error %! evalmf(1, 2) %!error %! evalmf(1, 2, 3, 4, 5, 6) %!error %! evalmf([1 0], 2, 3) %!error %! evalmf([0 1], 2, 3) %!error %! evalmf([0 1], 2, 'trimf', 2j) %!error %! evalmf([0 1], 2, 'trimf', 2, 2) fuzzy-logic-toolkit-0.6.1/inst/fcm.m000066400000000000000000000342531466512601400173770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}, @var{options}) ## @deftypefnx {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}, @var{options}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## ## Using the Fuzzy C-Means algorithm, calculate and return the soft partition ## of a set of unlabeled data points. ## ## Also, if @var{display_intermediate_results} is true, display intermediate ## results after each iteration. Note that because the initial cluster ## prototypes are randomly selected locations in the ranges determined by the ## input data, the results of this function are nondeterministic. ## ## The required arguments to fcm are: ## @itemize @w ## @item ## @var{input_data}: a matrix of input data points; each row corresponds to one point ## @item ## @var{num_clusters}: the number of clusters to form ## @end itemize ## ## The optional arguments to fcm are: ## @itemize @w ## @item ## @var{m}: the parameter (exponent) in the objective function; default = 2.0 ## @item ## @var{max_iterations}: the maximum number of iterations before stopping; default = 100 ## @item ## @var{epsilon}: the stopping criteria; default = 1e-5 ## @item ## @var{display_intermediate_results}: if 1, display results after each iteration, and if 0, do not; default = 1 ## @end itemize ## ## The default values are used if any of the optional arguments are missing or ## evaluate to NaN. ## ## The return values are: ## @itemize @w ## @item ## @var{cluster_centers}: a matrix of the cluster centers; each row corresponds to one point ## @item ## @var{soft_partition}: a constrained soft partition matrix ## @item ## @var{obj_fcn_history}: the values of the objective function after each iteration ## @end itemize ## ## Three important matrices used in the calculation are X (the input points ## to be clustered), V (the cluster centers), and Mu (the membership of each ## data point in each cluster). Each row of X and V denotes a single point, ## and Mu(i, j) denotes the membership degree of input point X(j, :) in the ## cluster having center V(i, :). ## ## X is identical to the required argument @var{input_data}; V is identical ## to the output @var{cluster_centers}; and Mu is identical to the output ## @var{soft_partition}. ## ## If n denotes the number of input points and k denotes the number of ## clusters to be formed, then X, V, and Mu have the dimensions: ## ## @verbatim ## 1 2 ... #features ## 1 [[ ] ## X = input_data = 2 [ ] ## ... [ ] ## n [ ]] ## ## 1 2 ... #features ## 1 [[ ] ## V = cluster_centers = 2 [ ] ## ... [ ] ## k [ ]] ## ## 1 2 ... n ## 1 [[ ] ## Mu = soft_partition = 2 [ ] ## ... [ ] ## k [ ]] ## @end verbatim ## ## @seealso{gustafson_kessel, partition_coeff, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: fcm.m ## Last-Modified: 13 Jun 2024 function [cluster_centers, soft_partition, obj_fcn_history] = ... fcm (input_data, num_clusters, options = [2.0, 100, 1e-5, 1]) ## If fcm was called with an incorrect number of arguments, or the ## arguments do not have the correct type, print an error message ## and halt. if ((nargin != 2) && (nargin != 3)) error ("fcm requires 2 or 3 arguments\n"); elseif (!is_real_matrix (input_data)) error ("fcm's first argument must be matrix of real numbers\n"); elseif (!(is_int (num_clusters) && (num_clusters > 1))) error ("fcm's second argument must be an integer greater than 1\n"); elseif (!(isreal (options) && isvector (options))) error ("fcm's third argument must be a vector of real numbers\n"); endif ## Assign options to the more readable variable names: m, ## max_iterations, epsilon, and display_intermediate_results. ## If options are missing or NaN (not a number), use the default ## values. default_options = [2.0, 100, 1e-5, 1]; for i = 1 : 4 if ((length (options) < i) || ... isna (options(i)) || isnan (options(i))) options(i) = default_options(i); endif endfor m = options(1); max_iterations = options(2); epsilon = options(3); display_intermediate_results = options(4); ## Call a private function to compute the output. [cluster_centers, soft_partition, obj_fcn_history] = ... fcm_private (input_data, num_clusters, m, max_iterations, epsilon, display_intermediate_results); endfunction ##---------------------------------------------------------------------- ## Note: This function (fcm_private) is an implementation of Figure 13.4 ## in Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition) and Algorithm 4.1 in Fuzzy and Neural ## Control, by Robert Babuska, November 2009, p. 63. ##---------------------------------------------------------------------- function [V, Mu, obj_fcn_history] = ... fcm_private (X, k, m, max_iterations, epsilon, ... display_intermediate_results) ## Initialize the prototypes and the calculation. V = init_cluster_prototypes (X, k); obj_fcn_history = zeros (max_iterations); convergence_criterion = epsilon + 1; iteration = 0; ## Calculate a few numbers here to reduce redundant computation. k = rows (V); n = rows (X); sqr_dist = square_distance_matrix (X, V); ## Loop until the objective function is within tolerance or the ## maximum number of iterations has been reached. while (convergence_criterion > epsilon && ... ++iteration <= max_iterations) V_previous = V; Mu = update_cluster_membership (V, X, m, k, n, sqr_dist); Mu_m = Mu .^ m; V = update_cluster_prototypes (Mu_m, X, k); sqr_dist = square_distance_matrix (X, V); obj_fcn_history(iteration) = ... compute_cluster_obj_fcn (Mu_m, sqr_dist); if (display_intermediate_results) printf ("Iteration count = %d, Objective fcn = %8.6f\n", ... iteration, obj_fcn_history(iteration)); endif convergence_criterion = ... compute_cluster_convergence (V, V_previous); endwhile ## Remove extraneous entries from the tail of the objective ## function history. if (convergence_criterion <= epsilon) obj_fcn_history = obj_fcn_history(1 : iteration); endif endfunction ##---------------------------------------------------------------------- ## FCM Demo #1 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies a small set of unlabeled data points using %! ## the Fuzzy C-Means algorithm into two fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data is taken from Chapter 13, Example 17 in %! ## Fuzzy Logic: Intelligence, Control and Information, by %! ## J. Yen and R. Langari, Prentice Hall, 1999, page 381 %! ## (International Edition). %! %! ## Use fcm to classify the input_data. %! input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4]; %! number_of_clusters = 2; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! fcm (input_data, number_of_clusters) %! %! ## Plot the data points as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 1'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ##---------------------------------------------------------------------- ## FCM Demo #2 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies three-dimensional unlabeled data points using %! ## the Fuzzy C-Means algorithm into three fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data was selected to form three areas of %! ## different shapes. %! %! ## Use fcm to classify the input_data. %! input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7; %! 3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11; %! 3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9; %! 6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12; %! 11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15; %! 14 6 14; 14 8 13]; %! number_of_clusters = 3; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! fcm (input_data, number_of_clusters, [NaN NaN NaN 0]) %! %! ## Plot the data points in two dimensions (using features 1 & 2) %! ## as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 2) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Plot the data points in two dimensions %! ## (using features 1 & 3) as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 3) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 3), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 3'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ## Test input validation %!error %! fcm() %!error %! fcm(1) %!error %! fcm(1, 2, 3, 4) %!error %! fcm('input', 2) %!error %! fcm(1, 0) %!error %! fcm(1, 2, 2j) fuzzy-logic-toolkit-0.6.1/inst/gauss2mf.m000066400000000000000000000126021466512601400203530ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gauss2mf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gauss2mf (@var{[x1 x2 ... xn]}, @var{[sig1 c1 sig2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[sig1 c1 sig2 c2]}), return the corresponding @var{y} values for the ## two-sided Gaussian composite membership function. This membership function is ## a smooth curve calculated from two Gaussian membership functions as follows: ## ## Given parameters @var{sig1}, @var{c1}, @var{sig2}, and @var{c2}, that define ## two Gaussian membership functions, let: ## ## @verbatim ## f1(x) = exp((-(x - c1)^2)/(2 * sig1^2)) if x <= c1 ## 1 otherwise ## ## f2(x) = 1 if x <= c2 ## exp((-(x - c2)^2)/(2 * sig2^2)) otherwise ## @end verbatim ## ## Then gauss2mf is given by: ## ## @verbatim ## f(x) = f1(x) * f2(x) ## @end verbatim ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{sig1}, @var{c1}, @var{sig2}, and @var{c2} ## must be real numbers. ## Gauss2mf always returns a continuously differentiable curve with values in ## the range [0, 1]. ## ## If @var{c1} < @var{c2}, gauss2mf is a normal membership function (has a ## maximum value of 1), with the rising curve identical to that of f1(x) and a ## falling curve identical to that of f2(x), above. If @var{c1} >= @var{c2}, ## gauss2mf returns a subnormal membership function (has a maximum value less ## than 1). ## ## To run the demonstration code, type "@t{demo gauss2mf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership gaussian ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gauss2mf.m ## Last-Modified: 13 Jun 2024 function y = gauss2mf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gauss2mf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gauss2mf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gauss2mf', params)) error ("gauss2mf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on ## the domain x according to the definition of gauss2mf given in the ## comment above. sig1 = params(1); c1 = params(2); sig2 = params(3); c2 = params(4); f1_val = @(x_val) (x_val <= c1) * ... exp ((-(x_val - c1)^2)/(2 * sig1^2)) + ... (x_val > c1); f2_val = @(x_val) (x_val <= c2) + ... (x_val > c2) * exp ((-(x_val - c2)^2)/(2 * sig2^2)); f1 = arrayfun (f1_val, x); f2 = arrayfun (f2_val, x); y = f1 .* f2; endfunction %!demo %! x = -10:0.2:10; %! params = [3 0 1.5 2]; %! y1 = gauss2mf(x, params); %! params = [1.5 0 3 2]; %! y2 = gauss2mf(x, params); %! params = [1.5 2 3 0]; %! y3 = gauss2mf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gauss2mf demo'); %! plot(x, y1, 'r;params = [3 0 1.5 2];', 'LineWidth', 2); %! hold on ; %! plot(x, y2, 'b;params = [1.5 0 3 2];', 'LineWidth', 2); %! hold on ; %! plot(x, y3, 'g;params = [1.5 2 3 0];', 'LineWidth', 2); %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %! hold; %!test %! x = -10:2:10; %! params = [3 0 1.5 2]; %! y = [3.8659e-03 0.028566 0.1353 0.4111 0.8007 1 ... %! 1 0.4111 0.028566 3.3546e-04 6.6584e-07]; %! z = gauss2mf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gauss2mf() %!error %! gauss2mf(1) %!error %! gauss2mf(1, 2, 3) %!error %! gauss2mf([1 0], 2) %!error %! gauss2mf(1, 2) %!error %! gauss2mf(0:100, []) %!error %! gauss2mf(0:100, [30]) %!error %! gauss2mf(0:100, [2 3]) %!error %! gauss2mf(0:100, [90 80 30]) %!error %! gauss2mf(0:100, 'abc') fuzzy-logic-toolkit-0.6.1/inst/gaussmf.m000066400000000000000000000112551466512601400202740ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gaussmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gaussmf (@var{[x1 x2 ... xn]}, @var{[sig c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[sig c]}), ## return the corresponding @var{y} values for the Gaussian membership ## function. This membership function is shaped like the Gaussian (normal) ## distribution, but scaled to have a maximum value of 1. By contrast, the ## area under the Gaussian distribution curve is 1. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{sig} and @var{c} must be real numbers. ## This membership function satisfies the equation: ## ## @verbatim ## f(x) = exp((-(x - c)^2)/(2 * sig^2)) ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## Just as for the Gaussian (normal) distribution, the parameters @var{sig} and ## @var{c} represent: ## ## @verbatim ## sig^2 == the variance (a measure of the width of the curve) ## c == the center (the mean; the x value of the peak) ## @end verbatim ## ## For larger values of @var{sig}, the curve is flatter, and for smaller values ## of sig, the curve is narrower. The @var{y} value at the center is always 1: ## ## @verbatim ## f(c) == 1 ## @end verbatim ## ## To run the demonstration code, type "@t{demo gaussmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership gaussian ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gaussmf.m ## Last-Modified: 13 Jun 2024 function y = gaussmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gaussmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gaussmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gaussmf', params)) error ("gaussmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. sig = params(1); c = params(2); y_val = @(x_val) exp ((-(x_val - c)^2)/(2 * sig^2)); y = arrayfun (y_val, x); endfunction %!demo %! x = -5:0.1:5; %! params = [0.5 0]; %! y1 = gaussmf(x, params); %! params = [1 0]; %! y2 = gaussmf(x, params); %! params = [2 0]; %! y3 = gaussmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gaussmf demo'); %! plot(x, y1, 'r;params = [0.5 0];', 'LineWidth', 2); %! hold on ; %! plot(x, y2, 'b;params = [1 0];', 'LineWidth', 2); %! hold on ; %! plot(x, y3, 'g;params = [2 0];', 'LineWidth', 2); %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value'); %! ylabel('Degree of Membership'); %! grid; %! hold; %!test %! x = -5:5; %! params = [2 0]; %! y = [0.043937 0.1353 0.3247 0.6065 0.8825 1 ... %! 0.8825 0.6065 0.3247 0.1353 0.043937]; %! z = gaussmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gaussmf() %!error %! gaussmf(1) %!error %! gaussmf(1, 2, 3) %!error %! gaussmf([1 0], 2) %!error %! gaussmf(1, 2) %!error %! gaussmf(0:100, []) %!error %! gaussmf(0:100, [30]) %!error %! gaussmf(0:100, [2 3 4 5]) %!error %! gaussmf(0:100, [90 80 30]) %!error %! gaussmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.1/inst/gbellmf.m000066400000000000000000000116351466512601400202410ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gbellmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gbellmf (@var{[x1 x2 ... xn]}, @var{[a b c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c]}), ## return the corresponding @var{y} values for the generalized bell-shaped ## membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, @var{a}, @var{b}, and @var{c} must be real numbers, ## @var{a} must be non-zero, and @var{b} must be an integer. This membership ## function satisfies the equation: ## ## @verbatim ## f(x) = 1/(1 + (abs((x - c)/a))^(2 * b)) ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## The parameters @var{a}, @var{b}, and @var{c} give: ## ## @verbatim ## a == controls the width of the curve at f(x) = 0.5; ## f(c-a) = f(c+a) = 0.5 ## b == controls the slope of the curve at x = c-a and x = c+a; ## f'(c-a) = b/2a and f'(c+a) = -b/2a ## c == the center of the curve ## @end verbatim ## ## This membership function has a value of 0.5 at the two points c - a and ## c + a, and the width of the curve at f(x) == 0.5 is 2 * |a|: ## ## @verbatim ## f(c - a) == f(c + a) == 0.5 ## 2 * |a| == the width of the curve at f(x) == 0.5 ## @end verbatim ## ## The generalized bell-shaped membership function is continuously ## differentiable and is symmetric about the line x = c. ## ## To run the demonstration code, type "@t{demo gbellmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership bell-shaped bell ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gbellmf.m ## Last-Modified: 13 Jun 2024 function y = gbellmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gbellmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gbellmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gbellmf', params)) error ("gbellmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); c = params(3); y_val = @(x_val) 1 / (1 + (abs ((x_val - c)/a))^(2 * b)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:255; %! params = [20 4 100]; %! y1 = gbellmf(x, params); %! params = [30 3 100]; %! y2 = gbellmf(x, params); %! params = [40 2 100]; %! y3 = gbellmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gbellmf demo'); %! plot(x, y1, 'r;params = [20 4 100];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [30 3 100];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [40 2 100];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:25:250; %! params = [40 2 100]; %! y = [0.024961 0.074852 0.2906 0.8676 1 0.8676 ... %! 0.2906 0.074852 0.024961 0.010377 5.0313e-03]; %! z = gbellmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gbellmf() %!error %! gbellmf(1) %!error %! gbellmf(1, 2, 3) %!error %! gbellmf([1 0], 2) %!error %! gbellmf(1, 2) %!error %! gbellmf(0:100, []) %!error %! gbellmf(0:100, [30]) %!error %! gbellmf(0:100, [2 3]) %!error %! gbellmf(0:100, [90 80 30 50]) %!error %! gbellmf(0:100, 'abcd') fuzzy-logic-toolkit-0.6.1/inst/gensurf.m000066400000000000000000000204241466512601400202760ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} gensurf (@var{fis}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}, @var{ref_input}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}, @var{ref_input}, @var{num_points}) ## @deftypefnx {Function File} {@var{[x, y, z]} =} gensurf (...) ## ## Generate and plot a surface (or 2-dimensional curve) showing one FIS output ## as a function of two (or one) of the FIS inputs. The reference input is used ## for all FIS inputs that are not in the input_axes vector. ## ## Grids, which specifies the number of grids to show on the input axes, may be ## a scalar or a vector of length 2. If a scalar, then both axes will use the ## same number of grids. If a vector of length 2, then the grids on the two axes ## are controlled separately. ## ## Num_points specifies the number of points to use when evaluating the FIS. ## ## The final form "[x, y, z] = gensurf(...)" suppresses plotting. ## ## Default values for arguments not supplied are: ## @itemize @bullet ## @item ## input_axes == [1 2] ## @item ## output_axis == 1 ## @item ## grids == [15 15] ## @item ## ref_input == [] ## @item ## num_points == 101 ## @end itemize ## ## Six demo scripts that use gensurf are: ## @itemize @bullet ## @item ## cubic_approx_demo.m ## @item ## heart_disease_demo_1.m ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## Current limitation: ## The form of gensurf that suppresses plotting (the final form above) is not yet ## implemented. ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo, plotmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis plot ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gensurf.m ## Last-Modified: 29 May 2024 function [x, y, z] = gensurf (fis, input_axes = [1 2], ... output_axis = 1, grids = [15 15], ... ref_input = [], num_points = 101) ## If gensurf was called with an incorrect number of arguments, ## or the arguments do not have the correct type, print an error ## message and halt. if ((nargin < 1) || (nargin > 6)) error ("gensurf requires between 1 and 6 arguments\n"); elseif (!is_fis (fis)) error ("gensurf's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && !are_input_indices (input_axes, fis)) error ("gensurf's second argument must be valid input indices\n"); elseif ((nargin >= 3) && !is_output_index (output_axis, fis)) error ("gensurf's third argument must be a valid output index\n"); elseif ((nargin >= 4) && !is_grid_spec (grids)) error ("gensurf's 4th argument must be a grid specification\n"); elseif ((nargin >= 5) && !is_ref_input (ref_input, fis, input_axes)) error ("gensurf's 5th argument must be reference input values\n"); elseif ((nargin == 6) && ... !(is_pos_int (num_points) && (num_points >= 2))) error ("gensurf's sixth argument must be an integer >= 2\n"); endif if (length (input_axes) == 1 || columns (fis.input) == 1) generate_plot (fis, input_axes, output_axis, grids, ... ref_input, num_points); else generate_surface (fis, input_axes, output_axis, grids, ... ref_input, num_points); endif endfunction ##---------------------------------------------------------------------- ## Function: generate_plot ## Purpose: Generate a plot representing one of the FIS outputs as a ## function of one of the FIS inputs. ##---------------------------------------------------------------------- function [x, y, z] = generate_plot (fis, input_axis, output_axis, ... grids, ref_input, num_points) ## Create input to FIS using grid points and reference values. num_inputs = columns (fis.input); num_grid_pts = grids(1); fis_input = zeros (num_grid_pts, num_inputs); if (num_inputs == 1) input_axis = 1; endif for i = 1 : num_inputs if (i == input_axis) x_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... num_grid_pts))'; fis_input(:, i) = x_axis; else fis_input(:, i) = ref_input(i) * ones (num_grid_pts, 1); endif endfor ## Compute and plot the output. output = evalfis_private (fis_input, fis, num_points); figure ('NumberTitle', 'off', 'Name', fis.name); plot (x_axis, output, 'LineWidth', 2); xlabel (fis.input(input_axis).name, 'FontWeight', 'bold'); ylabel (fis.output(output_axis).name, 'FontWeight', 'bold'); grid; hold; endfunction ##---------------------------------------------------------------------- ## Function: generate_surface ## Purpose: Generate a surface representing one of the FIS outputs as ## a function of two of the FIS inputs. ##---------------------------------------------------------------------- function [x, y, z] = generate_surface (fis, input_axes, output_axis, ... grids, ref_input, num_points) ## Create input to FIS using grid points and reference values. num_inputs = columns (fis.input); if (length (grids) == 1) grids = [grids grids]; endif num_grid_pts = prod (grids); fis_input = zeros (num_grid_pts, num_inputs); for i = 1 : num_inputs if (i == input_axes(1)) x_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... grids(1)))'; elseif (i == input_axes(2)) y_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... grids(2)))'; else fis_input(:, i) = ref_input(i) * ones (num_grid_pts, 1); endif endfor [xx, yy] = meshgrid (x_axis, y_axis); fis_input(:, input_axes(1)) = xx(:); fis_input(:, input_axes(2)) = yy(:); ## Compute the output and reshape it to fit the grid. output = evalfis_private (fis_input, fis, num_points); z_matrix = reshape (output(:, output_axis), length (x_axis), ... length (y_axis)); ## Plot the surface. figure ('NumberTitle', 'off', 'Name', fis.name); surf (x_axis, y_axis, z_matrix); xlabel (fis.input(input_axes(1)).name); ylabel (fis.input(input_axes(2)).name); zlabel (fis.output(output_axis).name); endfunction %!shared fis %! fis = readfis ('cubic_approximator.fis'); ## Test input validation %!error %! gensurf() %!error %! gensurf(fis, 1, 1, 3, 0, 2, 0) %!error %! gensurf(1) %!error %! gensurf(fis, 2) %!error %! gensurf(fis, 1, 2) %!error %! gensurf(fis, 1, 1, 0) %!error %! gensurf(fis, 1, 1, 3, [0; 0]) fuzzy-logic-toolkit-0.6.1/inst/getfis.m000066400000000000000000000476451466512601400201240ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} getfis (@var{fis}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{property}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{var_property}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}, @var{mf_property}) ## ## Return or print the property (field) values of an FIS structure ## specified by the arguments. ## ## There are six forms of getfis: ## ## @multitable @columnfractions .20 .70 ## @headitem Number of Arguments @tab Action Taken ## @item 1 ## @tab Print (some) properties of an FIS structure on standard output. ## Return the empty set. ## @item 2 ## @tab Return a specified property of the FIS structure. The properties ## that may be specified are: name, type, version, numinputs, ## numoutputs, numinputmfs, numoutputmfs, numrules, andmethod, ## ormethod, impmethod, addmethod, defuzzmethod, inlabels, outlabels, ## inrange, outrange, inmfs, outmfs, inmflabels, outmflabels, ## inmftypes, outmftypes, inmfparams, outmfparams, and rulelist. ## @item 3 ## @tab Print the properties of a specified input or output variable ## of the FIS structure. Return the empty set. ## @item 4 ## @tab Return a specified property of an input or output variable. ## The properties that may be specified are: name, range, nummfs, ## and mflabels. ## @item 5 ## @tab Print the properties of a specified membership function of the ## FIS structure. Return the empty set. ## @item 6 ## @tab Return a specified property of a membership function. The ## properties that may be specified are: name, type, and params. ## @end multitable ## @sp 1 ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .20 .70 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{property} ## @tab a string; one of: 'name', 'type', 'version', 'numinputs', ## 'numoutputs', 'numinputmfs', 'numoutputmfs', ## 'numrules', 'andmethod', 'ormethod', 'impmethod', ## 'addmethod', 'defuzzmethod' 'inlabels', 'outlabels', ## 'inrange', 'outrange', 'inmfs', 'outmfs', ## 'inmflabels', 'outmflabels', 'inmftypes', ## 'outmftypes', 'inmfparams', 'outmfparams', and ## 'rulelist' (case-insensitive) ## @item @var{in_or_out} ## @tab either 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab a valid integer index of an input or output FIS variable ## @item @var{var_property} ## @tab a string; one of: 'name', 'range', 'nummfs', and 'mflabels' ## @item @var{mf} ## @tab the string 'mf' ## @item @var{mf_index} ## @tab a valid integer index of a membership function ## @item @var{mf_property} ## @tab a string; one of 'name', 'type', or 'params' ## @end multitable ## @sp 1 ## Note that all of the strings representing properties above are case ## insensitive. ## ## @seealso{setfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: getfis.m ## Last-Modified: 13 Jun 2024 ##---------------------------------------------------------------------- function retval = getfis (fis, arg2 = 'dummy', arg3 = 'dummy', ... arg4 = 'dummy', arg5 = 'dummy', ... arg6 = 'dummy') switch (nargin) case 1 retval = getfis_one_arg (fis); case 2 retval = getfis_two_args (fis, arg2); case 3 retval = getfis_three_args (fis, arg2, arg3); case 4 retval = getfis_four_args (fis, arg2, arg3, arg4); case 5 retval = getfis_five_args (fis, arg2, arg3, arg4, arg5); case 6 retval = getfis_six_args (fis, arg2, arg3, arg4, arg5, ... arg6); otherwise error ("getfis requires 1-6 arguments\n"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: getfis_one_arg ## Purpose: Handle calls to getfis that have 1 argument. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_one_arg (fis) ## If the argument does not have the correct type, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); endif ## Print (some) properties of the FIS structure. Return the empty set. printf ("Name = %s\n", fis.name); printf ("Type = %s\n", fis.type); printf ("NumInputs = %d\n", columns(fis.input)); printf ("InLabels = \n"); for i = 1 : columns (fis.input) printf ("\t%s\n", fis.input(i).name); endfor printf ("NumOutputs = %d\n", columns(fis.output)); printf ("OutLabels = \n"); for i = 1 : columns (fis.output) printf ("\t%s\n", fis.output(i).name); endfor printf ("NumRules = %d\n", columns(fis.rule)); printf ("AndMethod = %s\n", fis.andMethod); printf ("OrMethod = %s\n", fis.orMethod); printf ("ImpMethod = %s\n", fis.impMethod); printf ("AggMethod = %s\n", fis.aggMethod); printf ("DefuzzMethod = %s\n", fis.defuzzMethod); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_two_args ## Purpose: Handle calls to getfis that have 2 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_two_args (fis, arg2) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ismember (tolower (arg2), {'name', ... 'type', 'version', 'numinputs', 'numoutputs', ... 'numinputmfs', 'numoutputmfs', 'numrules', 'andmethod', ... 'ormethod', 'impmethod', 'aggmethod', 'defuzzmethod', ... 'inlabels', 'outlabels', 'inrange', 'outrange', 'inmfs', ... 'outmfs', 'inmflabels', 'outmflabels', 'inmftypes', ... 'outmftypes', 'inmfparams', 'outmfparams', 'rulelist'}))) error ("unknown second argument to getfis\n"); endif ## Return the specified property of the FIS structure. switch (tolower (arg2)) case 'name' retval = fis.name; case 'type' retval = fis.type; case 'version' retval = fis.version; case 'numinputs' retval = columns (fis.input); case 'numoutputs' retval = columns (fis.output); case 'numrules' retval = columns(fis.rule); case 'andmethod' retval = fis.andMethod; case 'ormethod' retval = fis.orMethod; case 'impmethod' retval = fis.impMethod; case 'aggmethod' retval = fis.aggMethod; case 'defuzzmethod' retval = fis.defuzzMethod; case 'numinputmfs' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = columns(fis.input(i).mf); else retval = [retval columns(fis.input(i).mf)]; endif endfor case 'numoutputmfs' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = columns(fis.output(i).mf); else retval = [retval columns(fis.output(i).mf)]; endif endfor case 'inlabels' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = fis.input(i).name; else retval = [retval; fis.input(i).name]; endif endfor case 'outlabels' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = fis.output(i).name; else retval = [retval; fis.output(i).name]; endif endfor case 'inrange' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = fis.input(i).range; else retval = [retval; fis.input(i).range]; endif endfor case 'outrange' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = fis.output(i).range; else retval = [retval; fis.output(i).range]; endif endfor case 'inmfs' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = columns(fis.input(i).mf); else retval = [retval columns(fis.input(i).mf)]; endif endfor case 'outmfs' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = columns(fis.output(i).mf); else retval = [retval columns(fis.output(i).mf)]; endif endfor case 'inmflabels' retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) if (i == 1 && y == 1) retval = fis.input(i).mf(j).name; else retval = [retval; fis.input(i).mf(j).name]; endif endfor endfor case 'outmflabels' retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) if (i == 1 && y == 1) retval = fis.output(i).mf(j).name; else retval = [retval; fis.output(i).mf(j).name]; endif endfor endfor case 'inmftypes' retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) if (i == 1 && y == 1) retval = fis.input(i).mf(j).type; else retval = [retval; fis.input(i).mf(j).type]; endif endfor endfor case 'outmftypes' retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) if (i == 1 && y == 1) retval = fis.output(i).mf(j).type; else retval = [retval; fis.output(i).mf(j).type]; endif endfor endfor case 'inmfparams' ## Determine the dimensions of the matrix to return. max_len = 0; num_inputs = columns (fis.input); num_mfs = 0; for i = 1 : num_inputs num_var_i_mfs = columns (fis.input(i).mf); num_mfs += num_var_i_mfs; for j = 1 : num_var_i_mfs max_len = max (max_len, length (fis.input(i).mf(j).params)); endfor endfor ## Assemble the matrix of params to return. Pad with zeros. retval = zeros (num_mfs, max_len); for i = 1 : num_inputs for j = 1 : columns (fis.input(i).mf) next_row_index = (i - 1) * max_len + j; next_row = fis.input(i).mf(j).params; retval(next_row_index, 1 : length (next_row)) = next_row; endfor endfor case 'outmfparams' ## Determine the dimensions of the matrix to return. max_len = 0; num_outputs = columns (fis.output); num_mfs = 0; for i = 1 : num_outputs num_var_i_mfs = columns (fis.output(i).mf); num_mfs += num_var_i_mfs; for j = 1 : num_var_i_mfs max_len = max (max_len, length (fis.output(i).mf(j).params)); endfor endfor ## Assemble the matrix of params to return. Pad with zeros. retval = zeros (num_mfs, max_len); for i = 1 : num_outputs for j = 1 : columns (fis.output(i).mf) next_row_index = (i - 1) * max_len + j; next_row = fis.output(i).mf(j).params; retval(next_row_index, 1 : length (next_row)) = next_row; endfor endfor case 'rulelist' ## Determine the dimensions of the matrix to return. num_inputs = columns (fis.input); num_outputs = columns (fis.output); num_rules = columns (fis.rule); ## Assemble the matrix of rules to return. retval = zeros (num_rules, num_inputs + num_outputs + 2); for i = 1 : num_rules retval(i, 1:num_inputs) = fis.rule(i).antecedent; retval(i, num_inputs+1:num_inputs+num_outputs) = ... fis.rule(i).consequent; retval(i, num_inputs+num_outputs+1) = fis.rule(i).weight; retval(i, num_inputs+num_outputs+2) = fis.rule(i).connection; endfor otherwise error ("internal error in getfis_two_args"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: getfis_three_args ## Purpose: Handle calls to getfis that have 3 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_three_args (fis, arg2, arg3) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); endif ## Print the properties of a specified input or output variable of the ## FIS structure. Return the empty set. var_str = ["fis." tolower(arg2) "(" num2str(arg3) ")"]; var_mf_str = [var_str ".mf"]; num_mfs = columns (eval (var_mf_str)); printf ("Name = %s\n", eval ([var_str ".name"])); printf ("NumMFs = %d\n", num_mfs); printf ("MFLabels = \n"); for i = 1 : num_mfs printf ("\t%s\n", eval ([var_mf_str "(" num2str(i) ").name"])); endfor printf ("Range = %s\n", mat2str (eval ([var_str ".range"]))); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_four_args ## Purpose: Handle calls to getfis that have 4 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_four_args (fis, arg2, arg3, arg4) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string (arg4) && ismember (tolower (arg4), ... {'name', 'range', 'nummfs', 'mflabels'}))) error ("incorrect fourth argument to getfis\n"); endif ## Return the specified property of the FIS input or output variable. arg2 = tolower (arg2); arg4 = tolower (arg4); if (ismember (arg4, {'name', 'range'})) retval = eval (["fis." arg2 "(" num2str(arg3) ")." arg4]); elseif (strcmp (arg4, 'nummfs')) retval = columns (eval (["fis." arg2 "(" num2str(arg3) ").mf"])); elseif (strcmp (arg2, 'input') && strcmp (arg4, 'mflabels')) retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) retval = [retval; fis.input(i).mf(j).name]; endfor endfor elseif (strcmp (arg2, 'output') && strcmp (arg4, 'mflabels')) retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) retval = [retval; fis.output(i).mf(j).name]; endfor endfor endif endfunction ##---------------------------------------------------------------------- ## Function: getfis_five_args ## Purpose: Handle calls to getfis that have 5 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_five_args (fis, arg2, arg3, arg4, arg5) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string(arg2) && ... ismember(tolower(arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index(fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string(arg4) && isequal(tolower(arg4), 'mf'))) error ("incorrect fourth argument to getfis\n"); elseif (!is_mf_index(fis, arg2, arg3, arg5)) error ("incorrect fifth argument to getfis\n"); endif ## Print the properties of a specified membership function of the ## FIS structure. Return the empty set. var_mf_str = ["fis." tolower(arg2) "(" num2str(arg3) ").mf(" ... num2str(arg5) ")"]; printf ("Name = %s\n", eval ([var_mf_str ".name"])); printf ("Type = %s\n", eval ([var_mf_str ".type"])); printf ("Params = "); disp (eval ([var_mf_str ".params"])); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_six_args ## Purpose: Handle calls to getfis that have 6 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_six_args (fis, arg2, arg3, arg4, arg5, arg6) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string (arg4) && isequal (tolower (arg4), 'mf'))) error ("incorrect fourth argument to getfis\n"); elseif (!is_mf_index (fis, arg2, arg3, arg5)) error ("incorrect fifth argument to getfis\n"); elseif (!(is_string (arg6) && ismember (tolower (arg6), ... {'name', 'type', 'params'}))) error ("incorrect sixth argument to getfis\n"); endif ## Return the specified membership function property. retval = eval (["fis." tolower(arg2) "(" num2str(arg3) ").mf(" ... num2str(arg5) ")." tolower(arg6)]); endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); ## Test input validation %!error %! getfis() %!error %! getfis(1, 2, 3, 4, 5, 6, 7) %!error %! getfis(1, 2, 3, 4, 5, 6) %!error %! getfis(fis, 2, 3, 4, 5, 6) %!error %! getfis(fis, 'input', 3, 4, 5, 6) %!error %! getfis(fis, 'input', 1, 4, 5, 6) %!error %! getfis(fis, 'input', 1, 'mf', 5, 6) %!error %! getfis(fis, 'input', 1, 'mf', 1, 6) fuzzy-logic-toolkit-0.6.1/inst/gustafson_kessel.m000066400000000000000000000421571466512601400222130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, @var{options}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, @var{options}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## ## Using the Gustafson-Kessel algorithm, calculate and return the soft partition ## of a set of unlabeled data points. ## ## Also, if @var{display_intermediate_results} is true, display intermediate ## results after each iteration. Note that because the initial cluster ## prototypes are randomly selected locations in the ranges determined by the ## input data, the results of this function are nondeterministic. ## ## The required arguments to gustafson_kessel are: ## @itemize @w ## @item ## @var{input_data}: a matrix of input data points; each row corresponds to one point ## @item ## @var{num_clusters}: the number of clusters to form ## @end itemize ## ## The third (optional) argument to gustafson_kessel is a vector of cluster volumes. ## If omitted, a vector of 1's will be used as the default. ## ## The fourth (optional) argument to gustafson_kessel is a vector consisting of: ## @itemize @w ## @item ## @var{m}: the parameter (exponent) in the objective function; default = 2.0 ## @item ## @var{max_iterations}: the maximum number of iterations before stopping; default = 100 ## @item ## @var{epsilon}: the stopping criteria; default = 1e-5 ## @item ## @var{display_intermediate_results}: if 1, display results after each iteration, and if 0, do not; default = 1 ## @end itemize ## ## The default values are used if any of the four elements of the vector are missing or ## evaluate to NaN. ## ## The return values are: ## @itemize @w ## @item ## @var{cluster_centers}: a matrix of the cluster centers; each row corresponds to one point ## @item ## @var{soft_partition}: a constrained soft partition matrix ## @item ## @var{obj_fcn_history}: the values of the objective function after each iteration ## @end itemize ## ## Three important matrices used in the calculation are X (the input points ## to be clustered), V (the cluster centers), and Mu (the membership of each ## data point in each cluster). Each row of X and V denotes a single point, ## and Mu(i, j) denotes the membership degree of input point X(j, :) in the ## cluster having center V(i, :). ## ## X is identical to the required argument @var{input_data}; V is identical ## to the output @var{cluster_centers}; and Mu is identical to the output ## @var{soft_partition}. ## ## If n denotes the number of input points and k denotes the number of ## clusters to be formed, then X, V, and Mu have the dimensions: ## ## @verbatim ## 1 2 ... #features ## 1 [[ ] ## X = input_data = 2 [ ] ## ... [ ] ## n [ ]] ## ## 1 2 ... #features ## 1 [[ ] ## V = cluster_centers = 2 [ ] ## ... [ ] ## k [ ]] ## ## 1 2 ... n ## 1 [[ ] ## Mu = soft_partition = 2 [ ] ## ... [ ] ## k [ ]] ## @end verbatim ## ## @seealso{fcm, partition_coeff, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gustafson_kessel.m ## Last-Modified: 13 Jun 2024 function [cluster_centers, soft_partition, obj_fcn_history] = ... gustafson_kessel (input_data, num_clusters, ... cluster_volume = [], options = [2.0, 100, 1e-5, 1]) ## If gustafson_kessel was called with an incorrect number of ## arguments, or the arguments do not have the correct type, print ## an error message and halt. if ((nargin < 2) || (nargin > 4)) error ("gustafson_kessel requires 2, 3, or 4 arguments\n"); elseif (!is_real_matrix (input_data)) error ("gustafson_kessel's 1st argument must be matrix of reals\n"); elseif (!(is_int (num_clusters) && (num_clusters > 1))) error ("gustafson_kessel's 2nd argument must be an int greater than 1\n"); elseif (!(isequal (cluster_volume, []) || ... (isreal (cluster_volume) && isvector (cluster_volume)))) error ("gustafson_kessel's 3rd arg must be a vector of reals\n"); elseif (!(isreal (options) && isvector (options))) error ("gustafson_kessel's 4th arg must be a vector of reals\n"); endif ## If the cluster volume matrix was not entered, create a default ## value (a vector of 1's). if (isequal (cluster_volume, [])) cluster_volume = ones (1, num_clusters); endif ## Assign options to the more readable variable names: m, ## max_iterations, epsilon, and display_intermediate_results. ## If options are missing or NaN (not a number), use the default ## values. default_options = [2.0, 100, 1e-5, 1]; for i = 1 : 4 if ((length (options) < i) || ... isna (options(i)) || isnan (options(i))) options(i) = default_options(i); endif endfor m = options(1); max_iterations = options(2); epsilon = options(3); display_intermediate_results = options(4); ## Call a private function to compute the output. [cluster_centers, soft_partition, obj_fcn_history] = ... gustafson_kessel_private (input_data, num_clusters, ... cluster_volume, m, max_iterations, ... epsilon, display_intermediate_results); endfunction ##---------------------------------------------------------------------- ## Function: gustafson_kessel_private ## Purpose: Classify unlabeled data points using the Gustafson-Kessel ## algorithm. ## Note: This function (gustafson_kessel_private) is an ## implementation of Algorithm 4.2 in Fuzzy and Neural ## Control, by Robert Babuska, November 2009, p. 69. ##---------------------------------------------------------------------- function [V, Mu, obj_fcn_history] = ... gustafson_kessel_private (X, k, cluster_volume, m, max_iterations, ... epsilon, display_intermediate_results) ## Initialize the prototypes and the calculation. V = init_cluster_prototypes (X, k); obj_fcn_history = zeros (max_iterations); convergence_criterion = epsilon + 1; iteration = 0; ## Calculate a few numbers here to reduce redundant computation. k = rows (V); n = rows (X); sqr_dist = square_distance_matrix (X, V); ## Loop until the objective function is within tolerance or the ## maximum number of iterations has been reached. while (convergence_criterion > epsilon && ... ++iteration <= max_iterations) V_previous = V; Mu = update_cluster_membership (V, X, m, k, n, sqr_dist); Mu_m = Mu .^ m; V = update_cluster_prototypes (Mu_m, X, k); sqr_dist = gk_square_distance_matrix (X, V, Mu_m, cluster_volume); obj_fcn_history(iteration) = ... compute_cluster_obj_fcn (Mu_m, sqr_dist); if (display_intermediate_results) printf ("Iteration count = %d, Objective fcn = %8.6f\n", ... iteration, obj_fcn_history(iteration)); endif convergence_criterion = ... compute_cluster_convergence (V, V_previous); endwhile ## Remove extraneous entries from the tail of the objective ... ## function history. if (convergence_criterion <= epsilon) obj_fcn_history = obj_fcn_history(1 : iteration); endif endfunction ##---------------------------------------------------------------------- ## Function: gk_square_distance_matrix ##---------------------------------------------------------------------- function sqr_dist = gk_square_distance_matrix (X, V, Mu_m, ... cluster_volume) k = rows (V); n = rows (X); num_features = columns (X); sqr_dist = zeros (k, n); for i = 1 : k Vi = V(i, :); covariance_matrix = compute_covariance_matrix (X, V, Mu_m, i); for j = 1 : n Vi_to_Xj = X(j, :) - Vi; A = cluster_volume(i) * ... det (covariance_matrix) ^ (1.0 / num_features) * ... inv (covariance_matrix); sqr_dist(i, j) = sum (Vi_to_Xj .* (A * Vi_to_Xj')'); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: compute_covariance_matrix ##---------------------------------------------------------------------- function covariance_matrix = compute_covariance_matrix (X, V, Mu_m, i) num_features = columns (V); n = rows (X); num = zeros (num_features); denom = 0.0; Vi = V(i, :); for j = 1 : n Vi_to_Xj = X(j, :) - Vi; num += Mu_m(i, j) * Vi_to_Xj' * Vi_to_Xj; denom += Mu_m(i, j); endfor covariance_matrix = num / denom; endfunction ##---------------------------------------------------------------------- ## Gustafson-Kessel Demo #1 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies a small set of unlabeled data points using %! ## the Gustafson-Kessel algorithm into two fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data is taken from Chapter 13, Example 17 in %! ## Fuzzy Logic: Intelligence, Control and Information, by %! ## J. Yen and R. Langari, Prentice Hall, 1999, page 381 %! ## (International Edition). %! %! ## Use gustafson_kessel to classify the input_data. %! input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4]; %! number_of_clusters = 2; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! gustafson_kessel (input_data, number_of_clusters) %! %! ## Plot the data points as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 1'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ##---------------------------------------------------------------------- ## Gustafson-Kessel Demo #2 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies three-dimensional unlabeled data points using %! ## the Gustafson-Kessel algorithm into three fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data was selected to form three areas of %! ## different shapes. %! %! ## Use gustafson_kessel to classify the input_data. %! input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7; %! 3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11; %! 3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9; %! 6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12; %! 11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15; %! 14 6 14; 14 8 13]; %! number_of_clusters = 3; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! gustafson_kessel (input_data, number_of_clusters, [1 1 1], ... %! [NaN NaN NaN 0]) %! %! ## Plot the data points in two dimensions (using features 1 & 2) %! ## as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 2) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! %! ## Plot the data points in two dimensions %! ## (using features 1 & 3) as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 3) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 3), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 3'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ## Test input validation %!error %! gustafson_kessel() %!error %! gustafson_kessel(1) %!error %! gustafson_kessel(1, 2, 3, 4, 5) %!error %! gustafson_kessel('input', 2) %!error %! gustafson_kessel(1, 0) %!error %! gustafson_kessel(1, 2, 3j) %!error %! gustafson_kessel(1, 2, 3, 4j) fuzzy-logic-toolkit-0.6.1/inst/hamacher_product.m000066400000000000000000000102001466512601400221240ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} hamacher_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} hamacher_product (@var{x}, @var{y}) ## ## Return the Hamacher product of the input. ## The Hamacher product of two real scalars x and y is: ## (x * y) / (x + y - x * y) ## ## For one vector argument, apply the Hamacher product to all of the elements ## of the vector. (The Hamacher product is associative.) For one ## two-dimensional matrix argument, return a vector of the Hamacher product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise Hamacher product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy hamacher_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: hamacher_product.m ## Last-Modified: 26 Jul 2024 function retval = hamacher_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function hamacher_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function hamacher_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function hamacher_product\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x * y) / (x + y - x * y); endfunction function retval = vector_arg (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); if (x == 0 && y == 0) x = 0; else x = (x * y) / (x + y - x * y); endif endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = hamacher_product(x); %! assert(z, -2.1429, 1e-4); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = hamacher_product(x, y); %! assert(z, [-0.5556 2.0000 -6.0000 -2.0000], 1e-4); ## Test input validation %!error %! hamacher_product() %!error %! hamacher_product(2j) %!error %! hamacher_product(1, 2j) %!error %! hamacher_product([1 2j]) %!error %! hamacher_product(1, 2, 3) %!error %! hamacher_product([1 2], [1 2 3]) %!error %! hamacher_product([1 2], [1 2; 3 4]) %!error %! hamacher_product(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/hamacher_sum.m000066400000000000000000000100301466512601400212510ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} hamacher_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} hamacher_sum (@var{x}, @var{y}) ## ## Return the Hamacher sum of the input. ## The Hamacher sum of two real scalars x and y is: ## (x + y - 2 * x * y) / (1 - x * y) ## ## For one vector argument, apply the Hamacher sum to all of the elements ## of the vector. (The Hamacher sum is associative.) For one ## two-dimensional matrix argument, return a vector of the Hamacher sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pairwise Hamacher sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy hamacher_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: hamacher_sum.m ## Last-Modified: 26 Jul 2024 function retval = hamacher_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function hamacher_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function hamacher_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function hamacher_sum\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x + y - 2 * x * y) / (1 - x * y); endfunction function retval = vector_arg (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); if (x == 1 && y == 1) x = 1; else x = (x + y - 2 * x * y) / (1 - x * y); endif endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = hamacher_sum(x); %! assert(z, 1.5714, 1e-4); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = hamacher_sum(x, y); %! assert(z, [2.3333 1.0000 1.4000 1.5882], 1e-4); ## Test input validation %!error %! hamacher_sum() %!error %! hamacher_sum(2j) %!error %! hamacher_sum(1, 2j) %!error %! hamacher_sum([1 2j]) %!error %! hamacher_sum(1, 2, 3) %!error %! hamacher_sum([1 2], [1 2 3]) %!error %! hamacher_sum([1 2], [1 2; 3 4]) %!error %! hamacher_sum(0:100, []) fuzzy-logic-toolkit-0.6.1/inst/heart_disease_demo_1.m000066400000000000000000000121171466512601400226510ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} heart_disease_demo_1 ## ## Demonstrate the use of newfis, addvar, addmf, and addrule ## to build and evaluate an FIS. Also demonstrate the use of the algebraic ## product and sum as the T-norm/S-norm pair, and demonstrate the use of ## hedges in the FIS rules. ## ## The demo: ## @itemize @bullet ## @item ## builds an FIS ## @item ## plots the input membership functions ## @item ## plots the constant output functions ## @item ## displays the FIS rules in verbose format in the Octave window ## @item ## plots the FIS output as a function of the inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: heart_disease_demo_1.m ## Last-Modified: 4 Jun 2024 ## Create new FIS. a = newfis ('Heart-Disease-Risk', 'sugeno', ... 'algebraic_product', 'algebraic_sum', ... 'min', 'max', 'wtaver'); ## Add two inputs and their membership functions. a = addvar (a, 'input', 'LDL-Level', [0 300]); a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 130]); a = addmf (a, 'input', 1, 'Moderate', 'trapmf', [90 130 160 200]); a = addmf (a, 'input', 1, 'High', 'trapmf', [160 200 300 301]); a = addvar (a, 'input', 'HDL-Level', [0 100]); a = addmf (a, 'input', 2, 'Low', 'trapmf', [-1 0 35 45]); a = addmf (a, 'input', 2, 'Moderate', 'trapmf', [35 45 55 65]); a = addmf (a, 'input', 2, 'High', 'trapmf', [55 65 100 101]); ## Add one output and its membership functions. a = addvar (a, 'output', 'Heart-Disease-Risk', [-2 12]); a = addmf (a, 'output', 1, 'Negligible', 'constant', 0); a = addmf (a, 'output', 1, 'Low', 'constant', 2.5); a = addmf (a, 'output', 1, 'Medium', 'constant', 5); a = addmf (a, 'output', 1, 'High', 'constant', 7.5); a = addmf (a, 'output', 1, 'Extreme', 'constant', 10); ## Plot the input and output membership functions. plotmf (a, 'input', 1); plotmf (a, 'input', 2); plotmf (a, 'output', 1); ## Add 15 rules and display them in verbose format. a = addrule (a, [1 1 3 1 1; 1 2 2 1 1; 1 3 1 1 1; ... 2 1 4 1 1; 2 2 3 1 1; 2 3 2 1 1; ... 3 1 5 1 1; 3 2 4 1 1; 3 3 3 1 1; ... 1.3 3.3 2 1 2; ... 3.05 1.05 4 1 2; ... -3.2 -1.2 3 1 1]); puts ("\nOutput of showrule(a):\n\n"); showrule (a); ## Plot the output as a function of the two inputs. gensurf (a); %!test %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'algebraic_product', 'algebraic_sum', ... %! 'min', 'max', 'wtaver'); %! %! ## Add two inputs and their membership functions. %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 130]); %! a = addmf (a, 'input', 1, 'Moderate', 'trapmf', [90 130 160 200]); %! a = addmf (a, 'input', 1, 'High', 'trapmf', [160 200 300 301]); %! %! a = addvar (a, 'input', 'HDL-Level', [0 100]); %! a = addmf (a, 'input', 2, 'Low', 'trapmf', [-1 0 35 45]); %! a = addmf (a, 'input', 2, 'Moderate', 'trapmf', [35 45 55 65]); %! a = addmf (a, 'input', 2, 'High', 'trapmf', [55 65 100 101]); %! %! ## Add one output and its membership functions. %! a = addvar (a, 'output', 'Heart-Disease-Risk', [-2 12]); %! a = addmf (a, 'output', 1, 'Negligible', 'constant', 0); %! a = addmf (a, 'output', 1, 'Low', 'constant', 2.5); %! a = addmf (a, 'output', 1, 'Medium', 'constant', 5); %! a = addmf (a, 'output', 1, 'High', 'constant', 7.5); %! a = addmf (a, 'output', 1, 'Extreme', 'constant', 10); %! %! ## Add 15 rules and display them in verbose format. %! a = addrule (a, [1 1 3 1 1; 1 2 2 1 1; 1 3 1 1 1; ... %! 2 1 4 1 1; 2 2 3 1 1; 2 3 2 1 1; ... %! 3 1 5 1 1; 3 2 4 1 1; 3 3 3 1 1; ... %! 1.3 3.3 2 1 2; ... %! 3.05 1.05 4 1 2; ... %! -3.2 -1.2 3 1 1]); %! %! ldl_hdl = [129 59; 130 60; 90 65; 205 40]; %! heart_disease_risk = evalfis (ldl_hdl, a, 1001); %! assert(heart_disease_risk, [4.2679; 4.1667; 2.5000; 8.3333], 1e-4); fuzzy-logic-toolkit-0.6.1/inst/heart_disease_demo_2.m000066400000000000000000000052741466512601400226600ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} heart_disease_demo_2 ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a ## Sugeno-type FIS stored in a file. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (constant) output functions ## @item ## plots the FIS output as a function of the inputs ## @item ## evaluates the Sugeno-type FIS for four inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: heart_disease_demo_2.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. ## (Alternatively, to select heart_disease_risk.fis using the dialog, ## replace the following line with ## fis = readfis (); fis = readfis('heart_disease_risk.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); ## Plot the Heart Disease Risk as a function of LDL-Level and HDL-Level. gensurf (fis); ## Calculate the Heart Disease Risk for 4 sets of LDL-HDL values: puts ("\nFor the following four sets of LDL-HDL values:\n\n"); ldl_hdl = [129 59; 130 60; 90 65; 205 40] puts ("\nThe Heart Disease Risk is:\n\n"); heart_disease_risk = evalfis (ldl_hdl, fis, 1001) %!test %! fis = readfis ('heart_disease_risk.fis'); %! ldl_hdl = [129 59; 130 60; 90 65; 205 40]; %! heart_disease_risk = evalfis (ldl_hdl, fis, 1001); %! assert(heart_disease_risk, [3.6250; 3.7500; 0; 8.7500], 1e-4); fuzzy-logic-toolkit-0.6.1/inst/heart_disease_risk.fis000066400000000000000000000045061466512601400230050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: heart_disease_risk.fis ## Last-Modified: 28 Aug 2012 ## Heart Disease Risk FIS [System] Name = 'Heart-Disease-Risk' Type = 'sugeno' Version = 2.0 NumInputs = 2 NumOutputs = 1 NumRules = 15 AndMethod = 'min' OrMethod = 'max' ImpMethod = 'min' AggMethod = 'max' DefuzzMethod = 'wtaver' [Input1] Name = 'LDL-Level' Range = [0 300] NumMFs = 5 MF1 = 'Low' : 'trapmf', [-1 0 90 110] MF2 = 'Low-Borderline' : 'trapmf', [90 110 120 140] MF3 = 'Borderline' : 'trapmf', [120 140 150 170] MF4 = 'High-Borderline' : 'trapmf', [150 170 180 200] MF5 = 'High' : 'trapmf', [180 200 300 301] [Input2] Name = 'HDL-Level' Range = [0 100] NumMFs = 3 MF1 = 'Low-HDL' : 'trapmf', [-1 0 35 45] MF2 = 'Moderate-HDL' : 'trapmf', [35 45 55 65] MF3 = 'High-HDL' : 'trapmf', [55 65 100 101] [Output1] Name = 'Heart-Disease-Risk' Range = [0 10] NumMFs = 5 MF1 = 'No-Risk' : 'constant', [0] MF2 = 'Low-Risk' : 'constant', [2.5] MF3 = 'Medium-Risk' : 'constant', [5] MF4 = 'High-Risk' : 'constant', [7.5] MF5 = 'Extreme-Risk' : 'constant', [10] [Rules] 1 1, 3 (1) : 1 1 2, 2 (1) : 1 1 3, 1 (1) : 1 2 1, 3 (1) : 1 2 2, 2 (1) : 1 2 3, 2 (1) : 1 3 1, 4 (1) : 1 3 2, 3 (1) : 1 3 3, 2 (1) : 1 4 1, 4 (1) : 1 4 2, 4 (1) : 1 4 3, 3 (1) : 1 5 1, 5 (1) : 1 5 2, 4 (1) : 1 5 3, 3 (1) : 1 fuzzy-logic-toolkit-0.6.1/inst/investment_portfolio.fis000066400000000000000000000032571466512601400234500ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: investment_portfolio.fis ## Last-Modified: 28 Aug 2012 [System] Name='Investment-Portfolio' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=1 NumRules=4 AndMethod='einstein_product' OrMethod='einstein_sum' ImpMethod='einstein_product' AggMethod='einstein_sum' DefuzzMethod='centroid' [Input1] Name='Age' Range=[20 100] NumMFs=2 MF1='Young':'zmf',[30 90] MF2='Old':'smf',[30 90] [Input2] Name='Risk-Tolerance' Range=[0 10] NumMFs=2 MF1='Low':'zmf',[2 8] MF2='High':'smf',[2 8] [Output1] Name='Percentage-In-Stocks' Range=[0 100] NumMFs=3 MF1='About-Fifteen':'gaussmf',[10 15] MF2='About-Fifty':'gaussmf',[10 50] MF3='About-Eighty-Five':'gaussmf',[10 85] [Rules] 1 2, 3 (1) : 2 2 1, 1 (1) : 2 -2.3 -1.3, 2 (0.5) : 1 -1.3 -2.3, 2 (0.5) : 1 fuzzy-logic-toolkit-0.6.1/inst/investment_portfolio_demo.m000066400000000000000000000075401466512601400241260ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} investment_portfolio_demo ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate ## a Mamdani-type FIS stored in a file. Also demonstrate the use of hedges and ## weights in the FIS rules, the use of the Einstein product and sum as the ## T-norm/S-norm pair, and the non-standard use of the Einstein sum as the ## aggregation method. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input and output membership functions ## @item ## plots the FIS output as a function of the inputs ## @item ## plots the output of the 4 individual rules for (Age, Risk-Tolerance) = (40, 7) ## @item ## plots the aggregated fuzzy output and the crisp output for ## (Age, Risk-Tolerance) = (40, 7) ## @item ## shows the rules in verbose format in the Octave window ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: investment_portfolio_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('investment_portfolio.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); ## Plot the Percentage-In-Stocks a function of Age and Risk-Tolerance. gensurf (fis, [1 2], 1); ## Calculate the Percentage-In-Stocks using ## (Age, Risk-Tolerance) = (40, 7). [output, rule_input, rule_output, fuzzy_output] = ... evalfis ([40 7], fis, 1001); ## Plot the output (Percentage-In-Stocks) of the individual fuzzy rules ## on one set of axes. x_axis = linspace (fis.output(1).range(1), ... fis.output(1).range(2), 1001); colors = ['r' 'b' 'm' 'g']; figure ('NumberTitle', 'off', 'Name', ... 'Output of Fuzzy Rules 1-4 for (Age, Risk Tolerance) = (40, 7)'); for i = 1 : 4 y_label = [colors(i) ";Rule " num2str(i) ";"]; plot (x_axis, rule_output(:,i), y_label, 'LineWidth', 2); hold on; endfor ylim ([-0.1, 1.1]); xlabel ('Percentage in Stocks', 'FontWeight', 'bold'); grid; hold; ## Plot the first aggregated fuzzy output and the crisp output ## (Percentage-In-Stocks) on one set of axes. figure('NumberTitle', 'off', 'Name', ... 'Aggregation and Defuzzification for (Age, Risk Tolerace) = (40, 7)'); plot (x_axis, fuzzy_output(:, 1), "b;Aggregated Fuzzy Output;", ... 'LineWidth', 2); hold on; crisp_output = evalmf(x_axis, output(1), 'constant'); y_label = ["r;Crisp Output = " num2str(output(1)) "%;"]; plot (x_axis, crisp_output, y_label, 'LineWidth', 2); ylim ([-0.1, 1.1]); xlabel ('Percentage in Stocks', 'FontWeight', 'bold'); grid; hold; ## Show the rules in English. puts ("\nInvestment Portfolio Calculator Rules:\n\n"); showrule (fis); %!test %! fis = readfis ('investment_portfolio.fis'); %! output = evalfis ([40 7], fis, 1001); %! assert(output, 69.358, 1e-3); fuzzy-logic-toolkit-0.6.1/inst/linear_tip_calculator.fis000066400000000000000000000031731466512601400235130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: linear_tip_calculator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Linear-Tip-Calculator' Type='sugeno' Version=2.0 NumInputs=2 NumOutputs=1 NumRules=4 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='wtaver' [Input1] Name='Food-Quality' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Input2] Name='Service' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Output1] Name='Tip' Range=[10 20] NumMFs=3 MF1='Ten-Percent':'linear',[0 0 10] MF2='Fifteen-Percent':'linear',[0 0 15] MF3='Twenty-Percent':'linear',[0 0 20] [Rules] 1 1, 1 (1) : 1 1 2, 2 (1) : 1 2 1, 2 (1) : 1 2 2, 3 (1) : 1 fuzzy-logic-toolkit-0.6.1/inst/linear_tip_demo.m000066400000000000000000000047701466512601400217650ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} linear_tip_demo ## ## Demonstrate the use of linear output membership functions to simulate ## constant membership functions. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the FIS output as a function of the inputs ## @item ## evaluates the Sugeno-type FIS for six inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: linear_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('linear_tip_calculator.fis'); ## Plot the input membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); ## Plot the Tip as a function of Food-Quality and Service. gensurf (fis); ## Calculate the Tip for 6 sets of input values: puts ("\nFor the following values of (Food Quality, Service):\n\n"); food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4] puts ("\nThe Tip is:\n\n"); tip = evalfis (food_service, fis, 1001) %!test %! fis = readfis ('linear_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 %! 15.000 %! 20.000 %! 15.000 %! 15.000 %! 16.250]; %! assert(tip, expected_result, 1e-3); fuzzy-logic-toolkit-0.6.1/inst/mamdani_tip_calculator.fis000066400000000000000000000035561466512601400236540ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: mamdani_tip_calculator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Mamdani-Tip-Calculator' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=2 NumRules=4 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='centroid' [Input1] Name='Food-Quality' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Input2] Name='Service' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Output1] Name='Tip' Range=[0 30] NumMFs=3 MF1='About-Ten-Percent':'gaussmf',[2 10] MF2='About-Fifteen-Percent':'gaussmf',[2 15] MF3='About-Twenty-Percent':'gaussmf',[2 20] [Output2] Name='Check-Plus-Tip' Range=[1 1.3] NumMFs=3 MF1='Plus-About-Ten-Percent':'gaussmf',[0.02 1.10] MF2='Plus-About-Fifteen-Percent':'gaussmf',[0.02 1.15] MF3='Plus-About-Twenty-Percent':'gaussmf',[0.02 1.20] [Rules] 1 1, 1 1 (1) : 1 1 2, 2 2 (1) : 1 2 1, 2 2 (1) : 1 2 2, 3 3 (1) : 1 fuzzy-logic-toolkit-0.6.1/inst/mamdani_tip_demo.m000066400000000000000000000100241466512601400221060ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} mamdani_tip_demo ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a ## Mamdani-type FIS stored in a file. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input and output membership functions ## @item ## plots each of the two FIS outputs as a function of the inputs ## @item ## plots the output of the 4 individual rules for (Food-Quality, Service) = (4, 6) ## @item ## plots the aggregated fuzzy output and the crisp output for ## (Food-Quality, Service) = (4, 6) ## @item ## displays the FIS rules in symbolic format in the Octave window ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: mamdani_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('mamdani_tip_calculator.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); plotmf (fis, 'output', 2); ## Plot the Tip and Check + Tip as functions of Food-Quality ## and Service. gensurf (fis, [1 2], 1); gensurf (fis, [1 2], 2); ## Calculate the Tip and Check + Tip using ## (Food-Quality, Service) = (4, 6). [output, rule_input, rule_output, fuzzy_output] = ... evalfis ([4 6], fis, 1001); ## Plot the first output (Tip) of the individual fuzzy rules ## on one set of axes. x_axis = linspace (fis.output(1).range(1), ... fis.output(1).range(2), 1001); colors = ['r' 'b' 'm' 'g']; figure ('NumberTitle', 'off', 'Name', ... 'Output of Fuzzy Rules 1-4 for Input = (4, 6)'); for i = 1 : 4 y_label = [colors(i) ";Rule " num2str(i) ";"]; plot (x_axis, rule_output(:,i), y_label, 'LineWidth', 2); hold on; endfor ylim ([-0.1, 1.1]); xlabel ('Tip', 'FontWeight', 'bold'); grid; hold; ## Plot the first aggregated fuzzy output and the first crisp output ## (Tip) on one set of axes. figure('NumberTitle', 'off', 'Name', ... 'Aggregation and Defuzzification for Input = (4, 6)'); plot (x_axis, fuzzy_output(:, 1), "b;Aggregated Fuzzy Output;", ... 'LineWidth', 2); hold on; crisp_output = evalmf(x_axis, output(1), 'constant'); y_label = ["r;Crisp Output = " num2str(output(1)) "%;"]; plot (x_axis, crisp_output, y_label, 'LineWidth', 2); ylim ([-0.1, 1.1]); xlabel ('Tip', 'FontWeight', 'bold'); grid; hold; ## Show the rules in symbolic format. puts ("\nMamdani Tip Calculator Rules:\n\n"); showrule (fis, 1:columns(fis.rule), 'symbolic'); %!test %! fis = readfis ('mamdani_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.0000 1.1000 %! 15.0000 1.1500 %! 20.0000 1.2000 %! 15.0000 1.1500 %! 15.0000 1.1500 %! 16.4708 1.1647]; %! assert(tip, expected_result, 1e-4); fuzzy-logic-toolkit-0.6.1/inst/newfis.m000066400000000000000000000131631466512601400201220ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{a} =} newfis (@var{fis_name}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}, @var{defuzz_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}, @var{defuzz_method}, @var{fis_version}) ## ## Create and return a new FIS structure using the argument values provided. ## Only the first argument is required. If fewer than eight arguments are given, ## then some or all of the following default values will be used: ## ## @multitable @columnfractions .30 .30 ## @headitem Argument @tab Default Value ## @item @var{fis_type} ## @tab 'mamdani' ## @item @var{and_method} ## @tab 'min' ## @item @var{or_method} ## @tab 'max' ## @item @var{imp_method} ## @tab 'min' ## @item @var{agg_method} ## @tab 'max' ## @item @var{defuzz_method} ## @tab 'centroid' ## @item @var{fis_version} ## @tab 1.0 ## @end multitable ## @sp 1 ## @seealso{addmf, addrule, addvar, setfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: newfis.m ## Last-Modified: 12 Jun 2024 function fis = newfis (fis_name, fis_type = 'mamdani', ... and_method = 'min', or_method = 'max', ... imp_method = 'min', agg_method = 'max', ... defuzz_method = 'centroid', fis_version = 1.0) ## If the caller did not supply the between 1 and 8 argument values, ## or if any of the argument values were not strings, print an error ## message and halt. if (!(nargin >= 1 && nargin <= 8)) error ("newfis requires between 1 and 8 arguments\n"); elseif (!(is_string (fis_name) && is_string (fis_type) && ... is_string (and_method) && is_string (or_method) && ... is_string (imp_method) && is_string (agg_method) && ... is_string (defuzz_method) && isfloat (fis_version))) error ("incorrect argument type in newfis argument list\n"); endif ## Create and return the new FIS structure. fis = struct ('name', fis_name, ... 'type', fis_type, ... 'version', fis_version, ... 'andMethod', and_method, ... 'orMethod', or_method, ... 'impMethod', imp_method, ... 'aggMethod', agg_method, ... 'defuzzMethod', defuzz_method, ... 'input', [], ... 'output', [], ... 'rule', []); endfunction %!shared fis %! fis = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %!assert(fis.name == 'Heart-Disease-Risk'); %!assert(fis.type == 'sugeno'); %!assert(fis.andMethod == 'min'); %!assert(fis.orMethod == 'max'); %!assert(fis.impMethod == 'min'); %!assert(fis.aggMethod == 'max'); %!assert(fis.defuzzMethod == 'wtaver'); ## Test input validation %!error %! newfis() %!error %! newfis(1, 2, 3, 4, 5, 6, 7, 8, 9) %!error %! newfis(1, 'str', 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis(1, 'str', 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 2, 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 3, 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 4, 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 5, 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 6, 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 'str', 7, 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 'str', 'str', 'str') fuzzy-logic-toolkit-0.6.1/inst/partition_coeff.m000066400000000000000000000063641466512601400220070ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vpc} =} partition_coeff (@var{soft_partition}) ## ## Return the partition coefficient for a given soft partition. ## ## The argument to partition_coeff is: ## @itemize @w ## @item ## @var{soft_partition}: the membership degree of each input data point in each cluster ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vpc}: the partition coefficient for the given soft partition ## @end itemize ## ## To run demonstration code that uses this function, type "@t{demo fcm}" ## or "@t{demo gustafson_kessel}" (without the quotation marks) at the ## Octave prompt. ## ## For more information about the @var{soft_partition} matrix, please see the ## documentation for function fcm. ## ## @seealso{fcm, gustafson_kessel, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit partition coefficient cluster ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: partition_coeff.m ## Last-Modified: 13 Jun 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.9 (corrected ## -- the equation in the book omits the exponent 2) in ## Fuzzy Logic: Intelligence, Control and Information, by J. Yen ## and R. Langari, Prentice Hall, 1999, page 384 (International ## Edition). ##---------------------------------------------------------------------- function vpc = partition_coeff (soft_partition) ## If partition_coeff was called with an incorrect number of ## arguments, or the argument does not have the correct type, ## print an error message and halt. if (nargin != 1) error ("partition_coeff requires 1 argument\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("partition_coeff's argument must be a matrix of reals 0.0-1.0\n"); endif ## Compute and return the partition coefficient. soft_part_sqr = soft_partition .* soft_partition; vpc = (sum (sum (soft_part_sqr))) / columns (soft_partition); endfunction ## Test input validation %!error %! partition_coeff() %!error %! partition_coeff(1, 2) %!error %! partition_coeff([-1 2]) fuzzy-logic-toolkit-0.6.1/inst/partition_entropy.m000066400000000000000000000072331466512601400224210ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vpe} =} partition_entropy (@var{soft_partition}, @var{a}) ## ## Return the partition entropy for a given soft partition. ## ## The arguments to partition_entropy are: ## @itemize @w ## @item ## @var{soft_partition}: the membership degree of each input data point in each cluster ## @item ## @var{a}: the log base to use in the calculation; must be a real number a > 1 ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vpe}: the partition entropy for the given soft partition ## @end itemize ## ## To run demonstration code that uses this function, type "@t{demo fcm}" ## or "@t{demo gustafson_kessel}" (without the quotation marks) at the ## Octave prompt. ## ## For more information about the @var{soft_partition} matrix, please see the ## For more information about the @var{soft_partition} matrix, please see the ## documentation for function fcm. ## ## @seealso{fcm, gustafson_kessel, partition_coeff, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit partition entropy cluster ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: partition_entropy.m ## Last-Modified: 13 Jun 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.10 in ## Fuzzy Logic: Intelligence, Control and Information, by J. Yen ## and R. Langari, Prentice Hall, 1999, page 384 (International ## Edition). ##---------------------------------------------------------------------- function vpe = partition_entropy (soft_partition, a) ## If partition_entropy was called with an incorrect number of ## arguments, or the argument does not have the correct type, print an ## error message and halt. if (nargin != 2) error ("partition_entropy requires 2 arguments\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("partition_entropy's 1st arg must be a matrix of reals 0.0-1.0\n"); elseif (!(is_real (a) && a > 1)) error ("partition_entropy's 2nd arg must be a real greater than 1\n"); endif ## Compute and return the partition entropy. n = columns (soft_partition); Mu = soft_partition; log_a_Mu = log (Mu) / log (a); vpe = -(sum (sum (Mu .* log_a_Mu))) / n; endfunction ## Test input validation %!error %! partition_entropy() %!error %! partition_entropy(1) %!error %! partition_entropy(1, 2, 3) %!error %! partition_entropy([1 2], 2) %!error %! partition_entropy([1 1], -2) fuzzy-logic-toolkit-0.6.1/inst/pimf.m000066400000000000000000000144141466512601400175620ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} pimf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} pimf (@var{[x1 x2 ... xn]}, @var{[a b c d]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c d]}), ## return the corresponding @var{y} values for the pi-shaped membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of real ## numbers, and @var{a}, @var{b}, @var{c}, and @var{d} must be real numbers, ## with @var{a} < @var{b} <= @var{c} < @var{d}. This membership function ## satisfies: ## ## @verbatim ## 0 if x <= a ## 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## f(x) = 1 if b <= x <= c ## 1 - 2 * ((x - c)/(d - c))^2 if c < x <= (c + d)/2 ## 2 * ((x - d)/(d - c))^2 if (c + d)/2 < x < d ## 0 if x >= d ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## To run the demonstration code, type "@t{demo pimf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership pi-shaped pi ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: pimf.m ## Last-Modified: 13 Jun 2024 function y = pimf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if ((nargin != 2)) error ("pimf requires 2 arguments\n"); elseif (!is_domain (x)) error ("pimf's first argument must be a valid domain\n"); elseif (!are_mf_params ('pimf', params)) error ("pimf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); c = params(3); d = params(4); a_b_ave = (a + b) / 2; b_minus_a = b - a; c_d_ave = (c + d) / 2; d_minus_c = d - c; y_val = @(x_val) pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, ... c_d_ave, d_minus_c); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y = pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, c_d_ave, ## d_minus_c) ## ## pimf_val returns one value of the S-shaped membership function, which ## satisfies: ## 0 if x <= a ## 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## f(x) = 1 if b <= x <= c ## 1 - 2 * ((x - c)/(d - c))^2 if c < x <= (c + d)/2 ## 2 * ((x - d)/(d - c))^2 if (c + d)/2 < x < d ## 0 if x >= d ## ## pimf_val is a private function, called only by pimf. Because pimf_val ## is not intended for general use -- and because the parameters a, b, ## c, and d are checked for errors in the function pimf (defined above), ## the parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, ... c_d_ave, d_minus_c) ## Calculate and return a single y value of the pi-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 0; elseif (x_val <= a_b_ave) y_val = 2 * ((x_val - a)/b_minus_a)^2; elseif (x_val < b) y_val = 1 - 2 * ((x_val - b) / b_minus_a)^2; elseif (x_val <= c) y_val = 1; elseif (x_val <= c_d_ave) y_val = 1 - 2 * ((x_val - c) / d_minus_c)^2; elseif (x_val < d) y_val = 2 * ((x_val - d) / d_minus_c)^2; else y_val = 0; endif endfunction %!demo %! x = 0:255; %! params = [70 80 100 140]; %! y1 = pimf(x, params); %! params = [50 75 105 175]; %! y2 = pimf(x, params); %! params = [30 70 110 200]; %! y3 = pimf(x, params); %! figure('NumberTitle', 'off', 'Name', 'pimf demo'); %! plot(x, y1, 'r;params = [70 80 100 140];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [50 75 105 175];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [30 70 110 200];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:25:250; %! params = [50 75 105 175]; %! y = [0 0 0 1 1 0.8367 0.2551 0 0 0 0]; %! z = pimf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! pimf() %!error %! pimf(1) %!error %! pimf(1, 2, 3) %!error %! pimf([1 0], 2) %!error %! pimf(1, 2) %!error %! pimf(0:100, []) %!error %! pimf(0:100, [30]) %!error %! pimf(0:100, [2 3]) %!error %! pimf(0:100, [90 80 30]) %!error %! pimf(0:100, 'abc') fuzzy-logic-toolkit-0.6.1/inst/plotmf.m000066400000000000000000000161351466512601400201320ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}) ## @deftypefnx {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{y_lower_limit}) ## @deftypefnx {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{y_lower_limit}, @var{y_upper_limit}) ## ## Plot the membership functions defined for the specified FIS input or output ## variable on a single set of axes. Fuzzy output membership functions are ## represented by the [0, 1]-valued fuzzy functions, and constant output ## membership functions are represented by unit-valued singleton spikes. ## Linear output membership functions, however, are represented by ## two-dimensional lines y = ax + c, regardless of how many dimensions the ## linear function is defined to have. In effect, all of the other dimensions ## of the linear function are set to 0. ## ## If both constant and linear membership functions are used for a single FIS ## output, then two sets of axes are used: one for the constant membership ## functions, and another for the linear membership functions. To plot both ## constant and linear membership functions together, or to plot constant ## membership functions as horizontal lines instead of unit-valued spikes, ## represent the constant membership functions using 'linear' functions, with ## 0 for all except the last parameter, and with the desired constant value as ## the last parameter. ## ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .30 .65 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{in_or_out} ## @tab either 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab an FIS input or output variable index ## @item @var{y_lower_limit} ## @tab a real scalar (default value = -0.1) ## @item @var{y_upper_limit} ## @tab a real scalar (default value = 1.1) ## @end multitable ## @sp 1 ## Six examples that use plotmf are: ## @itemize @bullet ## @item ## cubic_approx_demo.m ## @item ## heart_disease_demo_1.m ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## @seealso{gensurf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership plot ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: plotmf.m ## Last-Modified: 12 Jun 2024 function plotmf (fis, in_or_out, var_index, ... y_lower_limit = -0.1, y_upper_limit = 1.1) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if ((nargin < 3) || (nargin > 5)) error ("plotmf requires 3 - 5 arguments\n"); elseif (!is_fis (fis)) error ("plotmf's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("plotmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("plotmf's third argument must be a variable index\n"); elseif (!(is_real (y_lower_limit) && is_real (y_upper_limit))) error ("plotmf's 4th and 5th arguments must be real scalars\n"); endif ## Select specified variable and construct the window title. if (strcmpi (in_or_out, 'input')) var = fis.input(var_index); window_title = [' Input ' num2str(var_index) ' Term Set']; else var = fis.output(var_index); window_title = [' Output ' num2str(var_index) ' Term Set']; endif ## Plot the membership functions for the specified variable. ## Cycle through the five colors: red, blue, green, magenta, cyan. ## Display the membership function names in a legend. colors = ["r" "b" "g" "m" "c"]; x = linspace (var.range(1), var.range(2), 1001); num_mfs = columns (var.mf); ## Define vectors to keep track of linear and non-linear mfs. linear_mfs = zeros (1, num_mfs); for i = 1 : num_mfs if (strcmp ('linear', var.mf(i).type)) linear_mfs(i) = 1; endif endfor fuzzy_and_constant_mfs = 1 - linear_mfs; ## Plot the fuzzy or constant membership functions together on a set ## of axes. if (sum (fuzzy_and_constant_mfs)) figure ('NumberTitle', 'off', 'Name', window_title); ## Plot the mfs. for i = 1 : num_mfs if (fuzzy_and_constant_mfs(i)) y = evalmf_private (x, var.mf(i).params, var.mf(i).type); y_label = [colors(mod(i-1,5)+1) ";" var.mf(i).name ";"]; plot (x, y, y_label, 'LineWidth', 2); hold on; endif endfor ## Adjust the y-axis, label both axes, and display a dotted grid. ylim ([y_lower_limit y_upper_limit]); xlabel (var.name, 'FontWeight', 'bold'); ylabel ('Degree of Membership', 'FontWeight', 'bold'); grid; hold; endif ## Plot the linear membership functions together on a separate set ## of axes. if (sum (linear_mfs)) figure ('NumberTitle', 'off', 'Name', window_title); ## Plot the mfs. for i = 1 : num_mfs if (linear_mfs(i)) y = evalmf_private (x, var.mf(i).params, var.mf(i).type); y_label = [colors(mod(i-1,5)+1) ";" var.mf(i).name ";"]; plot (x, y, y_label, 'LineWidth', 2); hold on; endif endfor ## Adjust the y-axis, label both axes, and display a dotted grid. ylim ([y_lower_limit y_upper_limit]); xlabel ('X', 'FontWeight', 'bold'); ylabel (var.name, 'FontWeight', 'bold'); grid; hold; endif endfunction %!shared fis %! fis = readfis ('cubic_approximator.fis'); ## Test input validation %!error %! plotmf() %!error %! plotmf(1) %!error %! plotmf(1, 2) %!error %! plotmf(1, 2, 3, 4, 5, 6) %!error %! plotmf(1, 2, 3) %!error %! plotmf(fis, 2, 3) %!error %! plotmf(fis, 'input', 3) %!error %! plotmf(fis, 'input', 1, 2j) %!error %! plotmf(fis, 'input', 1, 0, 2j) fuzzy-logic-toolkit-0.6.1/inst/private/000077500000000000000000000000001466512601400201175ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.1/inst/private/aggregate_output_mamdani.m000066400000000000000000000073541466512601400253420ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fuzzy_output} =} aggregate_output_mamdani (@var{fis}, @var{rule_output}) ## ## Given the: ## @itemize @bullet ## @item @var{fis.aggMethod:} ## the aggregation method for the given @var{fis} ## @item @var{rule_output:} ## a matrix of the fuzzy output for each (rule, FIS output) pair ## @end itemize ## ## Return: ## @itemize @bullet ## @item @var{fuzzy_output:} ## a matrix of the aggregated output for each FIS output variable ## @end itemize ## ## @var{rule_output} is a @var{num_points} x (Q * M) matrix, where ## @var{num_points} is the number of points over which the fuzzy ## values are evaluated, Q is the number of rules and M is the number ## of FIS output variables. Each column of @var{rule_output} gives ## the y-values of the fuzzy output for a single (rule, FIS output) ## pair: ## ## @verbatim ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## The return value @var{fuzzy_output} is a @var{num_points} x M matrix. Each ## column of @var{fuzzy_output} gives the y-values of the fuzzy output for a ## single FIS output variable, aggregated over all rules: ## ## @verbatim ## out_1 out_2 ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## Because aggregate_output_mamdani is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: aggregate_output_mamdani.m ## Last-Modified: 26 Jul 2024 function fuzzy_output = aggregate_output_mamdani (fis, rule_output) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L num_points = rows (rule_output); ## Initialize output matrix to prevent inefficient resizing. fuzzy_output = zeros (num_points, num_outputs); ## Compute the ith fuzzy output values, then store the values in the ## ith column of the fuzzy_output matrix. for i = 1 : num_outputs indiv_fuzzy_out = ... rule_output(:, (i - 1) * num_rules + 1 : i * num_rules); agg_fuzzy_out = (str2func (fis.aggMethod) (indiv_fuzzy_out'))'; fuzzy_output(:, i) = agg_fuzzy_out; endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/aggregate_output_sugeno.m000066400000000000000000000132111466512601400252210ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fuzzy_output} =} aggregate_output_sugeno (@var{fis}, @var{rule_output}) ## ## Given the: ## @itemize @bullet ## @item @var{fis.aggMethod:} ## the aggregation method for the given @var{fis} ## @item @var{rule_output:} ## a matrix of the singleton output of each (rule, FIS output) pair ## @end itemize ## ## Return: ## @itemize @bullet ## @item @var{fuzzy_output:} ## a vector of structures containing the aggregated output for each FIS output ## @end itemize ## ## @var{rule_output} is a 2 x (Q * M) matrix, where Q is the number of rules ## and M is the number of FIS output variables. Each column of @var{rule_output} ## gives the (location, height) pair of the singleton output for one ## (rule, FIS output) pair: ## ## @verbatim ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [[ ] ## height [ ]] ## @end verbatim ## ## The return value @var{fuzzy_output} is a vector of M structures, ## each of which has an index i and a matrix of singletons that form the ## aggregated output for the ith FIS output variable. ## For each FIS output variable, the matrix of singletons is a 2 x L matrix ## where L is the number of distinct singleton locations in the fuzzy output ## for that FIS output variable. The first row gives the (distinct) locations, ## and the second gives the (non-zero) heights: ## ## @verbatim ## singleton_1 singleton_2 ... singleton_L ## location [[ ] ## height [ ]] ## @end verbatim ## ## Because aggregate_output_sugeno is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: aggregate_output_sugeno.m ## Last-Modified: 26 Jul 2024 ##---------------------------------------------------------------------- function fuzzy_output = aggregate_output_sugeno (fis, rule_output) fuzzy_output = []; num_outputs = columns (fis.output); num_rules = columns (fis.rule); ## For each FIS output, aggregate the slice of the rule_output matrix, ## then store the result as a structure in fuzzy_output. for i = 1 : num_outputs unagg_output = rule_output(:, (i-1)*num_rules+1 : i*num_rules); aggregated_output = aggregate_fis_output (fis.aggMethod, ... unagg_output); next_agg_output = struct ('index', i, ... 'aggregated_output', aggregated_output); if (i == 1) fuzzy_output = next_agg_output; else fuzzy_output = [fuzzy_output, next_agg_output]; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: aggregate_fis_output ## Purpose: Aggregate the multiple singletons for one FIS output. ##---------------------------------------------------------------------- function mult_singletons = aggregate_fis_output (fis_aggmethod, ... rule_output) ## Initialize output matrix (multiple_singletons). mult_singletons = sortrows (rule_output', 1); ## If adjacent rows represent singletons at the same location, then ## combine them using the FIS aggregation method. for i = 1 : rows (mult_singletons) - 1 if (mult_singletons(i, 1) == mult_singletons(i+1, 1)) switch (fis_aggmethod) case 'sum' mult_singletons(i + 1, 2) = mult_singletons(i, 2) + ... mult_singletons(i + 1, 2); otherwise mult_singletons(i + 1, 2) = str2func (fis_aggmethod) ... (mult_singletons(i, 2), ... mult_singletons(i + 1, 2)); endswitch mult_singletons(i, 2) = 0; endif endfor ## Return the transpose of the matrix after removing 0-height ## singletons. mult_singletons = (remove_null_rows (mult_singletons))'; endfunction ##---------------------------------------------------------------------- ## Function: remove_null_rows ## Purpose: Return the argument without the rows with a 0 in the ## second column. ##---------------------------------------------------------------------- function y = remove_null_rows (x) y = []; for i = 1 : rows (x) if (x(i, 2) != 0) if (isequal (y, [])) y = x(i, :); else y = [y; x(i, :)]; endif endif endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/are_bounds.m000066400000000000000000000030601466512601400224150ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_bounds (@var{x}) ## @deftypefnx {Function File} {@var{y} =} are_bounds (@var{[x1 x2]}) ## ## Return 1 if @var{x} is a vector of 2 real numbers @var{[x1 x2]}, ## with @var{x1} <= @var{x2}, and return 0 otherwise. ## ## are_bounds is a private function that localizes the test for validity of ## bounds imposed on FIS input/output domains. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_bounds.m ## Last-Modified: 20 Aug 2012 function y = are_bounds (x) y = isvector (x) && isreal (x) && (length (x) == 2) && (x(1) <= x(2)); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/are_input_indices.m000066400000000000000000000032121466512601400237570ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_input_indices (@var{x}, @var{fis}) ## ## Return 1 if @var{x} is a valid input index or a vector of two valid input ## indices for the given FIS structure, and return 0 otherwise. The FIS ## structure @var{fis} is assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_input_indices.m ## Last-Modified: 20 Aug 2012 function y = are_input_indices (x, fis) if (!(isreal (x) && isvector (x) && (length (x) <= 2))) y = 0; else y = 1; num_inputs = columns (fis.input); for next_x = x if (!(is_pos_int (next_x) && next_x <= num_inputs)) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/are_mf_params.m000066400000000000000000000146411466512601400230770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_mf_params (@var{type}, @var{params}) ## ## Return 0 if @var{type} is a built-in membership function and @var{params} ## are not valid parameters for that type, and return 1 otherwise. ## ## are_mf_params is a private function that localizes the test for validity of ## membership function parameters. Note that for a custom membership function, ## this function always returns 1. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_mf_params.m ## Last-Modified: 20 Aug 2012 function y = are_mf_params (type, params) switch (type) case 'constant' y = real_vector (params); case 'dsigmf' y = four_reals (params); case 'gauss2mf' y = four_reals (params); case 'gaussmf' y = two_reals (params); case 'gbellmf' y = gbellmf_params (params); case 'linear' y = real_vector (params); case 'pimf' y = pimf_params (params); case 'psigmf' y = four_reals (params); case 'sigmf' y = two_reals (params); case 'smf' y = smf_params (params); case 'trapmf' y = trapmf_params (params); case 'trimf' y = trimf_params (params); case 'zmf' y = zmf_params (params); otherwise y = 1; endswitch endfunction ##---------------------------------------------------------------------- ## Usage: y = real_vector (params) ## ## Return 1 if params is a vector of real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = real_vector (params) y = isvector (params) && isreal (params); endfunction ##---------------------------------------------------------------------- ## Usage: y = two_reals (params) ## ## Return 1 if params is a vector of 2 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = two_reals (params) y = isvector (params) && isreal (params) && (length (params) == 2); endfunction ##---------------------------------------------------------------------- ## Usage: y = three_reals (params) ## ## Return 1 if params is a vector of 3 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = three_reals (params) y = isvector (params) && isreal (params) && (length (params) == 3); endfunction ##---------------------------------------------------------------------- ## Usage: y = four_reals (params) ## ## Return 1 if params is a vector of 4 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = four_reals (params) y = isvector (params) && isreal (params) && (length (params) == 4); endfunction ##---------------------------------------------------------------------- ## Usage: y = gbellmf_params (params) ## y = gbellmf_params ([a b c]) ## ## Return 1 if params is a vector of 3 real numbers, [a b c], with ## a != 0 and integral-valued b, and return 0 otherwise. ##---------------------------------------------------------------------- function y = gbellmf_params (params) y = three_reals (params) && (params(1) != 0) && is_int (params(2)); endfunction ##---------------------------------------------------------------------- ## Usage: y = pimf_params (params) ## y = pimf_params ([a b c d]) ## ## Return 1 if params is a vector of 4 real numbers, [a b c d], with ## a < b <= c < d, and return 0 otherwise. ##---------------------------------------------------------------------- function y = pimf_params (params) y = four_reals (params) && ... (params(1) < params(2)) && ... (params(2) <= params(3)) && ... (params(3) < params(4)); endfunction ##---------------------------------------------------------------------- ## Usage: y = smf_params (params) ## y = smf_params ([a b]) ## ## Return 1 if params is a vector of 2 real numbers, [a b], with a < b, ## and return 0 otherwise. ##---------------------------------------------------------------------- function y = smf_params (params) y = two_reals (params) && (params(1) < params(2)); endfunction ##---------------------------------------------------------------------- ## Usage: y = trapmf_params (params) ## y = trapmf_params ([a b c d]) ## ## Return 1 if params is a vector of 4 real numbers, [a b c d], with ## a < b <= c < d, and return 0 otherwise. ##---------------------------------------------------------------------- function y = trapmf_params (params) y = four_reals (params) && ... (params(1) < params(2)) && ... (params(2) <= params(3)) && ... (params(3) < params(4)); endfunction ##---------------------------------------------------------------------- ## Usage: y = trimf_params (params) ## y = trimf_params ([a b c]) ## ## Return 1 if params is a vector of 3 real numbers, [a b c], with ## a < b < c, and return 0 otherwise. ##---------------------------------------------------------------------- function y = trimf_params (params) y = three_reals (params) && ... (params(1) < params(2)) && ... (params(2) < params(3)); endfunction ##---------------------------------------------------------------------- ## Usage: y = zmf_params (params) ## y = zmf_params ([a b]) ## ## Return 1 if params is a vector of 2 real numbers, [a b], with a < b, ## and return 0 otherwise. ##---------------------------------------------------------------------- function y = zmf_params (params) y = two_reals (params) && (params(1) < params(2)); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/compute_cluster_convergence.m000066400000000000000000000031741466512601400260750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{convergence_criterion} =} compute_cluster_convergence (@var{V}, @var{V_previous}) ## ## Compute the sum of the changes in position (using the Euclidean ## distance) of the cluster prototypes. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, update_cluster_prototypes, compute_cluster_obj_fcn} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: compute_cluster_convergence.m ## Last-Modified: 2 Sep 2012 function convergence_criterion = ... compute_cluster_convergence (V, V_previous) V_delta = V - V_previous; convergence_criterion = sum (sqrt (sum (V_delta .* V_delta)')); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/compute_cluster_obj_fcn.m000066400000000000000000000035661466512601400252040ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{obj_fcn} =} compute_cluster_obj_fcn (@var{Mu_m}, @var{sqr_dist}) ## ## Compute the objective function for the current iteration. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, update_cluster_prototypes, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: compute_cluster_obj_fcn.m ## Last-Modified: 2 Sep 2012 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.3 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 379 ## (International Edition). ##---------------------------------------------------------------------- function obj_fcn = compute_cluster_obj_fcn (Mu_m, sqr_dist) obj_fcn = sum (sum (Mu_m .* sqr_dist)); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/defuzzify_output_mamdani.m000066400000000000000000000056161466512601400254320ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} defuzzify_output_mamdani (@var{fis}, @var{fuzzy_output}) ## ## Given the: ## @itemize @bullet ## @item @var{fis.defuzzMethod:} ## the defuzzification method for the given @var{fis} ## @item @var{fuzzy_output:} ## a matrix of the aggregated output for each FIS output variable ## @end itemize ## ## Return: ## @itemize @bullet ## @item @var{output:} ## a vector of crisp output values ## @end itemize ## ## @var{fuzzy_output} is a @var{num_points} x M matrix, where @var{num_points} ## is the number of points over which fuzzy values are evaluated and M is the ## number of FIS output variables. Each ## column of @var{fuzzy_output} gives the y-values of the fuzzy output for a ## single FIS output variable, aggregated over all rules: ## ## @verbatim ## out_1 out_2 ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## The crisp @var{output} values are computed from the corresponding fuzzy ## values using the FIS defuzzification method. The @var{output} ## vector has the form: ## ## @verbatim ## output: [output_1 output_2 ... output_M] ## @end verbatim ## ## Because defuzzify_output_mamdani is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: defuzzify_output_mamdani.m ## Last-Modified: 26 Jul 2024 function output = defuzzify_output_mamdani (fis, fuzzy_output) num_outputs = columns (fis.output); ## num_outputs == L (above) num_points = rows (fuzzy_output); output = zeros (1, num_outputs); for i = 1 : num_outputs range = fis.output(i).range; x = linspace (range(1), range(2), num_points); y = (fuzzy_output(:, i))'; output(i) = defuzz (x, y, fis.defuzzMethod); endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/defuzzify_output_sugeno.m000066400000000000000000000057611466512601400253250ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} defuzzify_output_sugeno (@var{fis}, @var{aggregated_output}) ## ## Given the: ## @itemize @bullet ## @item @var{fis.defuzzMethod:} ## the defuzzification method for the given @var{fis} ## @item @var{aggregated_output:} ## a vector of structures containing the aggregated output for each FIS output variable ## @end itemize ## ## Return: ## @itemize @bullet ## @item @var{output:} ## a vector of crisp output values ## @end itemize ## ## The @var{aggregated_output} is a vector of M structures, where M is the ## number of FIS output variables. Each structure contains an index i and a ## matrix of singletons that form the aggregated output for the ith FIS output. ## For each FIS output variable, the matrix of singletons is a 2 x L matrix ## where L is the number of distinct singleton locations in the fuzzy output ## for that FIS output variable. The first row gives the (distinct) locations, ## and the second gives the (non-zero) heights: ## ## @verbatim ## singleton_1 singleton_2 ... singleton_L ## location [[ ] ## height [ ]] ## @end verbatim ## ## The crisp @var{output} values are computed from the corresponding fuzzy ## values using the FIS defuzzification method. The @var{output} ## vector has the form: ## ## @verbatim ## output: [output_1 output_2 ... output_M] ## @end verbatim ## ## Because defuzzify_output_sugeno is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: defuzzify_output_sugeno.m ## Last-Modified: 26 Jul 2024 function output = defuzzify_output_sugeno (fis, aggregated_output) num_outputs = columns (fis.output); output = zeros (1, num_outputs); for i = 1 : num_outputs next_agg_output = aggregated_output(i).aggregated_output; x = next_agg_output(1, :); y = next_agg_output(2, :); output(i) = defuzz (x, y, fis.defuzzMethod); endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/eval_firing_strength.m000066400000000000000000000120331466512601400244770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{firing_strength} =} eval_firing_strength (@var{fis}, @var{rule_input}) ## ## Return the firing strength for each FIS rule given a matrix of matching ## degrees for each (rule, rule_input) pair. ## ## The second argument (@var{rule_input}) gives the fuzzified input values to ## the FIS rules as a Q x N matrix: ## ## @verbatim ## in_1 in_2 ... in_N ## rule_1 [[mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN]] ## @end verbatim ## ## where Q is the number of rules and N is the number of FIS input variables. ## ## For i = 1 .. Q, the fuzzy antecedent, connection, and weight for rule i ## are given by: ## @itemize @bullet ## @item ## @var{fis.rule(i).antecedent} ## @item ## @var{fis.rule(i).connection} ## @item ## @var{fis.rule(i).weight} ## @end itemize ## ## The output is a row vector of length Q. ## ## Because eval_firing_strength is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_firing_strength.m ## Last-Modified: 13 Jun 2024 function firing_strength = eval_firing_strength (fis, rule_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_inputs = columns (fis.input); ## num_inputs == N ## Initialize output matrix to prevent inefficient resizing. firing_strength = zeros (1, num_rules); ## For each rule ## 1. Apply connection to find matching degree of the antecedent. ## 2. Multiply by weight of the rule to find degree of the rule. for i = 1 : num_rules rule = fis.rule(i); ## Collect mu values for all input variables in the antecedent. antecedent_mus = []; for j = 1 : num_inputs if (rule.antecedent(j) != 0) mu = rule_input(i, j); antecedent_mus = [antecedent_mus mu]; endif endfor ## Compute matching degree of the rule. if (rule.connection == 1) connect = fis.andMethod; else connect = fis.orMethod; endif switch (connect) case 'min' firing_strength(i) = rule.weight * ... min (antecedent_mus); case 'max' firing_strength(i) = rule.weight * ... max (antecedent_mus); case 'prod' firing_strength(i) = rule.weight * ... prod (antecedent_mus); case 'sum' firing_strength(i) = rule.weight * ... sum (antecedent_mus); case 'algebraic_product' firing_strength(i) = rule.weight * ... prod (antecedent_mus); case 'algebraic_sum' firing_strength(i) = rule.weight * ... algebraic_sum (antecedent_mus); case 'bounded_difference' firing_strength(i) = rule.weight * ... bounded_difference (antecedent_mus); case 'bounded_sum' firing_strength(i) = rule.weight * ... bounded_sum (antecedent_mus); case 'einstein_product' firing_strength(i) = rule.weight * ... einstein_product (antecedent_mus); case 'einstein_sum' firing_strength(i) = rule.weight * ... einstein_sum (antecedent_mus); case 'hamacher_product' firing_strength(i) = rule.weight * ... hamacher_product (antecedent_mus); case 'hamacher_sum' firing_strength(i) = rule.weight * ... hamacher_sum (antecedent_mus); case 'drastic_product' firing_strength(i) = rule.weight * ... drastic_product (antecedent_mus); case 'drastic_sum' firing_strength(i) = rule.weight * ... drastic_sum (antecedent_mus); otherwise firing_strength(i) = rule.weight * ... str2func (connect) (antecedent_mus); endswitch endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/eval_rules_mamdani.m000066400000000000000000000112501466512601400241230ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_output} =} eval_rules_mamdani (@var{fis}, @var{firing_strength}, @var{num_points}) ## ## Return the fuzzy output for each (rule, FIS output) pair ## for a Mamdani-type FIS (an FIS that does not have constant or linear ## output membership functions). ## ## The firing strength of each rule is given by a row vector of length Q, where ## Q is the number of rules in the FIS: ## ## @verbatim ## rule_1 rule_2 ... rule_Q ## [firing_strength(1) firing_strength(2) ... firing_strength(Q)] ## @end verbatim ## ## The implication method and fuzzy consequent for each rule are given by: ## ## @verbatim ## fis.impMethod ## fis.rule(i).consequent for i = 1..Q ## @end verbatim ## ## The return value, @var{rule_output}, is a @var{num_points} x (Q * M) ## matrix, where Q is the number of rules and M is the number of FIS output ## variables. Each column of this matrix gives the y-values of the fuzzy ## output for a single (rule, FIS output) pair. ## ## @verbatim ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [[ ] ## 2 [ ] ## ... [ ] ## num_points [ ]] ## @end verbatim ## ## Because eval_rules_mamdani is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_rules_mamdani.m ## Last-Modified: 13 Jun 2024 function rule_output = eval_rules_mamdani (fis, firing_strength, ... num_points) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L ## Initialize output matrix to prevent inefficient resizing. rule_output = zeros (num_points, num_rules*num_outputs); ## Compute the fuzzy output for each (rule, output) pair: ## 1. Apply the FIS implication method to find the fuzzy outputs ## for the current (rule, output) pair. ## 2. Store the result as a column in the rule_output matrix. for i = 1 : num_rules rule = fis.rule(i); rule_matching_degree = firing_strength(i); if (rule_matching_degree != 0) for j = 1 : num_outputs ## Compute the fuzzy output for this (rule, output) pair. [mf_index hedge not_flag] = ... get_mf_index_and_hedge (rule.consequent(j)); if (mf_index != 0) ## First, get the fuzzy output, adjusting for the hedge and ## not_flag, but not for the rule matching degree. range = fis.output(j).range; mf = fis.output(j).mf(mf_index); x = linspace (range(1), range(2), num_points); fuzzy_out = evalmf (x, mf.params, mf.type, hedge, not_flag); ## Adjust the fuzzy output for the rule matching degree. switch (fis.impMethod) case 'min' fuzzy_out = min (rule_matching_degree, fuzzy_out); case 'prod' fuzzy_out *= rule_matching_degree; otherwise fuzzy_out = str2func (fis.impMethod) ... (rule_matching_degree, fuzzy_out); endswitch ## Store result in column of rule_output corresponding ## to the (rule, output) pair. rule_output(:, (j - 1) * num_rules + i) = fuzzy_out'; endif endfor endif endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/eval_rules_sugeno.m000066400000000000000000000120061466512601400240150ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_output} =} eval_rules_sugeno (@var{fis}, @var{firing_strength}, @var{user_input}) ## ## Return the fuzzy output for each (rule, FIS output) pair for a ## Sugeno-type FIS (an FIS that has only constant and linear output ## membership functions). ## ## The firing strength of each rule is given by a row vector of length Q, where ## Q is the number of rules in the FIS: ## @example ## @group ## rule_1 rule_2 ... rule_Q ## [firing_strength(1) firing_strength(2) ... firing_strength(Q)] ## @end group ## @end example ## ## The consequent for each rule is given by: ## @example ## fis.rule(i).consequent for i = 1..Q ## @end example ## ## The return value of the function is a 2 x (Q * M) matrix, where ## M is the number of FIS output variables. ## Each column of this matrix gives the (location, height) pair of the ## singleton output for a single (rule, FIS output) pair. ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [[ ] ## height [ ]] ## @end group ## @end example ## ## Note that for Sugeno FISs, the hedge and not flag are handled by ## adjusting the height of the singletons for each (rule, output) pair. ## ## Because eval_rules_sugeno is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_rules_sugeno.m ## Last-Modified: 10 Jun 2024 function rule_output = eval_rules_sugeno (fis, firing_strength, ... user_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L ## Initialize output matrix to prevent inefficient resizing. rule_output = zeros (2, num_rules * num_outputs); ## Compute the (location, height) of the singleton output by each ## (rule, output) pair: ## 1. The height is given by the firing strength of the rule, and ## by the hedge and the not flag for the (rule, output) pair. ## 2. If the consequent membership function is constant, then the ## membership function's parameter gives the location of the ## singleton. If the consequent membership function is linear, ## then the location is the inner product of the the membership ## function's parameters and the vector formed by appending a 1 ## to the user input vector. for i = 1 : num_rules rule = fis.rule(i); rule_firing_strength = firing_strength(i); if (rule_firing_strength != 0) for j = 1 : num_outputs ## Compute the singleton height for this (rule, output) pair. ## Note that for Sugeno FISs, the hedge and not flag are handled ## by adjusting the height of the singletons for each ## (rule, output) pair. [mf_index hedge not_flag] = ... get_mf_index_and_hedge (rule.consequent(j)); height = rule_firing_strength; if (hedge != 0) height = height ^ (1 / hedge); endif if (not_flag) height = 1 - height; endif ## Compute the singleton location for this (rule, output) pair. if (mf_index != 0) mf = fis.output(j).mf(mf_index); switch (mf.type) case 'constant' location = mf.params; case 'linear' location = mf.params * [user_input 1]'; otherwise location = str2func (mf.type) (mf.params, user_input); endswitch ## Store result in column of rule_output corresponding ## to the (rule, output) pair. rule_output(1, (j - 1) * num_rules + i) = location; rule_output(2, (j - 1) * num_rules + i) = height; endif endfor endif endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/evalfis_private.m000066400000000000000000000057741466512601400234750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} evalfis_private (@var{input}, @var{fis}) ## @deftypefnx {Function File} {@var{output} =} evalfis_private (@var{input}, @var{fis}, @var{num_points}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis_private (@var{input}, @var{fis}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis_private (@var{input}, @var{fis}, @var{num_points}) ## ## This function localizes the FIS evaluation common to the public functions ## evalfis and gensurf. All of the arguments to evalfis_private are assumed to ## be valid (limiting the inefficiency of the tests to the calling function). ## ## For more information, see the comments at the top of evalfis.m and gensurf.m. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: evalfis_private.m ## Last-Modified: 20 Aug 2012 function [output, rule_input, rule_output, fuzzy_output] = ... evalfis_private (user_input, fis, num_points = 101) ## Initialize output matrix (to prevent repeated resizing). output = zeros (rows (user_input), columns (fis.output)); ## Process one set of inputs at a time. For each row of crisp input ## values in the input matrix, add a row of crisp output values to the ## output matrix. for i = 1 : rows (user_input) rule_input = fuzzify_input (fis, user_input(i, :)); firing_strength = eval_firing_strength (fis, rule_input); if (strcmp (fis.type, 'mamdani')) rule_output = eval_rules_mamdani (fis, firing_strength, ... num_points); fuzzy_output = aggregate_output_mamdani (fis, rule_output); output(i, :) = defuzzify_output_mamdani (fis, fuzzy_output); else rule_output = eval_rules_sugeno (fis, firing_strength, ... user_input(i, :)); fuzzy_output = aggregate_output_sugeno (fis, rule_output); output(i, :) = defuzzify_output_sugeno (fis, fuzzy_output); endif endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/evalmf_private.m000066400000000000000000000102561466512601400233050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>') ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>', @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>', @var{hedge}, @var{not_flag}) ## ## This function localizes the membership function evaluation without the ## parameter tests. It is called by evalmf and plotmf. For more information, ## see the comment at the top of evalmf.m. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership-function evaluate ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: evalmf_private.m ## Last-Modified: 3 Sep 2012 function y = evalmf_private (x, params, mf_type, hedge = 0, ... not_flag = false) ## Calculate and return the y values of the membership function on ## the domain x. First, get the value of the membership function ## without correcting for the hedge and not_flag. Then, for non-linear ## functions, adjust the function values for non-zero hedge and ## not_flag. switch (mf_type) case 'constant' y = eval_constant (x, params); if (not_flag) y = 1 - y; endif case 'linear' y = eval_linear (x, params); otherwise y = str2func (mf_type) (x, params); if (hedge != 0) y = y .^ hedge; endif if (not_flag) y = 1 - y; endif endswitch endfunction ##---------------------------------------------------------------------- ## Function: eval_constant ## Purpose: Return the y-values corresponding to the x-values in ## the domain for the constant function specified by the ## parameter c. ##---------------------------------------------------------------------- function y = eval_constant (x, c) y = zeros (length (x)); delta = x(2) - x(1); y_val = @(x_val) ((abs (c - x_val) < delta) * 1); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Function: eval_linear ## Purpose: For the parameters [a ... c]), return the y-values ## corresponding to the linear function y = a*x + c, where x ## takes on the the x-values in the domain. The remaining ## coefficients in the parameter list are not used -- this ## creates a two-dimensional intersection of the linear output ## membership function suitable for display together with ## other membership functions, but does not fully represent ## the output membership function. ##---------------------------------------------------------------------- function y = eval_linear (x, params) if (length (params) == 1) a = 0; c = params; else a = params(1); c = params(length (params)); endif y = zeros (length (x)); y_val = @(x_val) (a * x_val + c); y = arrayfun (y_val, x); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/fuzzify_input.m000066400000000000000000000061671466512601400232340ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_input} =} fuzzify_input (@var{fis}, @var{user_input}) ## ## Return the matching degree for each (rule, input value) pair. ## For an FIS that has Q rules and N FIS input variables, the return value ## will be a Q x N matrix. ## ## The crisp input values are given by a row vector: ## ## @verbatim ## user_input: [input_1 input_2 ... input_N] ## @end verbatim ## ## The rule antecedents are stored in the FIS structure as row vectors: ## ## @verbatim ## rule 1 antecedent: [in_11 in_12 ... in_1N] ## rule 2 antecedent: [in_21 in_22 ... in_2N] ## ... ... ## rule Q antecedent: [in_Q1 in_Q2 ... in_QN] ## @end verbatim ## ## Finally, the output of the function gives the matching degree ## for each (rule, input value) pair as an Q x N matrix: ## ## @verbatim ## in_1 in_2 ... in_N ## rule_1 [[mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN]] ## @end verbatim ## ## Because fuzzify_input is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: fuzzify_input.m ## Last-Modified: 31 Aug 2024 function rule_input = fuzzify_input (fis, user_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_inputs = columns (fis.input); ## num_inputs == N rule_input = zeros (num_rules, num_inputs); ## to prevent resizing ## For each rule i and each input j, compute the value of mu ## in the result. for i = 1 : num_rules antecedent = fis.rule(i).antecedent; for j = 1 : num_inputs mu = 0; crisp_x = user_input(j); ## Get the value of mu (with adjustment for the hedge ## and not_flag). [mf_index hedge not_flag] = ... get_mf_index_and_hedge (antecedent(j)); if (mf_index != 0) mf = fis.input(j).mf(mf_index); mu = evalmf (crisp_x, mf.params, mf.type, hedge, not_flag); endif ## Store the fuzzified input in rule_input. rule_input(i, j) = mu; endfor endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/get_mf_index_and_hedge.m000066400000000000000000000050231466512601400247030ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{[mf_index hedge not_flag]} =} get_mf_index_and_hedge (@var{mf_index_and_hedge}) ## ## Return the membership function index, hedge, and "not" flag ## indicated by the argument. ## ## The membership function index, @var{mf_index}, is the positive whole number ## portion of the argument. The @var{hedge} is the fractional part of the ## argument, rounded to 2 digits and multiplied by 10. The @var{not_flag}, ## a Boolean, is true iff the argument is negative. ## ## Because get_mf_index_and_hedge is a private function, it does no error ## checking of its argument. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: get_mf_index_and_hedge.m ## Last-Modified: 10 Jun 2024 function [mf_index hedge not_flag] = ... get_mf_index_and_hedge (mf_index_and_hedge) ## Set flag to handle "not", indicated by a minus sign in the ## antecedent. if (mf_index_and_hedge < 0) not_flag = true; mf_index_and_hedge = -mf_index_and_hedge; else not_flag = false; endif ## The membership function index is the positive whole number portion ## of an element in the antecedent. mf_index = fix (mf_index_and_hedge); ## For custom hedges and the four built-in hedges "somewhat", "very", ## "extremely", and "very very", return the power to which the ## membership value should be raised. The hedges are indicated by the ## fractional part of the corresponding rule_matrix entry (rounded to ## 2 digits). if (mf_index != 0) hedge = round (100 * (mf_index_and_hedge - mf_index)) / 10; else hedge = 0; endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/init_cluster_prototypes.m000066400000000000000000000033751466512601400253210ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{V} =} init_cluster_prototypes (@var{X}, @var{k}) ## ## Initialize k cluster centers to random locations in the ranges ## given by the min/max values of each feature of the dataset. ## ## @seealso{fcm, gustafson_kessel, update_cluster_membership, update_cluster_prototypes, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: init_cluster_prototypes.m ## Last-Modified: 2 Sep 2012 function V = init_cluster_prototypes (X, k) num_features = columns (X); min_feature_value = min (X); max_feature_value = max (X); V = rand (k, num_features); for i = 1 : num_features V(:, i) = (max_feature_value(i) - min_feature_value(i)) * ... V(:, i) + min_feature_value(i); endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_builtin_language.m000066400000000000000000000037771466512601400243170ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_builtin_language (@var{x}) ## ## Return true if @var{x} is one of the strings representing the ## built-in languages, and return false otherwise. The comparison is ## case-insensitive. ## ## is_builtin_language is a private function that localizes the test ## for languages handled by showrule. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_builtin_language.m ## Last-Modified: 31 Aug 2024 function y = is_builtin_language (x) y = ischar (x) && isvector (x) && ... ismember (tolower (x), {'english', ... 'chinese', 'mandarin', 'pinyin', ... 'russian', 'russkij', 'pycckii', ... 'french', 'francais', ... 'spanish', 'espanol', ... 'german', 'deutsch'}); endfunction %!assert(is_builtin_language(6), false) %!assert(is_builtin_language('english'), true) %!assert(is_builtin_language('francais'), true) %!assert(is_builtin_language(''), false) fuzzy-logic-toolkit-0.6.1/inst/private/is_domain.m000066400000000000000000000034471466512601400222470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_domain (@var{x}) ## @deftypefnx {Function File} {@var{y} =} is_domain (@var{[x1 x2 ... xn]}) ## ## Return true if @var{x} is a real number of a vector of strictly increasing real ## numbers, and return false otherwise. ## ## is_domain is a private function that localizes the test for validity of FIS ## input variable domains. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_domain.m ## Last-Modified: 31 Aug 2024 function y = is_domain (x) y = 1; if (!(isvector (x) && isreal (x))) y = 0; elseif (length(x) > 1) for i = 1 : length (x) - 1 if (x(i) >= x(i + 1)) y = 0; endif endfor endif endfunction %!assert(is_domain(6), 1) %!assert(is_domain([1 2]), 1) %!assert(is_domain([2 1]), 0) %!assert(is_domain([]), 0) %!assert(is_domain('hello'), 0) fuzzy-logic-toolkit-0.6.1/inst/private/is_fis.m000066400000000000000000000045171466512601400215600ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_fis (@var{x}) ## ## Return true if the argument @var{x} is a valid FIS (Fuzzy Inference System) ## structure, and return false otherwise. ## ## is_fis is a private function that localizes the test for valid FIS structs. ## For efficiency, is_fis only determines if the argument @var{x} is a structure ## with the expected fields, and that these fields have the expected types. ## ## Examples: ## @verbatim ## fis = newfis('FIS'); ## is_fis(fis) ==> true ## @end verbatim ## ## @verbatim ## x = pi; ## is_fis(x) ==> false ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_fis.m ## Last-Modified: 31 Aug 2024 function y = is_fis (x) y = isstruct (x) && ... isfield (x, 'name') && is_string (x.name) && ... isfield (x, 'type') && is_string (x.type) && ... isfield (x, 'andMethod') && is_string (x.andMethod) && ... isfield (x, 'orMethod') && is_string (x.orMethod) && ... isfield (x, 'impMethod') && is_string (x.impMethod) && ... isfield (x, 'aggMethod') && is_string (x.aggMethod) && ... isfield (x, 'defuzzMethod') && is_string (x.defuzzMethod) && ... isfield (x, 'input') && is_io_vector (x.input) && ... isfield (x, 'output') && is_io_vector (x.output) && ... isfield (x, 'rule') && is_rule_vector (x.rule); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_format.m000066400000000000000000000030231466512601400222560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_format (@var{x}) ## ## Return true if @var{x} is one of the strings 'verbose', 'symbolic', and ## 'indexed', and return false otherwise. The comparison is case-insensitive. ## ## is_format is a private function that localizes the test for valid fis rule ## input/output formats. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_format.m ## Last-Modified: 10 Jun 2024 function y = is_format (x) y = ischar (x) && isvector (x) && ... ismember (tolower (x), {'verbose', 'symbolic', 'indexed'}); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_grid_spec.m000066400000000000000000000027211466512601400227310ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_grid_spec (@var{x}) ## ## Return 1 if @var{x} is an integer or vector of two integers, each >= 2, ## and return 0 otherwise. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_grid_spec.m ## Last-Modified: 20 Aug 2012 function y = is_grid_spec (x, fis) if (!(isvector (x) && (length (x) <= 2))) y = 0; else y = 1; for next_x = x if (!(is_int (next_x) && next_x >= 2)) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_input_matrix.m000066400000000000000000000033561466512601400235220ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_input_matrix (@var{x}, @var{fis}) ## ## Return 1 if @var{x} is a valid matrix of input values for the given FIS ## structure, and return 0 otherwise. The FIS structure @var{fis} is assumed ## to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_input_matrix.m ## Last-Modified: 20 Aug 2012 function y = is_input_matrix (x, fis) if (!(ismatrix (x) && isreal (x) && ... (columns (x) == columns (fis.input)))) y = 0; else y = 1; for j = 1 : columns (x) range = fis.input(j).range; for i = 1 : rows(x) if (!(isscalar (x(i, j)) && ... x(i,j) >= range(1) && ... x(i,j) <= range(2))) y = 0; endif endfor endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_int.m000066400000000000000000000036311466512601400215650ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_int (@var{x}) ## ## Return true if @var{x} is an integer-valued real scalar, and ## return false otherwise. ## ## is_int is a private function that localizes the test for integers. ## In Octave, integer constants such as 1 are not represented by ints ## internally: isinteger(1) returns 0. ## ## Examples: ## @verbatim ## is_int(6) ==> true ## is_int(6.2) ==> false ## is_int(ones(2)) ==> false ## is_int(6 + 0i) ==> true ## is_int(0) ==> true ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_int.m ## Last-Modified: 31 Aug 2024 function y = is_int (x) y = isscalar (x) && isreal (x) && (fix (x) == x); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_int(6), true) %!assert(is_int(6.2), false) %!assert(is_int(ones(2)), false) %!assert(is_int(6 + 0i), true) %!assert(is_int(0), true) fuzzy-logic-toolkit-0.6.1/inst/private/is_io_struct.m000066400000000000000000000034051466512601400230050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_io_struct (@var{x}) ## ## Return true if the argument @var{x} is a valid input or output structure for an ## FIS (Fuzzy Inference System), and return false otherwise. ## ## is_io_struct is a private function that localizes the test for valid input ## and output structs. For efficiency, is_io_struct only determines if the ## argument @var{x} is a structure with the expected fields, and that these ## fields have the expected types. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_io_struct.m ## Last-Modified: 10 Jun 2024 function y = is_io_struct (x) y = isstruct (x) && ... isfield (x, 'name') && is_string (x.name) && ... isfield (x, 'range') && are_bounds (x.range) && ... isfield (x, 'mf') && is_mf_vector (x.mf); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_io_vector.m000066400000000000000000000031301466512601400227560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_io_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS input/output variable structures, ## and return 0 otherwise. ## ## is_io_vector is a private function that localizes the test for valid FIS ## structure members 'input' and 'output'. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_io_vector.m ## Last-Modified: 20 Aug 2012 function y = is_io_vector (x) y = 1; if (isequal(x, [])) y = 1; elseif (!isvector(x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_io_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_mf_index.m000066400000000000000000000040341466512601400225620ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_index (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_index}) ## ## If @var{in_or_out} == 'input', return true if @var{mf_index} is a valid ## membership function index for the input variable with index @var{var_index}, ## and return false otherwise. ## ## If @var{in_or_out} == 'output', return true if @var{mf_index} is a valid ## membership function index for the output variable with index @var{var_index}, ## and return false otherwise. ## ## is_mf_index is a private function that localizes the test for valid FIS ## membership function indices. The arguments @var{fis}, @var{in_or_out}, and ## @var{var_index} are assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_index.m ## Last-Modified: 10 Jun 2024 function y = is_mf_index (fis, in_or_out, var_index, mf_index) y = is_int (mf_index) && (mf_index >= 1); if (strcmp (in_or_out, 'input')) y = y && (mf_index <= length (fis.input(var_index).mf)); else y = y && (mf_index <= length (fis.output(var_index).mf)); endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_mf_struct.m000066400000000000000000000033061466512601400230000ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_struct (@var{x}) ## ## Return true if the argument @var{x} is a valid FIS (Fuzzy Inference System) ## membership function structure, and return false otherwise. ## ## is_mf_struct is a private function that localizes the test for valid FIS ## membership function structs. For efficiency, is_mf_struct only determines if ## the argument @var{x} is a structure with the expected fields, but the types ## of the fields are not verified. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_struct.m ## Last-Modified: 10 Jun 2024 function y = is_mf_struct (x) y = isstruct (x) && ... isfield (x, 'name') && ... isfield (x, 'type') && ... isfield (x, 'params'); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_mf_vector.m000066400000000000000000000030541466512601400227560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS membership function structures, and ## return 0 otherwise. ## ## is_mf_vector is a private function that localizes the test for validity. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_vector.m ## Last-Modified: 20 Aug 2012 function y = is_mf_vector (x) y = 1; if (isequal(x, [])) y = 1; elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_mf_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_output_index.m000066400000000000000000000026421466512601400235230ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_output_index (@var{x}, @var{fis}) ## ## Return true if @var{x} is a valid output index for the given FIS structure, ## and return false otherwise. The FIS structure @var{fis} is assumed to be ## valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_output_index.m ## Last-Modified: 10 Jun 2024 function y = is_output_index (x, fis) y = is_pos_int (x) && (x <= columns (fis.output)); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_pos_int.m000066400000000000000000000030301466512601400224370ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_pos_int (@var{x}) ## ## Return true if @var{x} is a positive integer-valued real scalar, and return ## false otherwise. ## ## Examples: ## @verbatim ## is_pos_int(6) ==> true ## is_pos_int(6.2) ==> false ## is_pos_int(ones(2)) ==> false ## is_pos_int(6 + 0i) ==> true ## is_pos_int(0) ==> false ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_pos_int.m ## Last-Modified: 31 Aug 2024 function y = is_pos_int (x) y = is_int (x) && (x > 0); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_real.m000066400000000000000000000037641466512601400217250ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_real (@var{x}) ## ## Return true if @var{x} is an real scalar, and return false otherwise. ## ## is_real is a private function that localizes the test for real scalars. ## ## Examples: ## @verbatim ## is_real(6) ==> true ## is_real(6.2) ==> true ## is_real(ones(2)) ==> false ## is_real(6 + 0i) ==> true ## is_real(6 + i) ==> false ## is_real([0]) ==> true ## is_real([0 0]) ==> false ## is_real('h') ==> false ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_real.m ## Last-Modified: 31 Aug 2024 function y = is_real (x) y = isnumeric(x) && isscalar (x) && isreal (x); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_real(6), true) %!assert(is_real(6.2), true) %!assert(is_real(ones(2)), false) %!assert(is_real(6 + 0i), true) %!assert(is_real(6 + i), false) %!assert(is_real([0]), true) %!assert(is_real([0 0]), false) %!assert(is_real('h'), false) fuzzy-logic-toolkit-0.6.1/inst/private/is_real_matrix.m000066400000000000000000000040511466512601400232770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_real_matrix (@var{x}) ## ## Return 1 if @var{x} is a non-empty matrix of real or integer-valued scalars, ## and return 0 otherwise. ## ## Examples: ## @verbatim ## is_real_matrix(6) ==> 1 ## is_real_matrix([]) ==> 1 ## is_real_matrix([1 2; 3 4]) ==> 1 ## is_real_matrix([1 2 3]) ==> 1 ## is_real_matrix([i 2 3]) ==> 0 ## is_real_matrix("hello") ==> 0 ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_real_matrix.m ## Last-Modified: 31 Aug 2024 function y = is_real_matrix (x) if (!ismatrix (x)) y = 0; else y = 1; for i = 1 : numel (x) if (!(isnumeric (x(i)) && isscalar (x(i)) && isreal (x(i)))) y = 0; endif endfor endif endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_real_matrix(6), 1) %!assert(is_real_matrix([]), 1) %!assert(is_real_matrix([1 2; 3 4]), 1) %!assert(is_real_matrix([1 2 3]), 1) %!assert(is_real_matrix([i 2 3]), 0) %!assert(is_real_matrix("hello"), 0) fuzzy-logic-toolkit-0.6.1/inst/private/is_ref_input.m000066400000000000000000000034771466512601400227760ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_ref_input (@var{x}, @var{fis}, @var{graphed_inputs}) ## ## Return 1 if @var{x} is a vector of constants for the FIS structure inputs ## that are not included in the list of inputs, and return 0 otherwise. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_ref_input.m ## Last-Modified: 20 Aug 2012 function y = is_ref_input (x, fis, graphed_inputs) y = 1; num_fis_inputs = columns (fis.input); num_graphed_inputs = length (graphed_inputs); if (!(is_row_vector (x) && (length (x) == num_fis_inputs))) y = 0; else for i = 1 : num_fis_inputs range = fis.input(i).range; if (!(isreal (x(i)) && isscalar (x(i)))) y = 0; elseif (!ismember (i, graphed_inputs) && ... (x(i) < range(1) || x(i) > range(2))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_row_vector.m000066400000000000000000000032331466512601400231620ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_row_vector (@var{x}) ## ## Return true if @var{x} is a non-empty row vector, and return ## false otherwise. ## ## Examples: ## @verbatim ## is_row_vector([]) ==> false ## is_row_vector([1 2 3]) ==> true ## is_row_vector([1; 2; 3]) ==> false ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_row_vector.m ## Last-Modified: 31 Aug 2024 function y = is_row_vector (x) y = isvector (x) && (rows (x) == 1); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_row_vector([]), false) %!assert(is_row_vector([1 2 3]), true) %!assert(is_row_vector([1; 2; 3]), false) fuzzy-logic-toolkit-0.6.1/inst/private/is_rule_index_list.m000066400000000000000000000036271466512601400241710ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_index_list (@var{x}, @var{max_index}) ## ## Return 1 if @var{x} is a valid rule index or a vector of valid rule indices, ## and return 0 otherwise. ## ## Examples: ## @verbatim ## is_rule_index_list(2, 5) ==> 1 ## is_rule_index_list([1 2], 5) ==> 1 ## is_rule_index_list([1, 2], 5) ==> 1 ## is_rule_index_list([1; 2], 5) ==> 1 ## is_rule_index_list(0, 0) ==> 0 ## is_rule_index_list([4 5], 2) ==> 0 ## is_rule_index_list([], 2) ==> 0 ## @end verbatim ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_index_list.m ## Last-Modified: 31 Aug 2024 function y = is_rule_index_list (x, max_index) if (is_pos_int (x)) y = (x <= max_index); elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!(is_pos_int (x(i)) && (x(i) <= max_index))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_rule_struct.m000066400000000000000000000033451466512601400233500ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_struct (@var{x}) ## ## Return true if the argument @var{x} is a valid FIS (Fuzzy Inference System) ## rule structure, and return false otherwise. ## ## is_rule_struct is a private function that localizes the test for valid FIS ## rule structs. For efficiency, is_rule_struct only determines if the argument ## @var{x} is a structure with the expected fields, but the types of the fields ## are not verified. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_struct.m ## Last-Modified: 10 Jun 2024 function y = is_rule_struct (x) y = isstruct (x) && ... isfield (x, 'antecedent') && ... isfield (x, 'consequent') && ... isfield (x, 'weight') && ... isfield (x, 'connection'); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_rule_vector.m000066400000000000000000000030611466512601400233210ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS rule structures, and return 0 ## otherwise. ## ## is_rule_vector is a private function that localizes the test for valid FIS ## 'rule' members. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_vector.m ## Last-Modified: 20 Aug 2012 function y = is_rule_vector (x) if (isequal(x, [])) y = 1; elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_rule_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_string.m000066400000000000000000000031521466512601400222770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_string (@var{x}) ## ## Return true if @var{x} is a character vector, and return false otherwise. ## ## is_string is a private function that localizes the test for valid Octave ## strings, which may need to be changed in the future. Octave 3.2.4 implements ## strings as character vectors. In subsequent versions of Octave, the internal ## implementation of strings may change, or a built-in Octave test 'isstring' ## may be implemented. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_string.m ## Last-Modified: 10 Jun 2024 function y = is_string (x) y = ischar (x) && isvector (x); endfunction fuzzy-logic-toolkit-0.6.1/inst/private/is_var_index.m000066400000000000000000000036501466512601400227530ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_var_index (@var{fis}, @var{in_or_out}, @var{var_index}) ## ## If @var{in_or_out} == 'input', return true if @var{var_index} is a valid input ## variable index for the given FIS structure, and return false otherwise. ## ## If @var{in_or_out} == 'output', return true if @var{var_index} is a valid output ## variable index for the given FIS structure, and return false otherwise. ## ## is_var_index is a private function that localizes the test for valid FIS ## input and output variable indices. The arguments @var{fis} and ## @var{in_or_out} are assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_var_index.m ## Last-Modified: 10 Jun 2024 function y = is_var_index (fis, in_or_out, var_index) y = is_int (var_index) && (var_index >= 1); if (strcmp (in_or_out, 'input')) y = y && (var_index <= length (fis.input)); else y = y && (var_index <= length (fis.output)); endif endfunction fuzzy-logic-toolkit-0.6.1/inst/private/square_distance_matrix.m000066400000000000000000000064101466512601400250340ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{sqr_dist} =} square_distance_matrix (@var{X}, @var{V}) ## ## Return a k x n matrix of ||x - v||^2 values (the squares of the ## distances between input data points x and cluster centers v), where ## k is the number of cluster centers and n is the number of data points. ## ## The element sqr_dist(i, j) will contain the square of the distance ## between the cluster center V(i, :) and the data point X(j, :). ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: square_dist_matrix.m ## Last-Modified: 5 Jun 2024 function sqr_dist = square_distance_matrix (X, V) sqr_dist = (sumsq (X, 2) + (sumsq (V, 2))' - 2 * X * V')'; endfunction %!test %! ## Test the faster version of this function (above) by comparing its %! ## output with the output of the previous, nested-for-loop version (below). %! ## %! ## The test is run 100 times (but is reported by the Octave interpreter as %! ## "1 test"). In each of the 100 test runs, the vectorized and loop versions %! ## of the function are called using randomly generated matrices X, V. %! ## %! ## The sizes of X and V, however, aren't random: X has 100 rows, 8 cols, %! ## and V has 5 rows, 8 cols. That is, the entries in X and V are random %! ## values in the range [0, 1], but the sizes of X and V are hard-coded. %! ## %! ## The test is passed if all entries of the two results differ by less than %! ## a tolerance of 10e-9 in all 100 test runs. %! %! function sqr_dist = square_distance_matrix_using_for_loops (X, V) %! k = rows (V); %! n = rows (X); %! sqr_dist = zeros (k, n); %! for i = 1 : k %! Vi = V(i, :); %! for j = 1 : n %! Vi_to_Xj = X(j, :) - Vi; %! sqr_dist(i, j) = sum (Vi_to_Xj .* Vi_to_Xj); %! endfor %! endfor %! endfunction %! %! ## Fixed array sizes and tolerance for the test. %! %! n = 100; %! f = 8; %! k = 5; %! tolerance = 10e-9; %! %! ## Run the test 100 times, in a loop. Each test run is successful if %! ## the vectorized and nested-for-loop version of the function produce %! ## results within the hard-coded tolerance. %! %! for i = 1 : 100 %! X = rand (n, f); %! V = rand (k, f); %! vec_result = square_distance_matrix (X, V); %! loop_result = square_distance_matrix_using_for_loops (X, V); %! assert (abs (vec_result - loop_result) < tolerance) %! endfor fuzzy-logic-toolkit-0.6.1/inst/private/update_cluster_membership.m000066400000000000000000000116211466512601400255340ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{Mu} =} update_cluster_membership (@var{V}, @var{X}, @var{m}, @var{k}, @var{n}, @var{sqr_dist}) ## ## Compute Mu for each (cluster center, input point) pair. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_prototypes, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Authors: Tony Trew, L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: update_cluster_membership.m ## Last-Modified: 5 Jun 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.4 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition) and Step 3 of Algorithm 4.1 in ## Fuzzy and Neural Control, by Robert Babuska, November 2009, ## p. 63. ##---------------------------------------------------------------------- function Mu = update_cluster_membership (V, X, m, k, n, sqr_dist) sqr_dist_zeros = (sqr_dist == 0); num_zeros = sum (sum (sqr_dist_zeros)); if (num_zeros == 0) exponent = 1.0 / (m - 1); summation = (sqr_dist ./ sum(sqr_dist)).^exponent; if (all (all (summation != 0))) Mu = 1.0 ./ summation; Mu ./= sum (Mu); else error ("division by 0 in update_cluster_membership'\n"); endif else Mu = sqr_dist_zeros / num_zeros; endif endfunction %!test %! ## Test the vectorized version of this function (above) by comparing its %! ## output with the output of the previous, nested-for-loop version (below). %! ## %! ## The test is run 100 times (but is reported by the Octave interpreter as %! ## "1 test"). In each of the 100 test runs, the vectorized and loop versions %! ## of the function are called using randomly generated matrices X, V. %! ## %! ## The sizes of X and V, however, aren't random: X has 100 rows, 8 cols, %! ## and V has 5 rows, 8 cols. That is, the entries in X and V are random %! ## values in the range [0, 1], but the sizes of X and V are hard-coded. %! ## %! ## The test is passed if all entries of the two results differ by less than %! ## a tolerance of 10e-9 in all 100 test runs. %! %! function Mu = update_cluster_membership_using_for_loops (V, X, m, k, n, sqr_dist) %! %! Mu = zeros (k, n); %! %! if (min (min (sqr_dist)) > 0) %! exponent = 1.0 / (m - 1); %! for i = 1 : k %! for j = 1 : n %! summation = 0.0; %! for l = 1 : k %! summation += (sqr_dist(i, j) / sqr_dist(l, j))^exponent; %! endfor %! if (summation != 0) %! Mu(i, j) = 1.0 / summation; %! else %! error ("division by 0 in update_cluster_membership'\n"); %! endif %! endfor %! endfor %! %! else %! num_zeros = 0; %! for i = 1 : k %! for j = 1 : n %! if (sqr_dist(i, j) == 0) %! num_zeros++; %! Mu(i, j) = 1.0; %! endif %! endfor %! endfor %! Mu = Mu / num_zeros; %! endif %! %! endfunction %! %! ## Fixed array sizes, exponent, and tolerance for the test. %! %! n = 100; %! f = 8; %! k = 5; %! m = 2; %! tolerance = 10e-9; %! %! ## Run the test 100 times, in a loop. In the last 5 test runs, make 3 of %! ## the data points in X identical to cluster centers in V in order to test %! ## the else case in the function. %! %! ## Each test run is successful if the vectorized and nested-for-loop %! ## version of the function produce results within the hard-coded tolerance. %! %! for i = 1 : 100 %! X = rand (n, f); %! V = rand (k, f); %! %! if (i > 95) %! X(1:3) = V(1:3); %! endif %! %! sqr_dist = square_distance_matrix (X, V); %! vec_result = update_cluster_membership (V, X, m, k, n, sqr_dist); %! loop_result = update_cluster_membership_using_for_loops (V, X, m, k, n, sqr_dist); %! assert (abs (vec_result - loop_result) < tolerance) %! endfor fuzzy-logic-toolkit-0.6.1/inst/private/update_cluster_prototypes.m000066400000000000000000000040471466512601400256350ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{V} =} update_cluster_prototypes (@var{Mu_m}, @var{X}, @var{k}) ## ## Update the cluster centers to correspond to the given membership ## function values. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: update_cluster_prototypes.m ## Last-Modified: 2 Sep 2012 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.5 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition). ##---------------------------------------------------------------------- function V = update_cluster_prototypes (Mu_m, X, k) V = Mu_m * X; sum_Mu_m = sum (Mu_m'); if (prod (sum_Mu_m) == 0) error ("division by 0 in function update_cluster_prototypes\n"); endif for i = 1 : k V(i, :) /= sum_Mu_m(i); endfor endfunction fuzzy-logic-toolkit-0.6.1/inst/psigmf.m000066400000000000000000000114421466512601400201120ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} psigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} psigmf (@var{[x1 x2 ... xn]}, @var{[a1 c1 a2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[a1 c1 a2 c2]}), return the corresponding @var{y} values for the product ## of two sigmoidal membership functions. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a1}, @var{c1}, @var{a2}, and @var{c2} must ## be real numbers. This membership function satisfies the equation: ## ## @verbatim ## f(x) = (1/(1 + exp(-a1*(x - c1)))) * (1/(1 + exp(-a2*(x - c2)))) ## @end verbatim ## ## The function is bounded above by 1 and below by 0. ## ## If @var{a1} is positive, @var{a2} is negative, and @var{c1} and @var{c2} are ## far enough apart with @var{c1} < @var{c2}, then: ## ## @verbatim ## (a1)/4 ~ the rising slope at c1 ## c1 ~ the left inflection point ## (a2)/4 ~ the falling slope at c2 ## c2 ~ the right inflection point ## @end verbatim ## ## and at each inflection point, the value of the function is about 0.5: ## ## @verbatim ## f(c1) ~ f(c2) ~ 0.5. ## @end verbatim ## ## (Here, the symbol ~ means "approximately equal".) ## ## To run the demonstration code, type "@t{demo psigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: psigmf.m ## Last-Modified: 13 Jun 2024 function y = psigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("psigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("psigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('psigmf', params)) error ("psigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on ## the domain x. a1 = params(1); c1 = params(2); a2 = params(3); c2 = params(4); y_val = @(x_val) 1 / (1 + exp (-a1 * (x_val - c1))) * ... 1 / (1 + exp (-a2 * (x_val - c2))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.5 20 -0.3 60]; %! y1 = psigmf(x, params); %! params = [0.3 20 -0.2 60]; %! y2 = psigmf(x, params); %! params = [0.2 20 -0.1 60]; %! y3 = psigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'psigmf demo'); %! plot(x, y1, 'r;params = [0.5 20 -0.3 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.3 20 -0.2 60];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.2 20 -0.1 60];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [0.3 20 -0.2 60]; %! y = [2.4726e-03 0.047424 0.4998 0.9502 0.9796 0.8807 ... %! 0.5000 0.1192 0.017986 2.4726e-03 3.3535e-04]; %! z = psigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! psigmf() %!error %! psigmf(1) %!error %! psigmf(1, 2, 3) %!error %! psigmf([1 0], 2) %!error %! psigmf(1, 2) %!error %! psigmf(0:100, []) %!error %! psigmf(0:100, [30]) %!error %! psigmf(0:100, [2 3]) %!error %! psigmf(0:100, [90 80 30]) %!error %! psigmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.1/inst/readfis.m000066400000000000000000000533421466512601400202470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} readfis () ## @deftypefnx {Function File} {@var{fis} =} readfis (@var{filename}) ## ## Read the information in an FIS file, and using this information, create and ## return an FIS structure. If called without any arguments or with an empty ## string as an argument, present the user with a file dialog GUI. If called ## with a @var{filename} that does not end with '.fis', append '.fis' to the ## @var{filename}. The @var{filename} is expected to be a string. ## ## Six examples of the input file format and example scripts that use readfis: ## ## @multitable @columnfractions .45 .45 ## @headitem Example FIS File @tab Corresponding Example Script ## @item cubic_approximator.fis ## @tab cubic_approx_demo.m ## @item heart_disease_risk.fis ## @tab heart_disease_demo_2.m ## @item investment_portfolio.fis ## @tab investment_portfolio_demo.m ## @item linear_tip_calculator.fis ## @tab linear_tip_demo.m ## @item mamdani_tip_calculator.fis ## @tab mamdani_tip_demo.m ## @item sugeno_tip_calculator.fis ## @tab sugeno_tip_demo.m ## @end multitable ## @sp 1 ## @seealso{writefis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: readfis.m ## Last-Modified: 12 Jun 2024 function fis = readfis (filename = '') ## If readfis was not called with 0 or 1 arguments, or if the argument ## is not a string, print an error message and halt. if (nargin > 1) error ("readfis requires 0 or 1 arguments\n"); elseif ((nargin == 1) && !is_string (filename)) error ("readfis's argument must be a string\n"); endif ## Open the input file. fid = open_input_file (filename); ## Read the [System], [Input], [Output], and [Rules] ## sections of the input file. [fis, num_inputs, num_outputs, num_rules, line_num] = ... init_fis_struct (fid); [fis, line_num] = read_fis_inputs (fid, fis, num_inputs, line_num); [fis, line_num] = read_fis_outputs (fid, fis, num_outputs, line_num); fis = read_rules (fid, fis, num_inputs, num_outputs, num_rules, ... line_num); ## Close the input file. fclose (fid); endfunction ##---------------------------------------------------------------------- ## Function: open_input_file ## Purpose: Open the input file specified by the filename. If the ## filename does not end with ".fis", then append ".fis" to ## the filename before opening. Return an fid if successful. ## Otherwise, print an error message and halt. ##---------------------------------------------------------------------- function fid = open_input_file (filename) ##-------------------------------------------------------------------- ## If the filename is not empty, and if the last four characters of ## the filename are not '.fis', append '.fis' to the filename. If the ## filename is empty, use a dialog to select the input file. ##-------------------------------------------------------------------- fn_len = length (filename); if (fn_len == 0) dialog = 1; else dialog = 0; endif if (((fn_len >= 4) && ... !strcmp(".fis",filename(fn_len-3:fn_len))) || ... ((fn_len > 0) && (fn_len < 4))) filename = [filename ".fis"]; elseif (dialog) system_command = sprintf ("zenity --file-selection; echo $file", ... filename); [dialog_error, filename] = system (file = system_command); if (dialog_error) puts ("Type 'help readfis' for more information.\n"); error ("error selecting file using dialog\n"); endif filename = strtrim (filename); endif ##-------------------------------------------------------------------- ## Open input file. ##-------------------------------------------------------------------- [fid, msg] = fopen (filename, "r"); if (fid == -1) if (dialog) system ('zenity --error --text "Error opening input file."'); endif puts ("Type 'help readfis' for more information.\n"); printf ("Error opening input file: %s\n", msg); error ("error opening input file\n"); endif endfunction ##---------------------------------------------------------------------- ## Function: init_fis_struct ## Purpose: Read the [System] section of the input file. Using the ## strings read from the input file, create a new FIS. If an ## error in the format of the input file is found, print an ## error message and halt. ##---------------------------------------------------------------------- function [fis, num_inputs, num_outputs, num_rules, line_num] = ... init_fis_struct (fid) ##-------------------------------------------------------------------- ## Read the [System] section. ##-------------------------------------------------------------------- line_num = 1; [line, line_num] = get_line (fid, line_num); [line, line_num] = get_line (fid, line_num); [fis_name, count] = sscanf (line, "Name = '%s", "C"); if (count != 1) error ("line %d: name of FIS expected\n", --line_num); endif fis_name = trim_last_char (fis_name); [line, line_num] = get_line (fid, line_num); [fis_type, count] = sscanf (line, "Type = '%s", "C"); if (count != 1) error ("line %d: type of FIS expected\n", --line_num); endif fis_type = trim_last_char (fis_type); [line, line_num] = get_line (fid, line_num); [fis_version, count] = sscanf (line, "Version = %f", "C"); if (count != 1) error ("line %d: version of FIS expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_inputs, count] = sscanf (line, "NumInputs = %d", "C"); if (count != 1) error ("line %d: number of inputs expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_outputs, count] = sscanf (line, "NumOutputs = %d", "C"); if (count != 1) error ("line %d: number of oututs expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_rules, count] = sscanf (line, "NumRules = %d", "C"); if (count != 1) error ("line %d: number of rules expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [and_method, count] = sscanf (line, "AndMethod = '%s", "C"); if (count != 1) error ("line %d: and method expected\n", --line_num); endif and_method = trim_last_char (and_method); [line, line_num] = get_line (fid, line_num); [or_method, count] = sscanf (line, "OrMethod = '%s", "C"); if (count != 1) error ("line %d: or method expected\n", --line_num); endif or_method = trim_last_char (or_method); [line, line_num] = get_line (fid, line_num); [imp_method, count] = sscanf (line, "ImpMethod = '%s", "C"); if (count != 1) error ("line %d: implication method expected\n", --line_num); endif imp_method = trim_last_char (imp_method); [line, line_num] = get_line (fid, line_num); [agg_method, count] = sscanf (line, "AggMethod = '%s", "C"); if (count != 1) error ("line %d: aggregation method expected\n", --line_num); endif agg_method = trim_last_char (agg_method); [line, line_num] = get_line (fid, line_num); [defuzz_method, count] = sscanf (line, "DefuzzMethod = '%s", "C"); if (count != 1) error ("line %d: defuzzification method expected\n", --line_num); endif defuzz_method = trim_last_char (defuzz_method); ##-------------------------------------------------------------------- ## Create a new FIS structure using the strings read from the ## input file. ##-------------------------------------------------------------------- fis = struct ('name', fis_name, ... 'type', fis_type, ... 'version', fis_version, ... 'andMethod', and_method, ... 'orMethod', or_method, ... 'impMethod', imp_method, ... 'aggMethod', agg_method, ... 'defuzzMethod', defuzz_method, ... 'input', [], ... 'output', [], ... 'rule', []); endfunction ##---------------------------------------------------------------------- ## Function: read_fis_inputs ## Purpose: For each FIS input, read the [Input] section from ## file. Add each new input and its membership functions to ## the FIS structure. ##---------------------------------------------------------------------- function [fis, line_num] = read_fis_inputs (fid, fis, num_inputs, ... line_num) for i = 1 : num_inputs [next_fis_input, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, 'input'); if (i == 1) fis.input = next_fis_input; else fis.input = [fis.input, next_fis_input]; endif ##------------------------------------------------------------------ ## Read membership function info for the current FIS input from ## file. Add each new membership function to the FIS struct. ##------------------------------------------------------------------ for j = 1 : num_mfs [next_mf, line_num] = get_next_mf (fid, line_num, i, j, 'input'); if (j == 1) fis.input(i).mf = next_mf; else fis.input(i).mf = [fis.input(i).mf, next_mf]; endif endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: read_fis_outputs ## Purpose: For each FIS output, read the [Output] section from ## file. Add each new output and its membership functions to ## the FIS structure. ##---------------------------------------------------------------------- function [fis, line_num] = read_fis_outputs (fid, fis, num_outputs, ... line_num) for i = 1 : num_outputs [next_fis_output, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, 'output'); if (i == 1) fis.output = next_fis_output; else fis.output = [fis.output, next_fis_output]; endif ##------------------------------------------------------------------ ## Read membership function info for the current FIS output from ## file. Add each new membership function to the FIS struct. ##------------------------------------------------------------------ for j = 1 : num_mfs [next_mf, line_num] = get_next_mf (fid, line_num, i, j, 'output'); if (j == 1) fis.output(i).mf = next_mf; else fis.output(i).mf = [fis.output(i).mf, next_mf]; endif endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: read_rules ## Purpose: Read the [Rules] section from file, and add the rules to ## the FIS. ##---------------------------------------------------------------------- function fis = read_rules (fid, fis, num_inputs, num_outputs, ... num_rules, line_num) [line, line_num] = get_line (fid, line_num); for i = 1 : num_rules [next_rule, line_num] = ... get_next_rule (fid, line_num, num_inputs, num_outputs); if (i == 1) fis.rule = next_rule; else fis.rule = [fis.rule, next_rule]; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: get_next_fis_io ## Purpose: Read the next [Input] or [Output] section of the ## input file. Using the info read from the input file, create ## a new FIS input or output structure. If an error in the ## format of the input file is found, print an error message ## and halt. ##---------------------------------------------------------------------- function [next_fis_io, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, in_or_out) ##-------------------------------------------------------------------- ## Read [Input] or [Output] section from file. ##-------------------------------------------------------------------- [line, line_num] = get_line (fid, line_num); if (strcmp ('input', in_or_out)) [io_index, count] = sscanf (line, "[Input %d", "C"); else [io_index, count] = sscanf (line, "[Output %d", "C"); endif if ((count != 1) || (io_index != i)) error ("line %d: next input or output expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [var_name, count] = sscanf (line, "Name = '%s", "C"); if (count != 1) error ("line %d: name of %s %d expected\n", --line_num, ... in_or_out, i); endif var_name = trim_last_char (var_name); [line, line_num] = get_line (fid, line_num); [range_low, range_high, count] = sscanf (line, ... "Range = [ %f %f ]", "C"); if ((count != 2) || (range_low > range_high)) error ("line %d: range for %s %d expected\n", --line_num, ... in_or_out, i); endif [line, line_num] = get_line (fid, line_num); [num_mfs, count] = sscanf (line, "NumMFs = %d", "C"); if (count != 1) error ("line %d: number of MFs for %s %d expected\n", ... --line_num, in_or_out, i); endif ##-------------------------------------------------------------------- ## Create a new FIS input or output structure. ##-------------------------------------------------------------------- next_fis_io = struct ('name', var_name, 'range', ... [range_low, range_high], 'mf', []); endfunction ##---------------------------------------------------------------------- ## Function: get_next_mf ## Purpose: Read information specifying the jth membership function for ## Input or Output (if in_or_out is 'input' or 'output', ## respectively) from the input file. Create a new membership ## function structure using the info read. If an error in the ## format of the input file is found, print an error message ## and halt. ##---------------------------------------------------------------------- function [next_mf, line_num] = get_next_mf (fid, line_num, i, j, ... in_or_out) ##-------------------------------------------------------------------- ## Read membership function info for the new FIS input or output ## from file. ##-------------------------------------------------------------------- [line, line_num] = get_line (fid, line_num); if (compare_versions (OCTAVE_VERSION(), "3.8.0", ">=")) line_vec = discard_empty_strings (ostrsplit (line, "=':,[] \t", true)); else line_vec = discard_empty_strings (strsplit (line, "=':,[] \t", true)); endif mf_index = sscanf (line_vec{1}, "MF %d", "C"); mf_name = line_vec{2}; mf_type = line_vec{3}; if (mf_index != j) error ("line %d: next MF for %s %d expected\n", --line_num, in_or_out, i); endif j = 1; for i = 4 : length (line_vec) [mf_params(j++), count] = sscanf (line_vec{i}, "%f", "C"); if (count != 1) error ("line %d: %s %d MF%d params expected\n", --line_num, in_or_out, i, j); endif endfor ##-------------------------------------------------------------------- ## Create a new membership function structure. ##-------------------------------------------------------------------- next_mf = struct ('name', mf_name, 'type', mf_type, 'params', ... mf_params); endfunction ##---------------------------------------------------------------------- ## Function: get_next_rule ## Purpose: Read the next rule from the input file. Create a struct for ## the new rule. If an error in the format of the input file ## is found, print an error message and halt. ##---------------------------------------------------------------------- function [next_rule, line_num] = get_next_rule (fid, line_num, ... num_inputs, num_outputs) [line, line_num] = get_line (fid, line_num); if (compare_versions (OCTAVE_VERSION(), "3.8.0", ">=")) line_vec = ostrsplit (line, ",():", true); else line_vec = strsplit (line, ",():", true); endif ##-------------------------------------------------------------------- ## Read antecedent. ##-------------------------------------------------------------------- format_str = ""; for j = 1 : num_inputs format_str = [format_str " %f"]; endfor [antecedent, count] = sscanf (line_vec{1}, format_str, ... [1, num_inputs]); if (length (antecedent) != num_inputs) error ("Line %d: Rule antecedent expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read consequent. ##-------------------------------------------------------------------- format_str = ""; for j = 1 : num_outputs format_str = [format_str " %f"]; endfor [consequent, count] = sscanf (line_vec{2}, format_str, ... [1, num_outputs]); if (length (consequent) != num_outputs) error ("Line %d: Rule consequent expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read weight. ##-------------------------------------------------------------------- [weight, count] = sscanf (line_vec{3}, "%f", "C"); if (count != 1) error ("Line %d: Rule weight expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read connection. ##-------------------------------------------------------------------- [connection, count] = sscanf (line_vec{5}, "%d", "C"); if ((count != 1) || (connection < 1) || (connection > 2)) error ("Line %d: Antecedent connection expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Create a new rule struct. ##-------------------------------------------------------------------- next_rule = struct ('antecedent', antecedent, ... 'consequent', consequent, ... 'weight', weight, ... 'connection', connection); endfunction ##---------------------------------------------------------------------- ## Function: get_line ## Purpose: Read the next line of the input file (without the newline) ## into line. Print an error message and halt on eof. ##---------------------------------------------------------------------- function [line, line_num] = get_line (fid, line_num) do line = fgetl (fid); if (isequal (line, -1)) error ("unexpected end of file at line %d", line_num); endif line = trim_leading_whitespace (line); line_num++; until (!comment_or_empty (line)) endfunction ##---------------------------------------------------------------------- ## Function: discard_empty_strings ## Purpose: Return a copy of the input cell array without any ## empty string elements. ##---------------------------------------------------------------------- function ret_val = discard_empty_strings (cell_array) ret_val = {}; j = 1; for i = 1 : length (cell_array) if (!strcmp (cell_array{i}, "")) ret_val{j++} = cell_array{i}; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: trim_last_char ## Purpose: Return a copy of the input string without its final ## character. ##---------------------------------------------------------------------- function str = trim_last_char (str) str = str(1 : length (str) - 1); endfunction ##---------------------------------------------------------------------- ## Function: trim_leading_whitespace ## Purpose: Return a copy of the input string without leading ## whitespace. ##---------------------------------------------------------------------- function str = trim_leading_whitespace (str) str_length = length (str); i = 1; while (i <= str_length && ... (str (i) == ' ' || str (i) == '\t' || str (i) == '\n' || ... str (i) == '\f' || str (i) == '\r' || str (i) == '\v')) i++; endwhile if (i > str_length) str = ""; else str = str (i : str_length); endif endfunction ##---------------------------------------------------------------------- ## Function: comment_or_empty ## Purpose: Return true if the line is a comment (that is, it begins ## with '#' or '%') or an empty line, and return false ## otherwise. It is assumed that leading whitespace has been ## removed from the input line. ##---------------------------------------------------------------------- function ret_val = comment_or_empty (line) ret_val = (length (line) == 0) || (line (1) == '#') || ... (line (1) == '%'); endfunction %!shared fis %! fis = readfis ('sugeno_tip_calculator.fis'); %!assert(fis.andMethod == 'einstein_product'); %!assert(fis.orMethod == 'einstein_sum'); %!assert(fis.impMethod == 'prod'); %!assert(fis.aggMethod == 'sum'); %!assert(fis.defuzzMethod == 'wtaver'); ## Test input validation %!error %! readfis(1, 2) %!error %! readfis(1) fuzzy-logic-toolkit-0.6.1/inst/rmmf.m000066400000000000000000000100441466512601400175630ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} rmmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}) ## ## Remove a membership function from an existing FIS ## structure and return the updated FIS. ## ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .35 .40 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{in_or_out} ## @tab 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab valid index of an FIS input/output variable ## @item @var{mf} ## @tab the string 'mf' ## @item @var{mf_index} ## @tab an integer ## @end multitable ## @sp 1 ## Note that rmmf will allow the user to delete membership functions that are ## currently in use by rules in the FIS. ## ## @seealso{addmf, rmvar} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: rmmf.m ## Last-Modified: 13 Jun 2024 function fis = rmmf (fis, in_or_out, var_index, mf, mf_index) ## If the caller did not supply 5 argument values with the correct ## types, print an error message and halt. if (nargin != 5) error ("rmmf requires 5 arguments\n"); elseif (!is_fis (fis)) error ("rmmf's first argument must be an FIS structure\n"); elseif (!(is_string(in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("rmmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("rmmf's third argument must be a variable index\n"); elseif (!isequal (mf, 'mf')) error ("rmmf's fourth argument must be the string 'mf'\n"); elseif (!is_int (mf_index)) error ("rmmf's fifth argument must be an integer\n"); endif ## Delete the membership function struct and update the FIS structure. if (strcmp (tolower (in_or_out), 'input')) all_mfs = fis.input(var_index).mf; fis.input(var_index).mf = [all_mfs(1 : mf_index - 1), ... all_mfs(mf_index + 1 : numel(all_mfs))]; else all_mfs = fis.output(var_index).mf; fis.output(var_index).mf = [all_mfs(1 : mf_index - 1), ... all_mfs(mf_index + 1 : numel(all_mfs))]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = rmmf(fis, 'input', 1, 'mf', 1); %! assert(fis.input(1).mf.name, 'Good'); ## Test input validation %!error %! rmmf() %!error %! rmmf(1) %!error %! rmmf(1, 2) %!error %! rmmf(1, 2, 3) %!error %! rmmf(1, 2, 3, 4) %!error %! rmmf(1, 2, 3, 4, 5, 6) %!error %! rmmf(1, 2, 3, 4, 5) %!error %! rmmf(fis, 2, 3, 4, 5) %!error %! rmmf(fis, 'input', 3, 4, 5) %!error %! rmmf(fis, 'input', 1, 4, 5) %!error %! rmmf(fis, 'input', 1, 'mf', 5.5) fuzzy-logic-toolkit-0.6.1/inst/rmvar.m000066400000000000000000000066001466512601400177540ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} rmvar (@var{fis}, @var{in_or_out}, @var{var_index}) ## ## Remove an input or output variable from an existing FIS ## structure and return the updated FIS. ## ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .35 .40 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{in_or_out} ## @tab either 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab an FIS input or output variable index ## @end multitable ## @sp 1 ## Note that rmvar will allow the user to delete an input or output variable ## that is currently in use by rules in the FIS. ## ## @seealso{addvar, rmmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy variable ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: rmvar.m ## Last-Modified: 13 Jun 2024 function fis = rmvar (fis, in_or_out, var_index) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if (nargin != 3) error ("rmvar requires 3 arguments\n"); elseif (!is_fis (fis)) error ("rmvar's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("rmvar's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("rmvar's third argument must be a variable index\n"); endif ## Delete the variable struct and update the FIS structure. if (strcmp (tolower (in_or_out), 'input')) all_vars = fis.input; fis.input = [all_vars(1 : var_index - 1), ... all_vars(var_index + 1 : numel (all_vars))]; else all_vars = fis.output; fis.output = [all_vars(1 : var_index - 1), ... all_vars(var_index + 1 : numel (all_vars))]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = rmvar(fis, 'input', 1); %! assert(fis.input.name, 'Service'); ## Test input validation %!error %! rmvar() %!error %! rmvar(1) %!error %! rmvar(1, 2) %!error %! rmvar(1, 2, 3, 4) %!error %! rmvar(1, 2, 3) %!error %! rmvar(fis, 2, 3) %!error %! rmvar(fis, 'input', 3) fuzzy-logic-toolkit-0.6.1/inst/setfis.m000066400000000000000000000250161466512601400201240ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} setfis (@var{fis}, @var{property}, @var{property_value}) ## @deftypefnx {Function File} {@var{fis} =} setfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{var_property}, @var{var_property_value}) ## @deftypefnx {Function File} {@var{fis} =} setfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}, @var{mf_property}, @var{mf_property_value}) ## ## Set a property (field) value of an FIS structure and return the ## updated FIS. ## ## There are three forms of setfis: ## ## @multitable @columnfractions .20 .70 ## @headitem Number of Arguments @tab Action Taken ## @item 3 ## @tab Set a property of the FIS structure. The properties that may ## be set are: name, type, andmethod, ormethod, impmethod, ## addmethod, defuzzmethod, and version. ## @item 5 ## @tab Set a property of an input or output variable of the FIS ## structure. The properties that may be set are: name and range. ## @item 7 ## @tab Set a property of a membership function. The properties that ## may be set are: name, type, and params. ## @end multitable ## @sp 1 ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .20 .70 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure ## @item @var{property} ## @tab a string; one of 'name', 'type', 'andmethod', ## 'ormethod', 'impmethod', 'addmethod', ## 'defuzzmethod', and 'version' (case-insensitive) ## @item @var{property_value} ## @tab a number (if property is 'version'); a string (otherwise) ## @item @var{in_or_out} ## @tab either 'input' or 'output' (case-insensitive) ## @item @var{var_index} ## @tab a valid integer index of an input or output FIS variable ## @item @var{var_property} ## @tab a string; either 'name' or 'range' ## @item @var{var_property_value} ## @tab a string (if var_property is 'name') or ## a vector range (if var_property is 'range') ## @item @var{mf} ## @tab the string 'mf' ## @item @var{mf_index} ## @tab a valid integer index of a membership function ## @item @var{mf_property} ## @tab a string; one of 'name', 'type', or 'params' ## @item @var{mf_property_value} ## @tab a string (if mf_property is 'name' or 'type'); ## an array (if mf_property is 'params') ## @end multitable ## @sp 1 ## Note that all of the strings representing properties above are case ## insensitive. ## ## @seealso{newfis, getfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: setfis.m ## Last-Modified: 13 Jun 2024 ##---------------------------------------------------------------------- function fis = setfis (fis, arg2, arg3, arg4 = 'dummy', ... arg5 = 'dummy', arg6 = 'dummy', arg7 = 'dummy') switch (nargin) case 3 fis = setfis_three_args (fis, arg2, arg3); case 5 fis = setfis_five_args (fis, arg2, arg3, arg4, arg5); case 7 fis = setfis_seven_args (fis, arg2, arg3, arg4, arg5, ... arg6, arg7); otherwise error ("setfis requires 3, 5, or 7 arguments\n"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_three_args ## Purpose: Handle calls to setfis that have 3 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_three_args (fis, arg2, arg3) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ismember (tolower (arg2), ... {'name', 'type', 'andmethod', 'ormethod', 'impmethod', ... 'aggmethod', 'defuzzmethod', 'version'}))) error ("incorrect second argument to setfis\n"); elseif (strcmp(tolower (arg2), 'version') && !is_real (arg3)) error ("the third argument to setfis must be a number\n"); elseif (!strcmp(tolower (arg2), 'version') && !is_string (arg3)) error ("the third argument to setfis must be a string\n"); endif ## Set the property (arg2) of the FIS to the property value (arg3). switch (tolower(arg2)) case 'name' fis.name = arg3; case 'version' fis.version = arg3; case 'type' fis.type = arg3; case 'andmethod' fis.andMethod = arg3; case 'ormethod' fis.orMethod = arg3; case 'impmethod' fis.impMethod = arg3; case 'aggmethod' fis.aggMethod = arg3; case 'defuzzmethod' fis.defuzzMethod = arg3; endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_five_args ## Purpose: Handle calls to setfis that have 5 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_five_args (fis, arg2, arg3, arg4, arg5) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("setfis's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("setfis's third argument must be a variable index\n"); elseif (!(is_string (arg4) && ... ismember (tolower (arg4), {'name', 'range'}))) error ("setfis's fourth argument must be 'name' or 'range'\n"); elseif (strcmp (arg4, 'name') && !is_string (arg5)) error ("incorrect fifth argument to setfis\n"); elseif (strcmp (arg4, 'range') && !is_real_matrix (arg5)) error ("incorrect fifth argument to setfis\n"); endif ## Set the input or output variable property (arg4) to the ## value (arg5). switch (tolower (arg2)) case 'input' switch (tolower (arg4)) case 'name' fis.input(arg3).name = arg5; case 'range' fis.input(arg3).range = arg5; endswitch case 'output' switch (tolower (arg4)) case 'name' fis.output(arg3).name = arg5; case 'range' fis.output(arg3).range = arg5; endswitch endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_seven_args ## Purpose: Handle calls to setfis that have 7 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_seven_args (fis, arg2, arg3, arg4, arg5, ... arg6, arg7) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("setfis's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("setfis's third argument must be a variable index\n"); elseif (!(is_string (arg4) && strcmp (tolower (arg4), 'mf'))) error ("setfis's fourth argument must be 'mf'\n"); elseif (!is_mf_index (fis, arg2, arg3, arg5)) error ("setfis's fifth arg must be a membership function index\n"); elseif (!(is_string (arg6) && ismember (tolower(arg6), ... {'name', 'type', 'params'}))) error ("incorrect sixth argument to setfis\n"); elseif (ismember (tolower (arg6), {'name', 'type'}) && ... !is_string (arg7)) error ("incorrect seventh argument to setfis\n"); elseif (strcmp (tolower (arg6), 'params') && !is_real_matrix (arg7)) error ("incorrect seventh argument to setfis\n"); endif ## Set the membership function property (arg6) to the value (arg7). switch (tolower (arg2)) case 'input' switch (tolower (arg6)) case 'name' fis.input(arg3).mf(arg5).name = arg7; case 'type' fis.input(arg3).mf(arg5).type = arg7; case 'params' fis.input(arg3).mf(arg5).params = arg7; endswitch case 'output' switch (tolower (arg6)) case 'name' fis.output(arg3).mf(arg5).name = arg7; case 'type' fis.output(arg3).mf(arg5).type = arg7; case 'params' fis.output(arg3).mf(arg5).params = arg7; endswitch endswitch endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = setfis(fis, 'defuzzMethod', 'mom'); %! assert(fis.defuzzMethod, 'mom'); ## Test input validation %!error %! setfis() %!error %! setfis(1) %!error %! setfis(1, 2) %!error %! setfis(1, 2, 3, 4) %!error %! setfis(1, 2, 3, 4, 5, 6) %!error %! setfis(1, 2, 3, 4, 5, 6, 7, 8) %!error %! setfis(1, 2, 3, 4, 5, 6, 7) %!error %! setfis(fis, 2, 3, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 3, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 1, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 5, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 1, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 1, 'name', 7) fuzzy-logic-toolkit-0.6.1/inst/showfis.m000066400000000000000000000220151466512601400203050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} showfis (@var{fis}) ## ## Print all of the property (field) values of the FIS structure and its ## substructures. ## ## @seealso{getfis, showrule} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: showfis.m ## Last-Modified: 29 May 2024 function showfis (fis) ## If getfis was called with an incorrect number of arguments, ## or the argument does not have the correct type, print an error ## message and halt. if (nargin != 1) error ("showfis requires 1 argument\n"); elseif (!is_fis (fis)) error ("showfis's argument must be an FIS structure\n"); endif ## Print properties of the FIS structure. ## Determine: ## the number of input variables ## number of output variables ## number of rules ## input membership function names ## input membership function types ## input membership functions parameters ## number of input membership functions ## output membership function names ## output membership function types ## output membership function parameters ## number of output membership functions num_inputs = columns(fis.input); num_outputs = columns(fis.output); num_rules = columns(fis.rule); k = 1; in_mf_labels = {}; in_mf_types = {}; in_mf_params{k} = []; for i = 1 : num_inputs for j = 1 : columns (fis.input(i).mf) in_mf_labels{k} = fis.input(i).mf(j).name; in_mf_types{k} = fis.input(i).mf(j).type; in_mf_params{k++} = fis.input(i).mf(j).params; endfor endfor num_input_mf = k - 1; k = 1; out_mf_labels = {}; out_mf_types = {}; out_mf_params{k} = []; for i = 1 : num_outputs for j = 1 : columns (fis.output(i).mf) out_mf_labels{k} = fis.output(i).mf(j).name; out_mf_types{k} = fis.output(i).mf(j).type; out_mf_params{k++} = fis.output(i).mf(j).params; endfor endfor num_output_mf = k - 1; ## Print the name, type, and number of inputs/outputs. line = 1; printf ("%d. Name %s\n", line++, fis.name); printf ("%d. Type %s\n", line++, fis.type); printf ("%d. Inputs/Outputs [%d %d]\n", line++, num_inputs, ... num_outputs); ## Print the number of input membership functions. printf ("%d. NumInputMFs ", line++); if (num_inputs == 0) printf ("0\n"); elseif (num_inputs == 1) printf ("%d\n", columns(fis.input(1).mf)); else printf("["); for i = 1 : num_inputs-1 printf ("%d ", columns(fis.input(i).mf)); endfor printf ("%d]\n", columns(fis.input(num_inputs).mf)); endif ## Print the number of output membership functions. printf ("%d. NumOutputMFs ", line++); if (num_outputs == 0) printf("0\n"); elseif (num_outputs == 1) printf ("%d\n", columns(fis.output(1).mf)); else printf ("["); for i = 1 : num_outputs - 1 printf ("%d ", columns (fis.output(i).mf)); endfor printf ("%d]\n", columns (fis.output(num_outputs).mf)); endif ## Print the number of rules, 'And' method, 'Or' method, 'Implication' ## method, 'Aggregation' method, and 'Defuzzification' method. printf ("%d. NumRules %d\n", line++, num_rules); printf ("%d. AndMethod %s\n", line++, fis.andMethod); printf ("%d. OrMethod %s\n", line++, fis.orMethod); printf ("%d. ImpMethod %s\n", line++, fis.impMethod); printf ("%d. AggMethod %s\n", line++, fis.aggMethod); printf ("%d. DefuzzMethod %s\n", line++, fis.defuzzMethod); ## Print the input variable names (labels). printf ("%d. InLabels ", line++); if (num_inputs == 0) printf ("\n"); else printf ("%s\n", fis.input(1).name); for i = 2 : num_inputs printf ("%d. %s\n", line++, fis.input(i).name); endfor endif ## Print the output variable names (labels). printf ("%d. OutLabels ", line++); if (num_outputs == 0) printf ("\n"); else printf ("%s\n", fis.output(1).name); for i = 2 : num_outputs printf ("%d. %s\n", line++, fis.output(i).name); endfor endif ## Print the ranges of the input variables. printf ("%d. InRange ", line++); if (num_inputs == 0) printf ("\n"); else printf ("%s\n", mat2str(fis.input(1).range)); for i = 2 : num_inputs printf ("%d. ", line++); printf ("%s\n", mat2str(fis.input(i).range)); endfor endif ## Print the ranges of the output variables. printf ("%d. OutRange ", line++); if (num_outputs == 0) printf ("\n"); else printf ("%s\n", mat2str(fis.output(1).range)); for i = 2 : num_outputs printf ("%d. ", line++); printf ("%s\n", mat2str (fis.output(i).range)); endfor endif ## Print the input variables' membership function labels. printf ("%d. InMFLabels ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", in_mf_labels{1}); for i = 2 : num_input_mf printf ("%d. %s\n", line++, in_mf_labels{i}); endfor endif ## Print the output variables' membership function labels. printf ("%d. OutMFLabels ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", out_mf_labels{1}); for i = 2 : num_output_mf printf ("%d. %s\n", line++, out_mf_labels{i}); endfor endif ## Print the input variables' membership function types. printf ("%d. InMFTypes ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", in_mf_types{1}); for i = 2 : num_input_mf printf ("%d. %s\n", line++, in_mf_types{i}); endfor endif ## Print the output variables' membership function types. printf ("%d. OutMFTypes ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", out_mf_types{1}); for i = 2 : num_output_mf printf ("%d. %s\n", line++, out_mf_types{i}); endfor endif ## Print the input variables' membership function parameters. printf ("%d. InMFParams ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", mat2str(in_mf_params{1})); for i = 2 : num_input_mf printf ("%d. ", line++); printf ("%s\n", mat2str (in_mf_params{i})); endfor endif ## Print the output variables' membership function parameters. printf ("%d. OutMFParams ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", mat2str (out_mf_params{1})); for i = 2 : num_output_mf printf ("%d. ", line++); printf ("%s\n", mat2str (out_mf_params{i})); endfor endif ## Print the rule antecedents. printf("%d. Rule Antecedent ", line++); if (num_rules == 0) printf ("\n"); else printf ("%s\n", mat2str (fis.rule(1).antecedent)); for i = 2 : num_rules printf ("%d. ", line++); printf ("%s\n", mat2str (fis.rule(i).antecedent)); endfor endif ## Print the rule consequents. printf ("%d. Rule Consequent ", line++); if (num_rules == 0) printf ("\n"); else printf ("%s\n", mat2str (fis.rule(1).consequent)); for i = 2 : num_rules printf ("%d. ", line++); printf ("%s\n", mat2str (fis.rule(i).consequent)); endfor endif ## Print the rule weights. printf("%d. Rule Weight ", line++); if (num_rules == 0) printf ("\n"); else printf ("%d\n", fis.rule(1).weight); for i = 2 : num_rules printf ("%d. %d\n", line++, fis.rule(i).weight); endfor endif ## Print the rule connections. printf ("%d. Rule Connection ", line++); if (num_rules == 0) printf ("\n"); else printf ("%d\n", fis.rule(1).connection); for i = 2 : num_rules printf ("%d. %d\n", line++, ... fis.rule(i).connection); endfor endif endfunction ## Test input validation %!error %! showfis() %!error %! showfis(1, 2) %!error %! showfis(1) fuzzy-logic-toolkit-0.6.1/inst/showrule.m000066400000000000000000000440571466512601400205050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} showrule (@var{fis}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{format}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{'verbose'}, @var{language}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{'verbose'}, @var{'custom'}, @var{@{"and" "or" "If" "then" "is" "isn't" "somewhat" "very" "extremely" "very very"@}}) ## ## ## Show the rules for an FIS structure in verbose, symbolic, or indexed format. ## Built in languages for the 'verbose' format are: English, ## Chinese (or Mandarin, Pinyin), Russian (or Pycckii, Russkij), French (or Francais), ## Spanish (or Espanol), and German (or Deutsch). The names of the languages are ## case-insensitive, Chinese is written in Pinyin, and Russian is transliterated. ## ## To use a custom language, enter 'verbose' and 'custom' for the third and ## fourth parameters, respectively, and a cell array of ten strings (to specify ## the custom language) corresponding to the English @{"and" "or" "If" "then" ## "is" "isn't" "somewhat" "very" "extremely" "very very"@} for the fifth ## parameter. ## ## To run the demonstration code, type "@t{demo showrule}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{addrule, getfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy rule ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: showrule.m ## Last-Modified: 10 Jun 2024 function showrule (fis, index_list = [], format = 'verbose', ... language = 'english', ... verbose_strings = {"and" "or" "If" "then" "is" ... "isn't" "somewhat" "very" ... "extremely" "very very"}) ##-------------------------------------------------------------------- ## If the caller did not supply between 1 and 5 arguments with the ## correct types, print an error message and halt. ##-------------------------------------------------------------------- if (!(nargin >= 1 && nargin <= 5)) error ("showrule requires between 1 and 5 arguments\n"); elseif (!is_fis (fis)) error ("showrule's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && ... !is_rule_index_list (index_list, length (fis.rule))) error ("showrule's second arg must be a vector of rule indices\n"); elseif ((nargin >= 3) && !is_format (format)) error ("showrule's third argument must specify the format\n"); elseif ((nargin == 4) && isequal (tolower (language), "custom")) error ("showrule: specify custom verbose strings in the fifth arg\n"); elseif ((nargin == 4) && !is_builtin_language (language)) error ("showrule's fourth arg must specify a built-in language\n"); elseif ((nargin == 5) && !isequal (tolower (language), "custom")) error ("showrule: use 'custom' as 4th arg to specify custom strings\n"); endif ##-------------------------------------------------------------------- ## If showrule was called with only one argument, create the default ## index list (all rule indices, in ascending order). ##-------------------------------------------------------------------- if (nargin == 1) index_list = 1 : length (fis.rule); endif ##-------------------------------------------------------------------- ## Show the rules in indexed, symbolic, or verbose format. ##-------------------------------------------------------------------- switch (tolower (format)) case 'indexed' showrule_indexed_format (fis, index_list); case 'symbolic' showrule_symbolic_format (fis, index_list); case 'verbose' showrule_verbose_format (fis, index_list, language, ... verbose_strings); endswitch endfunction ##---------------------------------------------------------------------- ## Function: get_verbose_hedge ## Purpose: For no hedge, return the empty string. ## For the built-in hedges, return the verbose string in the ## language used in the cell array verbose_strings (the second ## parameter). For custom hedges, return the power (rounded to ## two digits) to which the membership function matching value ## will be raised. ##---------------------------------------------------------------------- function hedge = get_verbose_hedge (mf_index_and_hedge, verbose_strings) mf_index_and_hedge = abs (mf_index_and_hedge); mf_index = fix (mf_index_and_hedge); hedge_num = round (100 * (mf_index_and_hedge - mf_index)); switch (hedge_num) case 0 ## .00 <=> no hedge <=> mu(x) hedge = ""; case 5 ## .05 <=> somewhat x <=> mu(x)^0.5 hedge = verbose_strings{7}; case 20 ## .20 <=> very x <=> mu(x)^2 hedge = verbose_strings{8}; case 30 ## .30 <=> extremely x <=> mu(x)^3 hedge = verbose_strings{9}; case 40 ## .40 <=> very very x <=> mu(x)^4 hedge = verbose_strings{10}; otherwise ## For custom hedge, return the hedge = hedge_num / 10; ## power dd/10. That is: endswitch ## .dd <=> x ## <=> mu(x)^(dd/10) endfunction ##---------------------------------------------------------------------- ## Function: get_is_or_isnt ## Purpose: Return the verbose string for "is" or "isn't" for the given ## membership function value. If the membership function value ## is 0, return the empty string. ##---------------------------------------------------------------------- function is_or_isnt = get_is_or_isnt (mem_fcn_value, verbose_strings) if (mem_fcn_value > 0) is_or_isnt = verbose_strings{5}; elseif (mem_fcn_value < 0) is_or_isnt = verbose_strings{6}; else is_or_isnt = ""; endif endfunction ##---------------------------------------------------------------------- ## Function: get_mf_name ## Purpose: Return the specified membership function name. ##---------------------------------------------------------------------- function mf_name = get_mf_name (mem_fcn_value, fis_input_or_output) mf_name = fis_input_or_output.mf(abs(fix(mem_fcn_value))).name; endfunction ##---------------------------------------------------------------------- ## Function: get_verbose_strings ## Purpose: Return a cell array of ten strings corresponding to: ## {"and" "or" "If" "then" "is" "isn't" ... ## "somewhat" "very" "extremely" "very very"} ## for the (built-in) language specified by the argument. ## Custom verbose strings are specified by an argument to ## showrule -- they are not handled by this function. ##---------------------------------------------------------------------- function str = get_verbose_strings (language) switch (language) case 'english' str = {"and" "or" "If" "then" "is" "isn't" ... "somewhat" "very" "extremely" "very very"}; case {'chinese' 'mandarin' 'pinyin'} str = {"he" "huo" "Ruguo" "name" "shi" "bu shi" ... "youdian" "hen" "feichang" "feichang feichang"}; case {'russian' 'russkij' 'pycckii'} str = {"i" "ili" "ecli" "togda" "" "ne" ... "nemnogo" "ochen" "prevoshodnoye" "ochen ochen"}; case {'spanish' 'espanol'} str = {"y" "o" "Si" "entonces" "es" "no es" ... "un poco" "muy" "extremadamente" "muy muy"}; case {'francais' 'french'} str = {"et" "ou" "Si" "alors" "est" "n'est pas" ... "un peu" "tres" "extremement" "tres tres"}; case {'deutsch' 'german'} str = {"und" "oder" "Wenn" "dann" "ist" "ist nicht" ... "ein wenig" "sehr" "auBerst" "sehr sehr"}; endswitch endfunction ##---------------------------------------------------------------------- ## Function: showrule_indexed_format ## Purpose: Show the rules in indexed format. ##---------------------------------------------------------------------- function showrule_indexed_format (fis, index_list) num_inputs = columns (fis.input); num_outputs = columns (fis.output); for i = 1 : length (index_list) current_ant = fis.rule(index_list(i)).antecedent; current_con = fis.rule(index_list(i)).consequent; current_wt = fis.rule(index_list(i)).weight; current_connect = fis.rule(index_list(i)).connection; ##------------------------------------------------------------------ ## Print membership functions for the inputs. ##------------------------------------------------------------------ for j = 1 : num_inputs if (is_int (current_ant(j))) printf ("%d", current_ant(j)); else printf ("%.2f", current_ant(j)); endif if (j == num_inputs) puts (","); endif puts (" "); endfor ##------------------------------------------------------------------ ## Print membership functions for the outputs. ##------------------------------------------------------------------ for j = 1 : num_outputs if (is_int (current_con(j))) printf ("%d", current_con(j)); else printf ("%.2f", current_con(j)); endif if (j < num_outputs) puts (" "); endif endfor ##------------------------------------------------------------------ ## Print the weight in parens. ##------------------------------------------------------------------ if (is_int (current_wt)) printf (" (%d) : ", current_wt); else printf (" (%.4f) : ", current_wt); endif ##------------------------------------------------------------------ ## Print the connection and a newline. ##------------------------------------------------------------------ printf ("%d\n", current_connect); endfor endfunction ##---------------------------------------------------------------------- ## Function: showrule_symbolic_format ## Purpose: Show the rules in symbolic format. ##---------------------------------------------------------------------- function showrule_symbolic_format (fis, index_list) verbose_strings = {"&&" "||" "" "=>" "==" "!=" ... 0.5 2.0 3.0 4.0}; showrule_verbose_format (fis, index_list, "custom", ... verbose_strings, true); endfunction ##---------------------------------------------------------------------- ## Function: showrule_verbose_format ## Purpose: Show the rules in verbose format. ##---------------------------------------------------------------------- function showrule_verbose_format (fis, index_list, language, ... verbose_strings, ... suppress_comma = false) num_inputs = columns (fis.input); num_outputs = columns (fis.output); ##-------------------------------------------------------------------- ## Get verbose strings in the (built-in) language specified. Note ## that the strings for custom languages are supplied by the user. ##-------------------------------------------------------------------- language = tolower (language); if (isequal ("custom", language)) str = verbose_strings; else str = get_verbose_strings (language); endif and_str = str{1}; if_str = str{3}; then_str = str{4}; ##-------------------------------------------------------------------- ## For each index in the index_list, print the index number, the rule, ## and the weight. ##-------------------------------------------------------------------- for i = 1 : length (index_list) connect_str = str{fis.rule(index_list(i)).connection}; current_ant = fis.rule(index_list(i)).antecedent; current_con = fis.rule(index_list(i)).consequent; current_wt = fis.rule(index_list(i)).weight; ##------------------------------------------------------------------ ## For j = 1, print: ## . If ( [] ) ## and for 2 <= j <= num_inputs, print: ## ( [] ) ## in the specified language. Custom hedges are printed in the form: ## ( ^) ##------------------------------------------------------------------ first_input_printed = true; for j = 1 : num_inputs if (j == 1) printf ("%d.", index_list(i)); endif input_name = fis.input(j).name; is_or_isnt = get_is_or_isnt (current_ant(j), str); if (!isempty (is_or_isnt)) hedge = get_verbose_hedge (current_ant(j), str); mf_name = get_mf_name (current_ant(j), fis.input(j)); if (first_input_printed) first_input_printed = false; printf (" %s", if_str); else printf (" %s", connect_str); endif if (isempty (hedge)) printf (" (%s %s %s)", input_name, is_or_isnt, mf_name); elseif (ischar (hedge)) printf (" (%s %s %s %s)", input_name, is_or_isnt, hedge, ... mf_name); else printf (" (%s %s %s^%3.1f)", input_name, is_or_isnt, ... mf_name, hedge); endif endif endfor ##------------------------------------------------------------------ ## Print the consequent in the form: ## ", then (output-name is [hedge] mem-fcn-name) and ## (output-name is [hedge] mem-fcn-name) and ## ... ## (output-name is [hedge] mem-fcn-name)" ## ## Only the outputs for which the membership function index is ## non-zero are printed. Negative membership function indices ## indicate "isn't" instead of "is", and the fractional part of ## the membership function index indicates a hedge, which is also ## printed. ## ## For non-numeric and empty hedges, print each of the outputs ## using the form: ## ( [] ) ## For custom and numeric hedges, use the form: ## ( ^) ## ## The comma may be suppressed (as it is for symbolic output) by ## calling the function with suppress_comma == true. ##------------------------------------------------------------------ first_output_printed = true; for j = 1 : num_outputs output_name = fis.output(j).name; is_or_isnt = get_is_or_isnt (current_con(j), str); if (!isempty (is_or_isnt)) hedge = get_verbose_hedge (current_con(j), str); mf_name = get_mf_name (current_con(j), fis.output(j)); if (first_output_printed) first_output_printed = false; if (suppress_comma) printf (" %s", then_str); else printf (", %s", then_str); endif else printf (" %s", and_str); endif if (isempty (hedge)) printf (" (%s %s %s)", output_name, is_or_isnt, mf_name); elseif (ischar (hedge)) printf (" (%s %s %s %s)", output_name, is_or_isnt, hedge, ... mf_name); else printf (" (%s %s %s^%3.1f)", output_name, is_or_isnt, ... mf_name, hedge); endif endif endfor ##------------------------------------------------------------------ ## Finally, print the weight in parens and a newline: ## " ()" ##------------------------------------------------------------------ if is_int (current_wt) printf (" (%d)\n", current_wt); else printf (" (%.4f)\n", current_wt); endif endfor endfunction ##---------------------------------------------------------------------- ## Embedded Demos and Tests ##---------------------------------------------------------------------- %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis)\n"); %! showrule (fis) %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, [2 4], 'symbolic')\n"); %! showrule (fis, [2 4], 'symbolic') %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, 1:4, 'indexed')\n"); %! showrule (fis, 1:4, 'indexed') %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, 1, 'verbose', 'francais')\n"); %! showrule (fis, 1, 'verbose', 'francais') %! puts ("\n"); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); ## Test input validation %!error %! showrule() %!error %! showrule(1, 2, 3, 4, 5, 6) %!error %! showrule(1, 2, 3, 4, 5) %!error %! showrule(fis, '2', 3, 4, 5) %!error %! showrule(fis, 2, 3, 4, 5) %!error %! showrule(fis, [2 4], 'verbose', 'custom') %!error %! showrule(fis, [2 4], 'verbose', 4) %!error %! showrule(fis, [2 4], 'verbose', 'english', 5) fuzzy-logic-toolkit-0.6.1/inst/sigmf.m000066400000000000000000000102701466512601400177300ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} sigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} sigmf (@var{[x1 x2 ... xn]}, @var{[a c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a c]}), ## return the corresponding @var{y} values for the sigmoidal membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{c} must be real numbers. This ## membership function satisfies the equation: ## ## @verbatim ## f(x) = 1/(1 + exp(-a*(x - c))) ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## The parameters a and c specify: ## ## @verbatim ## a == the slope at c ## c == the inflection point ## @end verbatim ## ## and at the inflection point, the value of the function is 0.5: ## ## @verbatim ## f(c) == 0.5. ## @end verbatim ## ## To run the demonstration code, type "@t{demo sigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: sigmf.m ## Last-Modified: 13 Jun 2024 function y = sigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("sigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("sigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('sigmf', params)) error ("sigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); c = params(2); y_val = @(x_val) 1 / (1 + exp (-a * (x_val - c))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.3 40]; %! y1 = sigmf(x, params); %! params = [0.2 40]; %! y2 = sigmf(x, params); %! params = [0.1 40]; %! y3 = sigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'sigmf demo'); %! plot(x, y1, 'r;params = [0.3 40];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.2 40];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.1 40];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [5 2]; %! y = [4.5398e-05 6.6929e-03 0.5000 0.9933 1 1 1 1 1 1 1]; %! z = sigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! sigmf() %!error %! sigmf(1) %!error %! sigmf(1, 2, 3) %!error %! sigmf([1 0], 2) %!error %! sigmf(1, 2) %!error %! sigmf(0:100, []) %!error %! sigmf(0:100, [30]) %!error %! sigmf(0:100, [90 80 30]) %!error %! sigmf(0:100, 'abc') %!error %! sigmf(0:100, '') fuzzy-logic-toolkit-0.6.1/inst/smf.m000066400000000000000000000125461466512601400174200ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} smf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} smf (@var{[x1 x2 ... xn]}, @var{[a b]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b]}), ## return the corresponding @var{y} values for the S-shaped membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{b} must be real numbers, with ## @var{a} < @var{b}. This membership function satisfies: ## ## @verbatim ## 0 if x <= a ## f(x) = 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 1 if x >= b ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## To run the demonstration code, type "@t{demo smf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership s-shaped ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: smf.m ## Last-Modified: 13 Jun 2024 function y = smf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("smf requires 2 arguments\n"); elseif (!is_domain (x)) error ("smf's first argument must be a valid domain\n"); elseif (!are_mf_params ('smf', params)) error ("smf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); a_b_ave = (a + b) / 2; b_minus_a = b - a; y_val = @(x_val) smf_val (x_val, a, b, a_b_ave, b_minus_a); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y = smf_val (x_val, a, b, a_b_ave, b_minus_a) ## ## smf_val returns one value of the S-shaped membership function, which ## satisfies: ## 0 if x <= a ## f(x) = 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 1 if x >= b ## ## smf_val is a private function, called only by smf. Because smf_val ## is not intended for general use -- and because the parameters a and b ## are checked for errors in the function smf (defined above), the ## parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = smf_val (x_val, a, b, a_b_ave, b_minus_a) ## Calculate and return a single y value of the S-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 0; elseif (x_val <= a_b_ave) y_val = 2 * ((x_val - a) / b_minus_a)^2; elseif (x_val < b) y_val = 1 - 2 * ((x_val - b) / b_minus_a)^2; else y_val = 1; endif endfunction %!demo %! x = 0:100; %! params = [40 60]; %! y1 = smf(x, params); %! params = [25 75]; %! y2 = smf(x, params); %! params = [10 90]; %! y3 = smf(x, params); %! figure('NumberTitle', 'off', 'Name', 'smf demo'); %! plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 75]; %! y = [0 0 0 0.020000 0.1800 0.5000 0.8200 0.9800 1 1 1]; %! z = smf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! smf() %!error %! smf(1) %!error %! smf(1, 2, 3) %!error %! smf([1 0], 2) %!error %! smf(1, 2) %!error %! smf(0:100, []) %!error %! smf(0:100, [30]) %!error %! smf(0:100, [90 80 30]) %!error %! smf(0:100, 'abc') %!error %! smf(0:100, '') fuzzy-logic-toolkit-0.6.1/inst/sugeno_tip_calculator.fis000066400000000000000000000047751466512601400235520ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: sugeno_tip_calculator.fis ## Last-Modified: 28 Aug 2012 % Sugeno Tip Calculator % Computes cheap, average, and generous tips % given food quality and service ratings. [System] Name = 'Sugeno-Tip-Calculator' Type = 'sugeno' Version = 1.0 NumInputs = 2 NumOutputs = 3 NumRules = 10 AndMethod = 'einstein_product' OrMethod = 'einstein_sum' ImpMethod = 'prod' AggMethod = 'sum' DefuzzMethod = 'wtaver' [Input1] Name = 'Food-Quality' Range = [1 10] NumMFs = 2 MF1 = 'Bad' : 'trapmf', [0 1 3 7] MF2 = 'Good' : 'trapmf', [3 7 10 11] [Input2] Name = 'Service' Range = [1 10] NumMFs = 2 MF1 = 'Bad' : 'trapmf', [0 1 3 7] MF2 = 'Good' : 'trapmf', [3 7 10 11] [Output1] Name = 'Cheap-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Output2] Name = 'Average-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Output3] Name = 'Generous-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Rules] 1.30 1.30, 1.30 1.20 1.00 (1) : 1 2.00 1.30, 1.00 1.00 2.00 (1) : 1 2.20 1.20, 1.00 2.00 3.00 (1) : 1 1.00 1.00, 1.00 1.00 2.00 (1) : 1 2.00 1.00, 1.00 2.00 3.00 (1) : 1 2.30 1.00, 1.00 2.00 3.20 (1) : 1 1.00 2.00, 1.00 2.00 3.00 (1) : 1 2.00 2.00, 2.00 2.00 3.20 (1) : 1 1.20 2.20, 1.00 2.00 3.00 (1) : 1 2.40 2.40, 3.00 3.20 3.30 (1) : 1 fuzzy-logic-toolkit-0.6.1/inst/sugeno_tip_demo.m000066400000000000000000000062311466512601400220050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} sugeno_tip_demo ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and ## evaluate a Sugeno-type FIS with multiple outputs stored in a text ## file. Also demonstrate the use of hedges in the FIS rules and the ## Einstein product and sum as the T-norm/S-norm pair. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (constant) output functions ## @item ## plots each of the three FIS outputs as a function of the inputs ## @item ## displays the FIS rules in verbose format in the Octave window ## @item ## evaluates the Sugeno-type FIS for six inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: sugeno_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('sugeno_tip_calculator.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); plotmf (fis, 'output', 2); plotmf (fis, 'output', 3); ## Plot the cheap, average, and generous tips as a function of ## Food-Quality and Service. gensurf (fis, [1 2], 1); gensurf (fis, [1 2], 2); gensurf (fis, [1 2], 3); ## Demonstrate showrule with hedges. showrule (fis); ## Calculate the Tip for 6 sets of input values: puts ("\nFor the following values of (Food Quality, Service):\n\n"); food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4] puts ("\nThe cheap, average, and generous tips are:\n\n"); tip = evalfis (food_service, fis, 1001) %!test %! fis = readfis ('sugeno_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 10.000 12.500 %! 10.868 13.681 19.138 %! 17.500 17.500 20.000 %! 10.604 14.208 19.452 %! 10.427 13.687 19.033 %! 10.471 14.358 19.353]; %! assert(tip, expected_result, 1e-3); fuzzy-logic-toolkit-0.6.1/inst/trapmf.m000066400000000000000000000113371466512601400201210ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} trapmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} trapmf (@var{[x1 x2 ... xn]}, @var{[a b c d]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c d]}), ## return the corresponding @var{y} values for the trapezoidal membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of ## strictly increasing real numbers, and parameters @var{a}, @var{b}, @var{c}, ## and @var{d} must satisfy the inequalities: ## @var{a} < @var{b} <= @var{c} < @var{d}. None of the parameters @var{a}, ## @var{b}, @var{c}, @var{d} are required to be in the domain @var{x}. The ## minimum and maximum values of the trapezoid are assumed to be 0 and 1. ## ## The parameters @var{[a b c d]} correspond to the x values ## of the corners of the trapezoid: ## ## @verbatim ## 1-| -------- ## | / \ ## | / \ ## | / \ ## 0----------------------- ## a b c d ## @end verbatim ## ## To run the demonstration code, type "@t{demo trapmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership trapezoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: trapmf.m ## Last-Modified: 13 Jun 2024 function y = trapmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("trapmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("trapmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('trapmf', params)) error ("trapmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the trapezoid on the domain x. a = params(1); b = params(2); c = params(3); d = params(4); b_minus_a = b - a; d_minus_c = d - c; y_val = @(x_val) max (0, min (min (1, (x_val - a) / b_minus_a), ... (d - x_val) / d_minus_c)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [-1 0 20 40]; %! y1 = trapmf(x, params); %! params = [20 40 60 80]; %! y2 = trapmf(x, params); %! params = [60 80 100 101]; %! y3 = trapmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'trapmf demo'); %! plot(x, y1, 'r;params = [-1 0 20 40];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [20 40 60 80];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [60 80 100 101];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [-1 0 2 4]; %! y1 = trapmf(x, params); %! assert(y1, [1.0 1.0 1.0 0.5 0 0 0 0 0 0 0]); %! params = [2 4 6 8]; %! y2 = trapmf(x, params); %! assert(y2, [0 0 0 0.5 1.0 1.0 1.0 0.5 0 0 0]); %! params = [6 8 10 11]; %! y3 = trapmf(x, params); %! assert(y3, [0 0 0 0 0 0 0 0.5 1.0 1.0 1.0]); ## Test input validation %!error %! trapmf() %!error %! trapmf(1) %!error %! trapmf(1, 2, 3) %!error %! trapmf([1 0], 2) %!error %! trapmf(1, 2) %!error %! trapmf(0:100, []) %!error %! trapmf(0:100, [2]) %!error %! trapmf(0:100, [2 3]) %!error %! trapmf(0:100, [90 80 30 20]) %!error %! trapmf(0:100, [30 80 20 20]) fuzzy-logic-toolkit-0.6.1/inst/trimf.m000066400000000000000000000111461466512601400177470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} trimf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} trimf (@var{[x1 x2 ... xn]}, @var{[a b c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c]}), ## return the corresponding @var{y} values for the triangular membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and parameters @var{a}, @var{b}, and @var{c} must be ## real numbers that satisfy @var{a} < @var{b} < @var{c}. None of the parameters ## @var{a}, @var{b}, and @var{c} are required to be in the domain @var{x}. The ## minimum and maximum values of the triangle are assumed to be 0 and 1. ## ## The parameters [@var{a} @var{b} @var{c}] correspond to the x values of the ## vertices of the triangle: ## ## @verbatim ## 1-| /\ ## | / \ ## | / \ ## | / \ ## 0----------------------- ## a b c ## @end verbatim ## ## To run the demonstration code, type "@t{demo trimf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf_demo, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership triangular ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: trimf.m ## Last-Modified: 13 Jun 2024 function y = trimf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("trimf requires 2 arguments\n"); elseif (!is_domain (x)) error ("trimf's first argument must be a valid domain\n"); elseif (!are_mf_params ('trimf', params)) error ("trimf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the triangle on the domain x. a = params(1); b = params(2); c = params(3); b_minus_a = b - a; c_minus_b = c - b; y_val = @(x_val) max (0, min (min (1, (x_val - a) / b_minus_a), ... (c - x_val)/c_minus_b)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [-1 0 50]; %! y1 = trimf(x, params); %! params = [0 50 100]; %! y2 = trimf(x, params); %! params = [50 100 101]; %! y3 = trimf(x, params); %! figure('NumberTitle', 'off', 'Name', 'trimf demo'); %! plot(x, y1, 'r;params = [-1 0 50];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0 50 100];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [50 100 101];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [0 2 4]; %! y1 = trimf(x, params); %! assert(y1, [0 0.5 1.0 0.5 0 0 0 0 0 0 0]); %! params = [2 4 6]; %! y2 = trimf(x, params); %! assert(y2, [0 0 0 0.5 1.0 0.5 0 0 0 0 0]); %! params = [6 8 10]; %! y3 = trimf(x, params); %! assert(y3, [0 0 0 0 0 0 0 0.5 1.0 0.5 0]); ## Test input validation %!error %! trimf() %!error %! trimf(1) %!error %! trimf(1, 2, 3) %!error %! trimf([1 0], 2) %!error %! trimf(1, 2) %!error %! trimf(0:100, []) %!error %! trimf(0:100, [2]) %!error %! trimf(0:100, [2 3]) %!error %! trimf(0:100, [90 80 30]) %!error %! trimf(0:100, [30 80 20]) fuzzy-logic-toolkit-0.6.1/inst/writefis.m000066400000000000000000000243551466512601400204700ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} writefis (@var{fis}) ## @deftypefnx {Function File} {} writefis (@var{fis}, @var{filename}) ## @deftypefnx {Function File} {} writefis (@var{fis}, @var{filename}, @var{dialog}) ## ## Save the specified FIS currently in the Octave workspace to a file ## named by the user. ## ## There are three forms of writefis: ## ## @multitable @columnfractions .20 .70 ## @headitem Number of Arguments @tab Action Taken ## @item 1 ## @tab Open a dialog GUI to help the user choose a directory and name ## for the output file. ## @item 2 ## @tab Do not open a dialog GUI. Save the FIS to a file in the ## current directory with the specified @var{filename}. If the ## specified @var{filename} does not end in '.fis', append '.fis' ## to the @var{filename}. ## @item 3 ## @tab Open a dialog GUI with the specified @var{filename} in the ## 'filename' textbox of the GUI. If the specified @var{filename} ## does not end in '.fis', append '.fis' to the @var{filename}. ## @end multitable ## @sp 1 ## The types/values of the arguments are expected to be: ## ## @multitable @columnfractions .20 .70 ## @headitem Argument @tab Expected Type or Value ## @item @var{fis} ## @tab an FIS structure satisfying is_fis (see private/is_fis.m) ## @item @var{filename} ## @tab a string; if the string does not already end with the extension ## ".fis", then ".fis" is added ## @item @var{dialog} ## @tab the string 'dialog' (case insensitive) ## @end multitable ## @sp 1 ## Note: ## The GUI dialog requires zenity to be installed on the system. ## ## Known error: ## When using the file dialog, if the user clicks "Cancel" instead of ## saving the file, an error message is generated. ## ## @seealso{readfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: writefis.m ## Last-Modified: 13 Jun 2024 function writefis (fis, filename = 'filename.fis', dialog = 'dummy') ## If writefis was not called with between 1 and 3 arguments, or if ## the argument values were of the wrong type, print an error message ## and halt. if (!(nargin >= 1 && nargin <= 3)) error ("writefis requires between 1 and 3 arguments\n"); elseif (!is_fis (fis)) error ("writefis's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && !is_string (filename)) error ("writefis's second argument must be a string\n"); elseif ((nargin == 3) && ... !(is_string (dialog) && strcmpi (dialog, 'dialog'))) error ("writefis's third argument must the string 'dialog'\n"); endif ## Open the output file. use_gui = (nargin != 2); fid = open_output_file (filename, use_gui); ## Write the [System], [Input], [Output], and [Rules] ## sections of the output file. write_system_section (fid, fis); write_input_sections (fid, fis); write_output_sections (fid, fis); write_rules_section (fid, fis); ## Close the output file. fclose (fid); endfunction ##---------------------------------------------------------------------- ## Function: open_output_file ## Purpose: Open the output file. Return the fid if successful. ## Otherwise, print an error message and halt. ##---------------------------------------------------------------------- function fid = open_output_file (filename, use_gui) ## If the filename is not empty, and if the last four characters of ## the filename are not '.fis', append '.fis' to the filename. fn_len = length (filename); if (((fn_len >= 4) && ... !strcmp(".fis",filename(fn_len-3:fn_len))) || ... ((fn_len > 0) && (fn_len < 4))) filename = [filename ".fis"]; endif ## If writefis was called with 1 or 3 arguments, use a dialog to ## choose an output filename. if (use_gui) system_command = sprintf ("zenity --file-selection --filename=%s \ --save --confirm-overwrite; \ echo $file", filename); [dialog_error, filename] = system (file=system_command); if (dialog_error) error ("error selecting file using dialog\n"); endif filename = strtrim (filename); endif ## Open output file. [fid, msg] = fopen (filename, "w"); if (fid == -1) if (use_gui) system ('zenity --error --text "Error opening output file."'); endif error ("error opening output file: %s\n", msg); endif endfunction ##---------------------------------------------------------------------- ## Function: write_system_section ## Purpose: Write [System] section of the output file. ##---------------------------------------------------------------------- function write_system_section (fid, fis) fprintf (fid, "[System]\n"); fprintf (fid, "Name='%s'\n", fis.name); fprintf (fid, "Type='%s'\n", fis.type); fprintf (fid, "Version=%.1f\n", fis.version); fprintf (fid, "NumInputs=%d\n", columns(fis.input)); fprintf (fid, "NumOutputs=%d\n", columns(fis.output)); fprintf (fid, "NumRules=%d\n", columns(fis.rule)); fprintf (fid, "AndMethod='%s'\n", fis.andMethod); fprintf (fid, "OrMethod='%s'\n", fis.orMethod); fprintf (fid, "ImpMethod='%s'\n", fis.impMethod); fprintf (fid, "AggMethod='%s'\n", fis.aggMethod); fprintf (fid, "DefuzzMethod='%s'\n", fis.defuzzMethod); endfunction ##---------------------------------------------------------------------- ## Function: write_input_sections ## Purpose: For each FIS input, write [Input] section to ## output file. ##---------------------------------------------------------------------- function write_input_sections (fid, fis) num_inputs = columns (fis.input); for i = 1 : num_inputs num_mfs = columns (fis.input(i).mf); fprintf (fid, "\n[Input%d]\n", i); fprintf (fid, "Name='%s'\n", fis.input(i).name); fprintf (fid, "Range=%s\n", ... strrep (mat2str (fis.input(i).range),","," ")); fprintf (fid, "NumMFs=%d\n", num_mfs); for j = 1 : num_mfs fprintf (fid, "MF%d='%s':'%s',%s\n", j, ... fis.input(i).mf(j).name, fis.input(i).mf(j).type, ... params2str (fis.input(i).mf(j).params)); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: write_output_sections ## Purpose: For each FIS output, write [Output] section to ## output file. ##---------------------------------------------------------------------- function write_output_sections (fid, fis) num_outputs = columns (fis.output); for i = 1 : num_outputs num_mfs = columns (fis.output(i).mf); fprintf (fid, "\n[Output%d]\n", i); fprintf (fid, "Name='%s'\n", fis.output(i).name); fprintf (fid, "Range=%s\n", ... strrep(mat2str(fis.output(i).range),","," ")); fprintf (fid, "NumMFs=%d\n", num_mfs); for j = 1 : num_mfs fprintf (fid, "MF%d='%s':'%s',%s\n", j, ... fis.output(i).mf(j).name, fis.output(i).mf(j).type, ... params2str (fis.output(i).mf(j).params)); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: write_rules_section ## Purpose: Write [Rules] section to output file. ##---------------------------------------------------------------------- function write_rules_section (fid, fis) num_inputs = columns (fis.input); num_outputs = columns (fis.output); num_rules = columns (fis.rule); fprintf (fid, "\n[Rules]\n"); for i = 1 : num_rules next_ant = fis.rule(i).antecedent; next_con = fis.rule(i).consequent; next_wt = fis.rule(i).weight; next_connect = fis.rule(i).connection; ## Print membership functions for the inputs. if (num_inputs > 0) if (is_int (next_ant(1))) fprintf (fid, "%d", next_ant(1)); else fprintf (fid, "%.2f", next_ant(1)); endif endif for j = 2 : num_inputs if (is_int (next_ant(j))) fprintf (fid, " %d", next_ant(j)); else fprintf (fid, " %.2f", next_ant(j)); endif endfor fprintf(fid, ", "); ## Print membership functions for the outputs. for j = 1 : num_outputs if (is_int (next_con(j))) fprintf (fid, "%d ", next_con(j)); else fprintf (fid, "%.2f ", next_con(j)); endif endfor ## Print the weight in parens. if (is_int (next_wt)) fprintf (fid, "(%d) : ", next_wt); else fprintf (fid, "(%.4f) : ", next_wt); endif ## Print the connection and a newline. fprintf (fid, "%d\n", next_connect); endfor endfunction ##---------------------------------------------------------------------- ## Function: params2str ## Purpose: Convert membership function parameters to string ## representation. ##---------------------------------------------------------------------- function str = params2str (params) if (length (params) < 2) str = ['[' num2str(params) ']']; else str = strrep (mat2str (params), ",", " "); endif endfunction %!shared fis %! fis = readfis ('sugeno_tip_calculator.fis'); ## Test input validation %!error %! writefis() %!error %! writefis(1) %!error %! writefis(fis, 2) %!error %! writefis(fis, 'temp.fis', 'abc') %!error %! writefis(1, 2, 3, 4) fuzzy-logic-toolkit-0.6.1/inst/xie_beni_index.m000066400000000000000000000121331466512601400215740ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vxb} =} xie_beni_index (@var{input_data}, @var{cluster_centers}, @var{soft_partition}) ## ## Return the Xie-Beni validity index for a given soft partition. ## ## The arguments to xie_beni_index are: ## @itemize @w ## @item ## @var{input_data}: a matrix of input data points; each row corresponds to one point ## @item ## @var{cluster_centers}: a matrix of cluster centers; each row corresponds to one point ## @item ## @var{soft_partition}: the membership degree of each input data point in each cluster ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vxb}: the Xie-Beni validity index for the given partition ## @end itemize ## ## To run demonstration code that uses this function, type "@t{demo fcm}" ## or "@t{demo gustafson_kessel}" (without the quotation marks) at the ## Octave prompt. ## ## For more information about the @var{input_data}, @var{cluster_centers}, ## and @var{soft_partition} matrices, please see the documentation for function ## fcm. ## ## @seealso{fcm, gustafson_kessel, partition_coeff, partition_entropy} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy xie beni cluster validity ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: xie_beni_index.m ## Last-Modified: 13 Jun 2024 function vxb = xie_beni_index (input_data, cluster_centers, ... soft_partition) ## If xie_beni_index was called with an incorrect number of arguments, ## or the argument does not have the correct type, print an error ## message and halt. if (nargin != 3) error ("xie_beni_index requires 3 arguments\n"); elseif (!is_real_matrix (input_data)) error ("xie_beni_index's first argument must be matrix of reals\n"); elseif (!(is_real_matrix (cluster_centers) && (columns (cluster_centers) == columns (input_data)))) error ("xie_beni_index's 2nd arg must be matrix of reals with same #cols as input_data\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("xie_beni_index's 3rd arg must be a matrix of reals 0.0-1.0\n"); endif ## Compute and return the Xie-Beni index. vxb = xie_beni_private (input_data, cluster_centers, soft_partition); endfunction ##---------------------------------------------------------------------- ## Function: xie_beni_private ## Purpose: Return the Xie-Beni index for the given soft partition. ## Note: The following is an implementation of Equations 13.11, ## 13.12, and 13.13 in Fuzzy Logic: Intelligence, Control and ## Information, by J. Yen and R. Langari, Prentice Hall, 1999, ## page 384 (International Edition). ##---------------------------------------------------------------------- function vxb = xie_beni_private (X, V, Mu) sqr_dist = square_distance_matrix (X, V); sum_sigma = sum (sum (Mu .* sqr_dist)); n = rows (X); d_sqr_min = min_sqr_dist_between_centers (V); vxb = sum_sigma / (n * d_sqr_min); endfunction ##---------------------------------------------------------------------- ## Function: min_sqr_dist_between_centers ## Purpose: Return the square of the minimum distance between ## cluster centers. ##---------------------------------------------------------------------- function d_sqr_min = min_sqr_dist_between_centers (V) k = rows (V); d_sqr_matrix = NaN(k, k); for i = 1 : (k - 1) Vi = V(i, :); for j = (i + 1) : k Vi_to_Vj = V(j, :) - Vi; d_sqr_matrix(i, j) = sum (Vi_to_Vj .* Vi_to_Vj); endfor endfor d_sqr_min = min (min (d_sqr_matrix)); endfunction ## Test input validation %!error %! xie_beni_index() %!error %! xie_beni_index(1) %!error %! xie_beni_index(1, 2) %!error %! xie_beni_index(1, 2, 3, 4) %!error %! xie_beni_index(1j, 2, 3) %!error %! xie_beni_index(1, [2 2], 3) %!error %! xie_beni_index([1 1], [2 2], 3j) fuzzy-logic-toolkit-0.6.1/inst/zmf.m000066400000000000000000000132231466512601400174200ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} zmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} zmf (@var{[x1 x2 ... xn]}, @var{[a b]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b]}), ## return the corresponding @var{y} values for the Z-shaped membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{b} must be real numbers, with ## @var{a} < @var{b}. This membership function satisfies: ## ## @verbatim ## 1 if x <= a ## f(x) = 1 - 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 0 if x >= b ## @end verbatim ## ## which always returns values in the range [0, 1]. ## ## The parameters a and b specify: ## ## @verbatim ## a == the rightmost point at which f(x) = 1 ## b == the leftmost point at which f(x) = 0 ## @end verbatim ## ## At the midpoint of the segment [a, b], the function value is 0.5: ## ## @verbatim ## f((a + b)/2) = 0.5 ## @end verbatim ## ## To run the demonstration code, type "@t{demo zmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership z-shaped ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: zmf.m ## Last-Modified: 13 Jun 2024 function y = zmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("zmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("zmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('zmf', params)) error ("zmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); a_b_ave = (a + b) / 2; b_minus_a = b - a; y_val = @(x_val) zmf_val (x_val, a, b, a_b_ave, b_minus_a); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y_val = zmf_val (x_val, a, b, a_b_ave, b_minus_a) ## ## zmf_val returns one value of the Z-shaped membership function, which ## satisfies: ## 1 if x <= a ## f(x) = 1 - 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 0 if x >= b ## ## zmf_val is a private function, called only by zmf. Because zmf_val ## is not intended for general use -- and because the parameters a and b ## are checked for errors in the function zmf (defined above), the ## parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = zmf_val (x_val, a, b, a_b_ave, b_minus_a) ## Calculate and return a single y value of the Z-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 1; elseif (x_val <= a_b_ave) y_val = 1 - 2 * ((x_val - a) / b_minus_a)^2; elseif (x_val < b) y_val = 2 * ((x_val - b) / b_minus_a)^2; else y_val = 0; endif endfunction %!demo %! x = 0:100; %! params = [40 60]; %! y1 = zmf(x, params); %! params = [25 75]; %! y2 = zmf(x, params); %! params = [10 90]; %! y3 = zmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'zmf demo'); %! plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 75]; %! y = [1 1 1 0.9800 0.8200 0.5000 0.1800 0.020000 0 0 0]; %! z = zmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error zmf() %!error zmf(1) %!error zmf(1, 2, 3) %!error zmf([1 0], 2) %!error zmf(1, 2) %!error zmf(0:100, []) %!error zmf(0:100, [30]) %!error zmf(0:100, [90 80 30]) %!error zmf(0:100, 'abc') %!error zmf(0:100, '')