pax_global_header00006660000000000000000000000064147563210450014521gustar00rootroot0000000000000052 comment=8b0e5d88c8da0062025f4dd990ce35bb7a03553f ticketbooth-1.1.1/000077500000000000000000000000001475632104500140405ustar00rootroot00000000000000ticketbooth-1.1.1/.github/000077500000000000000000000000001475632104500154005ustar00rootroot00000000000000ticketbooth-1.1.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001475632104500175635ustar00rootroot00000000000000ticketbooth-1.1.1/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000015761475632104500222660ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the issue** A clear and concise description of what the problem is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Operating system (please complete the following information):** - Distro: - Version: - Desktop Environment: - Xorg/Wayland: **Additional context** - [ ] I am aware that this application uses content from third parties and I am not reporting issues about their data (wrong or missing data and/or images). If the latter is the case, please report directly to them. Add any other context about the problem here. ticketbooth-1.1.1/.github/workflows/000077500000000000000000000000001475632104500174355ustar00rootroot00000000000000ticketbooth-1.1.1/.github/workflows/build-x86.yaml000066400000000000000000000010121475632104500220350ustar00rootroot00000000000000on: push: branches: [main] pull_request: name: Build jobs: flatpak: name: "Build Flatpak" runs-on: ubuntu-latest container: image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-47 options: --privileged steps: - uses: actions/checkout@v4 - uses: flathub-infra/flatpak-github-actions/flatpak-builder@master with: bundle: ticketbooth-devel.flatpak manifest-path: me.iepure.Ticketbooth.Devel.json cache-key: flatpak-builder-${{ github.sha }} ticketbooth-1.1.1/.gitignore000066400000000000000000000005511475632104500160310ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later # IDE folders .flatpak/ .flatpak-builder/ .vscode/ # Build direcctories builddir/ _build/ # Configs .pre-commit-config.yaml .mypy_cache/ # Env files .env # Flatpak bundles me.iepure.Ticketbooth.flatpak me.iepure.Ticketbooth.Devel.flatpak /subprojects/blueprint-compiler ticketbooth-1.1.1/CONTRIBUTING.md000066400000000000000000000031651475632104500162760ustar00rootroot00000000000000# Contributing Ticket Booth is a Linux app built with Python using the GTK4 toolkit and libadwaita. The only officially supported packaging format is Flatpak. ## Code When contributing to the source code, use the same style and conventions present in the files already in the repo. \ All contributions are and will always be welcome.\ If you have an idea, feel free to create an issue, and let's discuss it. You can also fork the repo, make your changes, and submit a pull request to change the code yourself. ## Translations This project is translated via [Weblate](https://hosted.weblate.org/engage/ticket-booth/) (preferred). Alternatively, you can translate manually by doing the following: 1. Clone the repository. 2. If it isn't already there, add your language to `/po/LINGUAS`. 3. Create a new translation from the `/po/ticketbooth.pot` file with a translation editor such as Poedit. 4. Save the file as `[YOUR LANGUAGE CODE].po` to `/po/`. 5. Create a pull request with your translations. ## Building ### Gnome Builder The quickest and easiest way 1. Install GNOME Builder. 2. Click "Clone Repository" with https://github.com/aleiepure/ticketbooth.git as the URL. 3. Click on the build button (hammer) at the top. ### Flatpak builder and other IDEs ```shell git clone https://github.com/aleiepure/ticketbooth flatpak-builder --repo=/path/to/repo/dir --force-clean --user /path/to/build/dir me.iepure.Ticketbooth.Devel.json flatpak remote-add --user ticketbooth ticketbooth --no-gpg-verify flatpak install --user ticketbooth me.iepure.Ticketbooth.Devel ``` Then run with ```shell flatpak run --user me.iepure.Ticketbooth.Devel ``` ticketbooth-1.1.1/LICENSES/000077500000000000000000000000001475632104500152455ustar00rootroot00000000000000ticketbooth-1.1.1/LICENSES/CC0-1.0.txt000066400000000000000000000156101475632104500166520ustar00rootroot00000000000000Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ticketbooth-1.1.1/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001035621475632104500204600ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 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 . ticketbooth-1.1.1/LICENSES/LGPL-3.0-only.txt000066400000000000000000001221621475632104500200250ustar00rootroot00000000000000GNU LESSER 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. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 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 . ticketbooth-1.1.1/README.md000066400000000000000000000052501475632104500153210ustar00rootroot00000000000000

Ticket Booth Icon
Ticket Booth

Keep track of your favorite shows

## Features Ticket Booth allows you to build your watchlist of movies and TV Shows, keep track of watched titles, and find information about the latest releases. Ticket Booth does not allow you to watch or download content. This app uses the TMDB API but is not endorsed or certified by TMDB. ## Install Download on Flathub
Builds from the main branch are available as artifacts on the [Actions page](https://github.com/aleiepure/ticketbooth/actions).\ To build from source see [Building](./CONTRIBUTING.md#building). ## Contribute This project is translated via [Weblate](https://hosted.weblate.org/engage/ticket-booth/). \ Translation status See [Contributing](./CONTRIBUTING.md) to learn more. ## License Copyright (C) 2023-2025 Alessandro Iepure\ This application comes with absolutely no warranty. See the GNU General Public License, version 3 or later for details. A [copy of the license](./LICENSES/GPL-3.0-or-later.txt) can be found in the [LICENSES/](./LICENSES/) folder. Most symbolic icons are copyright of the GNOME Project.\ The libraries used are the copyright of the respective copyright holders. ticketbooth-1.1.1/data/000077500000000000000000000000001475632104500147515ustar00rootroot00000000000000ticketbooth-1.1.1/data/appstream/000077500000000000000000000000001475632104500167455ustar00rootroot00000000000000ticketbooth-1.1.1/data/appstream/1.png000066400000000000000000020022521475632104500176160ustar00rootroot00000000000000PNG  IHDR> sBIT|dtEXtSoftwaregnome-screenshot>.tEXtCreation TimeThu 21 Sep 2023 04:01:32 PM CEST Ù IDATxyս6眪vadQ( &hz7C4*qɍQnDM$h@5IPpa(6Q݀s?NUM6=<_?է{S hNn% ,j뉈10*F:""""""ᐯ76jo!H{{DDDDDDDTv P=G"""""""j6値-7"""""""j:m2 jkAI[{?DDDDDDDԲL VBb|&""""""֠blS9C[X_DDDDDDDmIs3:j͡FS]4򉈈h4m`*àt4Ee,je0@^V_Y)j4"gs651:gsvk FCX6uGDDDDDD&tk0PQAdԷ}u j]Lj_.^ hmTFCB-4 DDDDDDD2t4_TT!GCm9>#""""""P(xm7T41ܨoT1b\DDDDDDDmI]BB ێfWlE}p'״|kzb[WDDDDDDDdgr㙕EѪW!P]^ :E~kĉ8FY5 @"""""""jV{=۰?^{VU0Aܗ ru%>E5gwti@Vh {}oRIIy}CDDDDDDDT:gΜ?8¢?\WKVl!P}s@EvU l֯_Gy{ n>cHһE`6B鹴P+ 2à{Z]v=`";eVe>Y ,!Ps xܔaS`(:Mf]<@DDDDDDDm_޽Yvyʐ{|B^KYt³4t_3C(_ꨯ~;!""""""V۹s.YcTW>v\=Ӝj\ oW0߃y2G}E @O>mQ{SYYD"u[)Tm#BDDDEo]tL0CgvKXe"R)Wrge>{4;jy>c:tP+.:?ts{w _O Y25$i45&PC>zW /h$`ӆt3H@e2 4qy^1@5ܚ3S:KUh̴-׀L5GDy[F*B*BEE8# *' W.PHZ Tuʷi-^~EDDDDDDD@UUiEY ֪bj2XtY=3?~<Ə_׍6/*L2SNm:@QDEEEC++w6CBD?~[fr2n""w / "<7|3^{5:t[GDDr0ARUUUC6Cfxd^ŴtTZdr)8SZ⥉ڳg.rl۶ 6oKسg(:{K/Ck_Xl[ovڅ]vt3yנ Ly<_,"i1šbEZ'|_u+[lߎ#Gf=;ȑ#q׹͙*++1i$?/+K/Ǯ]h"c̙޽{s95kwj*_r կ=o.\+**`<СC <_|1FUZQQ'~ik9DD[k5rKƨʵN:5dMEg\&OX&""j5ɼC ~:-x< xQݚ\K.ŧ~6W^سg-Zq0x`{ܹ3Ǝ[crꩧ۰av܉#F[nK.X~=-[}GXf )pcժU޽;N8ܹo.z <87;pj8YftsZLpƖH$amZk2Ӹ'""*ZAuOq:U &4x7q'VX[ֻH)q62[{@ѳO<ktn O=cĈ;wbƌX|9\ׅmݻW^yJ)7.mo6VZO>3g΄fשA!sέڲT*SbÆ 8c> @Ǐqgҥ O?ߎիWc5.+Q3+rzd\a C!""*ZAOqk%mX`AZtתLW)GyK.޽{ѿ|; TL7W9s&-ZiӦo8xGΝ|+@^˗/C=;v  723o</~ zΚ5k??\p/S>}0l0lذ_hLJ _ee%?ॗ^q'kA>}cǎŘ1cЧOG>}?cǎE, w -gٲe3goߎ:`6m:w\ADTl1^u/[I-*JGunw !N-[ Zv-4gN"aQ[U(w^I[z5֭[Xv-֭[ &d<,'͛7[nڵkgq`ժUs/_.]UM'|C )UV[oR wm݆ݻw㬳©Vʗe۷V|+()A/ H&X|9  =X`8q"fΜUvM7СCqiW__T8SO=ٳgGuTvմ;wbԩصk;<|_Dii) "js?pwAx{T3m4۶m 7܀n[lA^ eXh:Bj{J84@7xb,XӦM… ѣG3>`8޽{Gqf̘۶xb7c=?_1k,\^z)n݊{s΁甶lق+W⤓N~32hٲeعs'vu1|p\za%qa̙x1eXUUUYU@P^^_owyǂ 0n8\s5طo^y|ŝw |~K.￟vK4zwj\uq'+ڤ'|<[1tiG1 u0=zqc۶m̶; +l*]]i1f,YO?4VZ.,`{۶mPJO;۷otÇիGa+vx70~8#<:u²epcԨQ A]v؁^z @vWȑ#?bҥXd 82^p=r>ht=/SO_]veHRë?꫸;1ނTmaweXj"ST[TW-2Ht44aVSV ⷿ-:v숳: J ZG LBvO?oVZ˗Æ z͠[׈#pUW=֫W/8O<^~eXl~ߴҶ`ܸqذa-[e˖aРA4hP=z4F>'Oƛo>0j(\wuiݻwBy[N,C= 3tM<^z)9m_1 !j裏0uTl߾=>ݱcNӧW̷hb-MSW>&EDDmZ0׿u?>-:o]z*y`-_<PqʕZUvim>,~m~9w )%K.8[; &Mܹs1a([oQOߟ (JaÆ YS5p@H)ok׮0`@x-6ٳ'~w( Ɩ-[pUWkAEE}:Ocǎ馛&Ҫr^ TEQҔW \~򗿜b9r$VZɓ'cȐ!xW8ou #Fʕ+cƌɹ=z3SO=)S`̘1ؿ?***ӟ۶mw܁O<eeeaץV>}cƍ kCϞ=ѿTTT`ӦM8R8sO{`޽mVZΖ-[p-`ȑС.] 2dHQ޽;~aؼy3SӟS qj͛1x`L6->}:n&lٲ}81"""*M9&PGѣGx㍸|r\s &M~wg`ʕ8k+@Ϟ=tR<۷/ 5\Ensϡ+0r:bѡC:t~a8D!~a/} 7nĀjGq.Xo6,q . Z /qcذaZ`R)t׿p! \s F(낈u 3f^ !O^ ʦTLCqTTT}|YӺuZ6լ)SBU2%29G瑑 Vd K2|V8&Q۰o߾&?^x!ڵ+=˼TX@>n6m&ohK!Qԩ6ĶmtԩADDDԢwKDDeYڵ+*++H$8FP+e68+F M`w0"""""""v!Q;`DDDDDDDD0""""""""j @DDDDDDDDC """""""v!Q;`DDDDDDDD0""""""""j @DDDDDDDDC """""""v!Q;`DDDDDDDD0""""""""j @DDDDDDDD j/^i͛:ў̙3Oò,wy4iRCNDDDDDDC$&N;wM}/s^{5L2%m`HzzVӈ a%P-3'|2^pځgUmܸVJ6b| _h6ѣGKvZL81mڿ_re4nݺi ~;>ɓ'7ʲCyyyִ^z5x}Q1w T8m…8q":vNˬB$jN9唬i*x㍜߳gmۆ6mڄʂSׯǖ-[xQ\&LKbCsmr[z!"""""kёG;/mZP tҴy/aذaP^^AM۹sg?B ({88餓Ҷ[n7of͚ٳgcܹ(++kfQ+siӢc=CiB+l66\]ݹvޝ(ӊ+g@'pX,|38aYVK7Z)v]bҤIi#<¢E7>}]ݻ`Z wĠApYg嬆[Oc^|O~,[,͋/g^nøq裏'Ď;ЩS's{iWL/~j 8p:uB.]0tP|sYgՠBDDDDDDC:7ömi .D"Nԩ.Ҝ<_0gΜp֭[uaѢE?~<暬ƴfϥ@ewg:vaÆa5jTK =j(s99~9s֞ 0:hX'mݻw7M\ve 1f?>VBDDDDDDmW_^{ T*yE?U!0m4;J)<5kVs{0 i*Ǐȑ#qAR..n:M BSN9?k֬AEEE }"?;wnx߾}ؿ?;0|`E/>zhxYmN'NmPJa׮]رcʈ>|8~󟣤sϥ=b5..vڕv;v,u]/DDDDDDv0cĉ?~: ǏҺJ2cر)%.R<رcG8;ȭO7a\s5uz~Y& >A-yg?Z͛ /`8B~iּ[naVnVEI'.(m}-믿>Bݻwשm}xWofxE޽{㤓N׾FZvk\9{nVJO>i2!6-rXSk[M2]zx4Vֽ{w}iϞ=;} 6,kE]Yfaٲeغuk@'dsy9r cM2ݺuخ]W\qEDDDDDD>1j)Wm/ҥKV79jnݺ $8oʰ(Sf׭۷U0xi#s> ~f/K/8;͛77ʲGG}?я0zc%yufn@Ȳ, 2$mڪU~~ꩧiӦyWʼ`.Q駟bx|Yݿ2De ]QQرc1uTwy?_:tH;dUcYM[n| fCDH&m^x!ǒ%K0yy7n6녈 ƌ 6M[qB?0X,K.$Gd-sΜ93gN&8+}e ?xt̚s8㲦Gg}%%%СCxL 2k֬ ۷&Mȑ#ѷo_|_| _H I{1 4D7o_|;_6z5mƌ8oV׿;Æ Ð!CУG$ Z*khڮ""""""j;X ̾oϚGe@pWUvi9/%Rr]% 0tȲRFս,r*L'Uƍ˚qF̟?i\r 9昬y݋+V୷tZnm <8 0k֬y.֬Y={6͛4+z!"""""!P3R vԩ~`ĉi;0\q9B .UIc>Fs̤|>uԼ,ٶ:5 ^xavڅw}7\/˼!U`Æ عsgVnp|lٲeH$bŊusO녈vk{K/g֭[ctQG &{9_~x衇i&H)1|p|[I'O>$m4x`cϞ=i3U4<`-Xsug3 .TVV R?я .Ķme1 ӧf̘W^yK,{n"?o7"y_GUލ~ov#"""""""j @DDDDDDDDC """""""v!Q;`DDDDDDDD0""""""""j @DDDDDDDDC """""""v!Q;`DDDDDDDD0""""""""j @DDDDDDDDC """""""v!Q;`DDDDDDDD0""""""""jn@{-ۓK압XmڵZ+@i lH˂URChhϓM`owSYx-tR@ a Z"y.?s|ǁmHRYUT}eAJ ¶F_#rߛ\ߡ\ёsTZ@ǤRu硪 U)( J&8.{4B@()\xpPauA'Ż#%l- g 8[(y\BHt*w2 )CΥy? >|>A*YU`MUO*񷇍Z-hW+mTӚ Z {'V]бkt%ejg+ v`ǟB)A8Ԇlˁ)(c+[H@:}X,T"*h׃JBKxڅ츙4 /%-"RR,7 :/BPf_|R?+  - -@:RAXܤRMJ ذؖ74/+RC,L ihRH[L,H xl~{=ǁR T*-?plN%TB8HXq2e8mAJ憄@a"9DCE?dZN.*ʪ$ UX,mw*i)/kjó@e(q@(8U)%bN RPZ!P'.ǘa}ѳSIٖTV=SCu'C َ6`cz`&:K5o v/>0hӶ>A<@@XgB܎CiJ`J)J:S aVd0U\IaYykn1;Tʅ-(! ! ]hx)xڄ(څ2'!(Z+h令 ߿ y$ ,:3<)$)?j,?&L$*L)/Rb|TgpwٜꊃiZ5.?T!ma2gJ<?;cB )mHˆܔ9ڃB!PSM(}:K8%`Yq T9F`F-OiWd(H+˩j Î`x*=@~pA VS&fZ]ڇ@fO"%\3|z?n҂e9BS)n{P  ̸q%sۚ{u,]dxϢ&0\C,@* p8+2׶ma(U/ p]7 (W\~w!|~@8KzHWd@PYU Okh-HkT*s}H[!kh!*KQt'bBCUUaldžUtE7+RJ(}N)Ϲڊ=;cofL}˹cX!P-̜ޜ"1-+jG}zxor҂)!!aAk^q.4$RZBB԰bDL}b<7Ԑ!X&`‚p S3d̜H%RЮ4J[\CYRW bRj(m9JC- `EXR[yKi ,dž$X D  aNf6)c6IRS \eKhσ[AUMAAi(%.JJǀZ)y)hObeC+[eB a֕%2F\zn!Q}dxmf1j rwMPH([WR/pOo߀oL]+W)aI'܁PWbnDBݥ=O'-=C]^q,5]g(tV=&L`y4A,m0gyoyKpJP ,\8Pg*`ۀ́eҒ̪b^%0g۬vx& ZFB)ЩK/Xpols Z hp9I<O )! "C*2'&$PRC*R毶U!- $iS# ,CАq;2I9ula\lH8mȘ.gWH}4B]S5nhNOTJ݅e>ss¶XPڜ؃'`2SH{eJV* A+ Y:KǐJ& ! t ZW1T@)R(Syx3~ j`߸*n$PDChp:eyqL&0ҦbeZ]ls7ڜPSZls+l.v6ZpizP/?8CUrzxȚ^av.tQ㓂 :JiBaTKAxf6cRusq/BuoW_\T*X,qL& ,ɯJ\AA*ХsGYζmGv_p#ylL m2|ݽjZN4u^I<Tof`Yq)QQY@J6 JPyha /* -Nha.,_ZiXҞp4҂V K~F %ٹmO`] -7(攫-8AD!I8q?0}MEHeIO@Ixe $( R -`9P~Y+1YvKAAxڄ؞gGN H2K0c(eBH ay=J?ᔄ65FЦ-q.A)CUEX1*-$6W=r,,S\hHBh4pQݵ;^f5lXpTt6ұ`1 )%M剀, 2ݔLcli_Bv!Utق4* iJ,a,ټ*.oX%4\ `= . Um,W+A -'LEbfZ²DZ%y h(S]N; IDATJ iyC)n=e!)dVV- U.lǁv=` 4&!G4㷽D)29`q猜!\p6HC@2m^X h1',OD %n"s6² `#& Rg.X6`9V~,H!?ӅKH3)2<֑%f ǒ~sxVS32v%'ɴ.%dAD~q|߽b+/xRpǣЕ't-=zQRBM sBs]S yR{4WIqhj ^5ƷhӦ-xѿ&썅Q.X"}ij ֢;R·hR^Fg%ҫU:_YE4O:Y¯]o>>8t*rR, ]6Jdǂ@`o@~?-N;Og5b*=HgU4Y[.@u.8ٶzb=s'G$Fܬa>;%4cޓl\@rG#'|p7?}_.<K{|Q 8s>g/x=)׿/Kdhw&DՂ_xy!TpQC]G2Kqi<%V>ec99W!Tpݿox" Fķc?s_7ƵM}}~M.% K߻q4լ/]e&޹"y%g&sMh6{UU1f8l^zO>/~w9?¹em8KWxp.[ܸ}]u>]ykp4j^z%{=ׇo=vvwu9\H7ahs|o61r`t16h5?Ư~5r :RגcTYB-?_ _E|x Oc\@O0ӹ'*SƋLЪ*8E2V)%83q[8g~b}hOZ|2yNH3U t?s=yz!K3Ie_EeNcc՟5Gыj^4H,AF}A1 {9\p! x2ɕ '珿T@~ZzUC؉YlTԕ^XkQ}}ib(G.)u7cMt6!e|/8Fir p}caK-~e^Vcy~{KO͎Y߉0q^hPٕiL9ڻoZ΀ajqC%2)[|pH|vT dUrDKGE(BvKㅙeyE\dxHb{]̕]?ܳ\r+;<ؿK^v_z}sWv8".?z4g7oǟs?xܼyt =m>??>?g\zlx`mxgy㵗#m!Լ:4nػ̕G{|%.oPZg^6/<{KWem׿=2vHFC4E͈CSU봳B 1I&Rn98ŀzI !'T8 s4+bh XrK꫸`\,Q8+z6E|yq=91U Y$8WZp1O!T2h< βFbib==6b(i8xi) q"Sg>2X\/R,jV>6L1 p#Bg]"X4"٪zyOs(*'ؤ8pG kr^E|5@|E:rlq9-@ 6kl]r W7nqޝRu5Nwu6^+h,1@N42ֆWIWNNzYlrmʄ@R >#5([}r=,~?e ?ų Viʶ}Srw b~ܶqrz|F9wR|Y2ˏ~MT_x&ft+hsklP2A*z-U$G`/oAڎPzg-YK1"nX}2N)VLs[L}._Wy͍->6m8h;sW<CBy5>s7?cP5||l^boo|!]OfP7ȧw Xk8r=hp.&~})W\߾E=1 o/]1؁ٌp*"S.f\0!/͔咩Pl ٨sO?/"_ RWl4O]81R`8LsF\ i0]B17w eA}6=0@^LxXq^9YY 8EF?*x[|t$*yQM'~E߼C;s߾i"qxhI#?&gO!$a:A޸@oӵ?/`Ȼ~Jʉ8j[w~.m"s>GGG8୏io|v~|JCaifyvN o 8g98%҅^9G*2^GZM!كƖ.hth5eev7o?ǢLh&cR;ZIXH`\4FqjeH1V}L#{"ӕJNYx_N̊QޡҶ٧lE9Yۖ.]1lOL=j?Z²z=5 9I )[tC3XX: $H#N^D `ig{o&m~>UUѶ-П.g>RE6ֆUI{RYW-c~N|rR6Yy2?Wϼ>`Q%K4Mfشl_C~`l*E`UhD<1)y2>G7ȁ"왈 $GEZ̉$[W\]kSpGMO8~^E<*( 4rB]ӣ7ҌFmR_U 6G;H827՗2c<sk;sGB%PkKmh#̽ɑWyVL~YTr* wh:H+hf" -㤐l I&l`HWח>f#ڱ,;ˤ 873'1ٝCUTME`,⢐p<˙ġ CL۵ԃkd/]: y3[;i!ՀKߺdpxqtNwьD3ۼha^R=QX݌ÏG""eD`,WGP T-_ EDM |a֓!z`*vΗ. cX s}+ٓfL6*8G ]('HN-Mg]ӲOdپl6c00 h\ʰ<#T]-a+L;l6hj4 旜޳8* s{,%}_n{  ','m:cL!%ꜵzx=g^ydUD'-kiU FyDsKn3h.V1KT]w;UTB[q]`#b<"i&uԐ.vq.ઊP @M:Xg{$##ؤ2bvm9wBKӫ:4W.W.:t}k@j.`fb bпsl-LZ}$4b:ZK@Lb&!ޑdB= Gvq .#19%b|sNidu=Iаq{@;?X` ۥjfGv\ݼFMd~<'^]<9u8 X\`- ы:;Rly:r'Z53iT,ƋвRUD3[r'HP HN(0vD$wrsh`=@]Ux9cm;\PEWd29YD*Ԓq`Lo.th֧z9/牞҃/;jǰj-.O|{&̪yH|~QTڃM5(:=m`˚\+edO0{8}/m[o[֐J[Fۼ5/=7Mqͪft /u~!utưqtԒ*ƱŌ}yZpqi4qeX3i\"*-YY){DӹlYٗG1Yń\ݓG}'[H uj9^p2֎l³WRrGWl_A+lq ŗlLt2I(jWF֌/k˿L @fޱ}Azj,-˂KZʸcm}LT 䩫)hpbzo9Q).X^S/<@Atkp~ /5)S7ݿ`?'h&#vvLI;[B=͹ G pxxEX(J1i1B+JΘk{{v=m]jiTPEec:O,dÏ6|6a3]PzْQsF# d(EQq>3Pj66Ʉ{od 4`868bO-g@B,&ZXCŁzDR܇zE2H'Me`A<%9\ 1d89ޘJ9+@M]4^E}dULo9?W=muݣ5&J166 Us88~nOrNbH)=9vW{.N~?@m?ȽVC$fZb:2N^Zԡ~6> Hbz8ʥK .U6! x6G7a6lՁkj GRlq^3PZA0qtsZ|^sV;N0u|hdI'ɓ[W)esTaӖP;N.Phso޾p ՠ 3!x=j_Ѧ9)2:0>c.wQ^ oe_l>sZL~Kk]v,ӏy.f5u=0NM߇F|1+V /$ͅE}yLf"j p4o:+F yoe3y1{y_3MPV{Y<=kpe;&Ahq Rr է"=&<Oi!Ю=c ph.'$8 E5Zgf ) 2[m[2NyZ݄+ UW!5;=[ecs&grts& po9grdzϿg[}KaCJ yUFM]ɟ+Ӭ€ )|;w~o~O,4tˠ]K$.ZSĉEbm:3Ǩ`2f09j&Ŏqfrx M81QwQ>}iF&l~q*޹n.k2.*6qeYrNnp{ɎU|r ,L)zl]ڶuk+݈ʍBm&E5\.x_MV8$c]-LX{U-ь8ʼn7fᐁ [-p͎#9tJf O5 hJk&KkF.CbrR:Ն8?E|MWqy]|ΝpvFV0W,g@=\c6h&.qW{K 7iq9 pK_1cc},°"  NO48p/gbfAXz  ʤ,ݠj\ y֙vFrTM|ZtxXMz`ĪDIʘCo*΢ob-]Gdꓲ * "q 48Q!(YR*#]xb|VkbiholK 9A4, W8!xOψ]q|p ]K-UӛR[1u1>mOڏ(QhX=Yy;Jni̠.?ݙbɕoڋ%p}_.[;T!.4#c?<֍sf)]h)e4f֚!| }4\bc p h>U\ V}]~_߼YQ#\$J\,8u"ӣ yʑ]/<LFۗq"P@,st}&@du>b-gpUVQ=vN,WCV ?*WhŰ\oPˤLJ!e\'%K&r1a6X  8$9đC?٘q5\Q98h?l lJMbdzFta * r|C[xNl>ާ4ۻp4&ri=h(cgHB⠴ + YQj  T|CN[rYwllU9k[2zII٤Vw=h26PVshnI1ZRmnUNn1Oڀ$$U&\'5:?5DɌ`GYPbec6m!7ac>+WMpD{3x.B6J, gǎx-C]QFl^/^+gu B=y8g3f7o2vF' qg%iad(Rc*@ f9pC뀴lu*hHCd!Dh6عvtgMR*= Wg@sf "=2>))jb ӳ6iWК5Ng֖AK L7-v! fOcZZ:{ PK.2]hDs«C-W7v]ALe;"uSr;E5]]+<ɶ8_t|ia= >VJYhUU0"fKE$GFkUfHb::epyQl{JǀSC ]VduZ+U8mATȀTl Y}^ÿo2\@ph8<<"͠n"m45@֞W_\jiBN;}䭷>nh.o x=FCkkLfM  M9=al6Ug{W 5LJn]E|y+E,#x4lYڑʤ o̎fLu ܽu+3 {4Rԕ|@ȥX%[DrD39ő'׎z]x˭LJij,U L +br!I!όL5pEg:~Fõ5Gp_+6<ȽM0mg}\]~uWa}yX__cP5\*//sΙdx`4DC H=\X,J9Q&[{=_X:}/n8_f,=Ox?Nlj(b^ۭ#02`R؇QIhL& k| R DM-U!PKUR'˓%1{T0ĥu6ֲ63KB6t7o;] =M]"ec-nPF TɈZq5m[nh-vDC4#+BxWzsB[^,VՅ-nyVqaJh]"wY![5UomؽJf|r.Np1W_έS~/>f6sdkqAJ+# qITrJ& E8ŀ u C|En}nޅiSPbmQR ] P75k8D6ͦRe<%qтN{335VE"R\K/6%#XGΡ9\Abq*ռ҆V/|FΑ!1AdWhT#|\}5\ڿ/&o_fWJuBN9uFk.9)gc%Vɇ.cvdB(7 cxTUàRמ=>{W~H3g0EvNj;h8s2q3$#^S'66.M#{w!{pKev&Kq`wT_ٟkg5\h3F;W~Rd21E] q7n )l8}}RupuLoj,ثcG>~N8ߩSb7]VCldl~<@q*@,+$sj@!qTE.س<}^ZVž bkr:4C">#E^zy 1ޤ:X6&66[K^Wѥ3x8y!HB5"dׅ^%t(& 5]v <@;W;$ ;L;o;HvcN覉}pz8"Wv8M8T༐Q GHCÑQw*^op;d&Ɍv`vDplv.=4|2bfDv31|tl-6*Y[//.@/1_jyrRy69|t"4+k 2F Ah:mqm* 4@;-N>"2'.H^ؼK7 H|r+S^zPR&w s_o%ѱc,͡Ai ejx*"Q99p):$"(uڗ1"9S{ YVVH`ONl~swAQ.EOqQ 3eFk4=ccSk,Ɵ%[׮[;aؿ}w~MU·s{%$x2O`J{xPv>R -E•8&X[jsha*N>ا]T@BU9snϜ{ IDAT!d@PS*HdP!͈nh;(gOQcqs'Ô9:>_dO=sH yxD 8=,=s/ @'δו߬YIF묷ӿʥ,#Lqj+J(%$J,{ K\[W1X3{Ӎg̎ƌMft]"%%f|0CvㇽD#$HFčsOwYk<"8(#^˿ew=Qӫ&+eRێ;qA'1e\( KgS;lU^D&Nc ɖf[[Mm:~O]LOTBH6vzr%f[tm6l1@99-(%F![VĢƷMbi bL];ħm~U `Ğ]9d{]LUf1JEBm2lL4BU2 y^[ 1 .2Ko3좴%'1D]Wc~w)u,N{>_qC$7/q|cz{k9>>a~xȕ7hF e5@sXwFJֻ Ý7 s^HLt'k?+NBhP0&}߳ZDH`f2.8:=1VFNӖ퍸I^^|ݏ/s~eoD^ n^E*AQlݧs8Q=~x@L1% YE clAT>ĢF ݊o]ĞAy(l,Ɍ!3pD=tZ2(/'O= Db*3\I6up m l1f0'zM'$mb1%}q ħ\*誤>VłR)\"N16)=AzD1'R\ԠY:2{hP*FhM dSR- Y';SHyf{C@+eÿrfFG_S=XefW;PM'ZU_4bt uD(xorbVcR'dmCt{&Ch ~+Cp9xW K m $/xҸR:1uBcT[cZJ`9JMveGvVk ɱ# tdBj G do*Ec qѷ-}:)C\qʹt_3!,f6wELrsHH|#s)"Ȳ%iET- V."I{漅erbb^ާMfܸ:7]{W[<9xL7@: `vViϸ4k%GJQbpx;ꦧ׈h:E^xw^<: O .1j6ICUD*ÞwjTYntl'򀣓Ӥkyy?zu$ƤKT07i`*}y)HEhE1N<\'R隖 G#8]j#}E || /l><_~ g?"ṇ˅_|KcQdH."^3{JE5_R&1 zHfM.D: J#`DPopFMυ]qcoK!ɉpzQ,mAPB3@L:0 Y7N䰁 \hi3b4%kZƌ[ ~wjB~TLAiL5"ZKݭ!tH,1PTuM+l@:Yf8Iaf,T!DQy`hNkʝ1]g7Wi4:I}=&6!OX0 ,N-h<xf?*~HSO/(GSBY&RmH1q8]c=_R<}|2",=ab02ݝ1 [Հ(l1SU@sX%d yyѹ$_nb]~s+bX`GᘓǏqM3x՚^pn F%AQ1OZ5dP( rPqیwyp|{ժBČ|m4BΧR(ڂ5DIS].ivDgH+NBo8̦glsp&Otz_%Bt9PqBD{ b5Ѕ%651->Ih+؊y:xq g9y ,TZ؝Mђ!` ͭ[7O`2(Q@X~zQab}p]|dxxzd<,5!(֖60WJ,K{~$6<{DQa^%=9=yOFIDRc SKםOpW!!8b)1f6c*A.i(]U>&)!QN2Ъd:~BlA|rR*mvkQDƷf;smV752MMP>~[UqE@-gjD=؁'Ɪq2@Kyr1.D=搲RTQcXءmjc3ta)cIMz\WӇ5Yb܀((J%etbhDOLr/9BWzr4FA4rYVhQ,Ƃ1]4шdtghwޕD1Ŕ%,QB}x=r[\~6giǯU|Q^bDÂ4!D}$\h %шS|݁OeH=^@棣Oso"$'eI7Ėْa0@kЅ;ﲬP"!\jVI9WWLf !v|P6=P>4>]02JIL"rs;\Ck>[&#+<~|b,vϗ%}Q 8η!أQD">(:C,;? (@jMػt23LOQR?}^>ό@F]Vszt^CmQ"`Y=h8Pj(_vTe],4`ug9kf@9(QVqvt\{uDYbLLWRTpOxkׁmآTbW-a*" cJLo1H` Į^IYz84,k[d_ǿUa-$+ɖdNJ eO󴤗UH)]#BUDr'DВFhPkl{y%ґ  #< N1 jB.hC|J%#q#r*_кSnq-.̌jp *- TPBK$dxuWҸ'DdBlQѯXPA]KT{Û̊ߠuఆD!bPxqѱ3MM`x(5A;!?CI}6&LJm)]l5w.1+[o04+h=B*['FW,M@ǹ#I J %7+c"!{"$K){)U$1ʯo^dYpW??HLc-EQ$ԙ\Fy g;Ǐ]Cikd3(65EM2P!1s}-Y_$^B/1$ ڠ[.ZCcI[OT2=eIi,O| xO.Ch:;vM*ƘHd(]ʠ){%Ny-;J+RDQișf@M)؈B!GwhBӱv M[ikڂN"(قKmNbb+ōHcT'w \HAh bOf.bg3.&m.1ӒuZ1-Kڡh"{J TAS r[_<&FAqx*1ӽMC9%`3oHlZMAoyG?LTQR&x,JD[׾=TQCc=GPliS"moɮ%xe+.>xzTZ&j@58<v4`(\m]P^8~>_u/A ݎ_AO9(I_. A$5=f8I$-)Ϙ^ Mn8т+xS>#IRĠ2)9Yt!ޝ"zl5c`ZKoubl::Jг4&&>(#Bb:kkf@!]`@lNVO+kRɽ)XɒۗګdM Q;ei$Yyx^hh/,Vh9]i OR HLQ ye#8&aM#`@[r0d1?oktY%.IkT1b7].߸R5?0𙛿o܏rL\ڗgWoEYҼ~rZ,'>W8 s;-페]qoyD (A3Î؟ޤy{{ }Vf펩*~GhiJC$@u{]Tn蕲$]RW žqMK0+g'GxZZPҹL!1?B+]x6-,ެ\b%H$,[g1 EBfUFG+RzpW'!͢IhVGKt C4:@A!s/oJ׾| xP!{֋i)Uv1FR1HbWh\ɔ>}ݻӯLfљ?y• )l게w15A" :=(Ã'D6j@ӏZ< mu,2ӮkǧOL {W bB!e]5QI PoF2Pl,q`9]-އo;$Psb Ey { "¨2g8oKF{_8$+VP œW;KN>/~6/ K+HG=>ÔY~Lhk*}K;Jmrэ`\:;#jPhMTr >b43JZS3L ZYVS ) i4`*cɂO]?^2_|9hn`~л.} ]tA$I,mS+%J, !xLa1&p}vdb KQUTtY ޳ELDpm1??O8]y|tSjRJ-' IDATVt]cLBw\@̾kOLUMqm|'_ū zCr$ -Vx%:BXp/EZfPR ̏O}us]RҒA" OJc%=;`KĪڝ{ Mp}9˯_hk1Ƽnw$bb$FK^yއXR*DT[0HQ$&PvmCm$W$U4!LÝ )ƄKZm`" Z]hE͒%%[ODkg_=z A4O-'gܾ1\V HbfCZCcsњ ]W'^ J z J{kQ1>>hPs='kc$5^Ѫ;C;T,)@KQ`bXN0"Hۭq>2 DV*}U;qE.r><>׎n6=;K6~L9(1b^Ci} 6BgجJ@ϋ#]S89+ kvt]!`0'V62cp% WVsm6{n.j.<:x>ͼY7M)*ʲցXK9һ@CMt5mXk 0y4fS/|C^bx!bAyO !(Ai  >>$ urไKTӫ* LUmQ@J=3Đ :Y̦}IȖ.hMm>Ebdy6/!GfXld2}G5u[pu;}WVWȌ<#yH"T mĮS6bm/EcA|#>W֭7x)>du `)o_8=X mZ|[۟1LV`@UU]ҚdX1r>it?),g o%Ҭ< o_#7X\c3P:Y}]RUȵ}]T%ͲcZ.ݼҹSA1xϺ1E:(Az^%D]ȾMe*ȋ/1ܰ$DtȺf=z'(7/?=o? o>nob VD/^kq~}=v3W;\{Gp>E@k?q4Y'#*΅it΁ gU/iNjW|5Qɓ;WL̀xPCf{Vbv0n1\ŅRɮ<*GM q#A$<"%' bLj?W+btcQm5F=OiGTk;6cGGG>zkױJebkMZ e-.p͇^f(chj_o?ڭ[*\GܨK5xݝ1ޫb:>xӴ|It-/&1]4-]Yw=ko! bIAK+%ĀwiE[T8p.Yei[9w}hoJ|j] u|Rb{;AJ%:=Q12(.CޣCrلჟmh+|J[ِzb.Ҫ#$[ nƂ=wc(T؎'w.$5rណ3HbmI(&ׯO2:sji)Tˬ%&VI/(M꒑E^ @[7YGE$! )i^ɚ0ZcFc רq=*EsŢ@ڳ`|h|3 %!ЋЇyyQòV Fct ڼHgm>DmehTBoԅF[[N?MRLLQD[Hd._׿C&1Y;Y97}@o>(: V\C$&q %2Oe,HVUҢ2`+"@"(*`@ӭW%egow&I]׺J(\J aCB[* ];ӟ3sFлXF9ru]C_fS-.xyu"f/S> ]0"͚׷\x|^Q.?2Ɔv9nj)c?bNo4v2͸|f``H þM^8@^S8g.n/u¿R4w WRy!"FQ J'=>:,.vwV ~8xbkƳzp-ChBy{ŏ5?T-!h-84=]1׸t;KM@Z%ƒJU5;Ŵ1@]ãqhQʂ}*\`' 1ΰUJ>2_R\{mĖ|p#O[8A:K,@PA=&յ -X@R',O=$6k8%ߵH60(I}}O}nIp‹@HL#cxFQL;(!.Ї%V.lbPk$/`-EYܨC^{MN{0, aI51ЅI7]f4a4b2 !o8!EWM7f#T! 5/yzvsV&#ڮǚ먪f]X,ΐGnZNV<=\9!DڎɸƗ_IMLyĐ<5OV6W z!d GH$9)Z.*-8gG1utb 'S] Ar"-}ks\AYGgaV P ((wuwC6u􃗜t,(9Tt_o?Y.9><}dlwdH1ˣC./e]<}ȓVۖ ΀ \b2c42,Kwg3:'TŹwժfyzF4bb{9=Y;@6MWN!oL^fDI 1 >'tƒG,N΍DIUE1vOg΋2#(DG-1&(c8=8HȰ`pitr䄮wx3Ȕ;+yjӁH?$uf.ek&]Rht*ousLݓ-&Udv!JW$,>tDIhp+&;>yxFW6#jeb"јVEѳ1V<u+tBɶJD[ Kv[A5,sňs}֡(!(.v._&&.4S揟PNǨB`!Zqx6NRqȟ XK)u ]c1!!z$vx%^-n?f<\-cF$\/y5_}^Dq߱u<{@*-i3x%?d6o0(m:. JUQ%'$X};^8'r LQsHINx*2 X]K1c" 1q-TZez>P6=gtεƱ}.0Kf͈e0`zзBIӹ{|}'<$q64"0hD(%yVHGkhQW5ֈF% ) k uUM;x^ h=#J0cq:gaۭ E4If>PQB?`4J:?S")5mϻg)}9׈sXANbExZJoy o ) 5+O'ޕ$?x;dbbi $:ݒ1fz uD^8eQ(eH ù EYclNG'}Qew@G\l֌l&v Rm.l< )QA)t6ԦbҺT:NEAXcceHYc݂4v q:3MGxWcp> c!RcC- z o=gnpk ?p 𦢪J)$E:*>ٺ)%MV;<k)9WЍ^|$Co@M'*MH:m"l ԅ Σ\wfD(QL³T㕢0nP5ó urWV4) "5"P &J[l#B_U ,*,!ȇZ F6Lu֯$8aIJGRqᙋ8VS}|5Y̏QWk|cJd`i)F*.I4D:8k/QoR[q8gx K4Ҥ'vlk`+ IDATf|`}YuĊy!mJF=6[D[ؼh̍QC&-( pR}g'u64>]6yDc}M>37(8$IƘh)uGEA ;spBǒl]~tA~IFLJ q&YCEl%<E!|G/R|2w58٘7P˪[U [-l[8h:[تB&$F%Z~9*94qEw6Ͻ&iHKzRǬιucwֆHIfJ)IcI=|Wc|jcBኀ r).?R,1HDsa䌣]b/W3C??c>_ l#\-dǒL3Q#6JL3s?KMBc`fK)Zc%"4.QA8|`]EדsQ4i$AH@&yb2E9U3ݠU%9ʺR|9΀w$Jk.A֎`W>ٺp7Hyt.?d>s\sJ&E5JmRo}@wcs$v}Y@J,~Dva>{1$9Q 8ot>*~{~`aeITt{OX0:9d9KJ p, t)um89:X(eOAq҅VZk UL'`g-e%Ԉ$AE1eQb:PS!NZ;dqF118XJLpo[#OyQJH:y ӄ$MldpSKe=BIw$i~79xOX4%m:*.YPXkcl BE^X!4I쳵ͅ=6[4$Zy3I+?egְkd^TXC ( C(@ϖOAH4BG,^anD`[Ff7f7')oJG~d6H7 +=a"uʇKNxFKbWptv ~rgnHDLQ2ac"ß%'5Ov'LD'LNح+t)YLWDI2B_nu%׿[pH>c>ŷB;x!Z ._l] 딮fzqiZm$^kIo◅k|T}yod}h8pkGPU,զ̓8_'SXi 9ieMܻCݡJM\=>6;eAO/<>Y<"_TZ]pր[t$oŚ(e ΛKOińX |smcDI.c3!/Ip 9ɛ r$1sMXOQU{8d( ;l_#m 2@x`V6%`eAFXA9B' d *K LQ ˦N ījIBH*ZD.vڣ I$7(-tާZ_lWXՇycƒpoZ/v8/*Et EYa>I=[ WU!\\gM a-*;\ƀ2~18͕*WzBMgU *NKş0hpcԢ5lnԏQRfcg"0ܚiO+t1 [@{Y5it:eZSWme]J(})b-._?OG0:8dujwvzKZ5EO(7RR, :6282f Z/ʧzZVØ1&4MFsXRkDu Z-Qu`Gu]|6fˀeƗ#,1;W˃)(RV~ ) a}jɳ1I,.9M](XJ(u9CY=ݺF J35҄Gx)B87ƫ9"1Wa)҃RT¡R=KSv7 9ʉ=(c53dHM[q [#6qٔ-"q ^Dv1mN$5sKWx"Tq(kjl @.H3Sz=dQ"E$*8w6c겠Kg ~_꒣ޣOX2(1YtN=ْonA&F)I˳9b%vl Z(nc6ۜd3ZG+lgsEN\R̗t?~ Z9hD]#r̙h|AKsu}|^_Uy՝_ui$E\47om-*KHܨ~ k@aC塅gHc(ʊ ) t2.PMb,>5(1Ƽ5~RE=ڽZ dajLcM֪ـybXƝ?8 ȿ]7 X[oAceA{&DڑhmCײ"ADajAn*ŋ NpxX6&B vQ تD_8<@u$TU٤.50eXŲ@jµ Ot~;efΙl:"+bctrƇ?~/a:TJ"Vt cM=Yvw# 8x|,ڋY GqK!Tp*BXf pXK8HA|}t}.%f &ጥ4,q%,{Bs|sEnŲ,:yMa*u`6]{Kgg$}DlݸN k'0So RwߓĘჵXS!d`3k㔸B1Wc%KD,1/*1˘ Z\g3EW75 ΔxaL]jke֤I7D _LH+S/snVp5U)R_t@8 #i`9!.Pa1kL `!BH+U1UTQML ɧ%fYf&@ mX*CsZ>ARP , J8Њ:79F#>c4"wom:OW(ucazΉ&袱;Sxl}aFsn[;<kggG#gg$iBocݍA$P)#`~j>W\ĝJKFw~!!DQDG³ 5Б9#PJ&,MQ'Kb&4^8N{?ϗRlxxdᏘ[x&9<5{PlU>{^Nn%ob= bA#:&c3 9Oؽ7;{ >eh,K>MBͥ~6<^A4$| {xa|{"Ǖ%^Prlј_ &,&qI45_MKi"2&zSJd5yi)߻+x]F *Ge612&uQ=@)*YsXeN((˜Ӄ\N'O|ZߓVu|W?;?o 룣ͭm8 #`˲qIa!BȒAks+ld ʱ3.<,W\e1Q:,D)QS̖_!(N6֚@R XkV()%q[+:x Z̎8~|:"( looR&B|>uy_e?OXq '˵O*\@ѵcMx_.fx6jz838LHu,U])OJt'x#PwJy1<<"Mv/'IzN<99:bkcGEʰ_yL5 κg9a >nx4i&" EQ,y>,ΐ:G5ܳ( ϹKgO6ÛasW%+b$ /9Gd"5)z$x*bD:U,ʂ|Y5p} 2UNDN89P2HXc:"4^K:@aJ2EAUU(I|5*-лy{2s̸&.0 tJQ7VIX0Ԧ&R+zizkU^k/Pn)̇g QI`{llogvz{lg 6Gؓ<\l\9n￰xǔyE/$I$qY;:$FkI$ [)l|d2[ j`fnzdPbJ뜚;=~b1c4:avxFyxF|>K MYhuSlmmu{(xԆrQ%N`6W^zfzMnϹ9d"8@Kc=! 2,;RHif%UoL?Z!X $.1"ӘpUD{k@JF~@Y8R֪wC[t+GVv`3LQRVůZ8)XAAIF:PQ) ^/f0hHوE.l] {A|'\zVB8x:dzr6am=ВKZB91?}Ʒlu}r3|V :bz5)YTװTcL`u5K҃p@P,jI#J*S(!RԶі,a]_Q)=if>a)WP)꒬.͹\lgxiėcJ󇐂(ɘFqJŀUf ol)Q29{oAΫBa2qpGf-6ɲ*UM^FNeqA+\xwAH+ ,;@ .\Gy> )HҔ.Ʉ^*z=((Jc&b{12đ\{6&'1K{H :V# s@Jz{4_W^k 6دX /!DV˜xt`xK{oCw8<8")7n\o0oLeJ)I &TsV,;]}CJ/˰*K5 A@Q_mH TפZE1|l8D.;<$•+$U$,Yens f#\QW)vi3ɯǰDHHz̈́M-MӰ\0W"HK@"%Q]5#+XgGxҢb#v.^d~,M)Әׯ3==%7^z{, K?KgikM[IJ!Qx"cŲ,+")QDzruOg,'3LYag9Lt70/9<|;E=rͦ6]^:sxQ]1[SU9w>dMk677ɲ B-il1̉6Q慯AgcB,w 6Yy } SsO&|fn# HIPxmnyu?I'Ʋ89F#\Wp%A(=\pt̕Z bO%|p6W(N# YYJo/3ĕq8Q9{Ok&QL(8>{Cd)I Jr¤1Et7tRVրjBbF&lW2=圓Cʲ, ͕g1J=>i 2't/13?8`EW8k>j%eP 9g-RJqh)CE! "Հ#CQWUYY j$N55SxF BER U1@'N\9`1xf$|Qc9>t7l\d1;š[/p8"0WRiƛ%VY.iIk lJ V̺pH"bHap,DQL -69ȗKQ̆Wt^cڟ.p{Me\{mNKLeqG9D1MH[S:vbJ5d])szb JRF!Ć _#?MZ-|`,Szt.ᐝ {luE{wV5ŒѬlQ?^JcĚ9U PiLɒ;K'1818 ׯ0QWݍ-^{f|6d\~&g9W6g_rYxzP$/L,n޿?xT)rN }d[}} [;|?{ \H"XV[+@ \{(bC6:zE0_h-""EM2st-߸Ɲ;R!Z' @jڢ ޻Iz:e.ˣNO :%ۨ uL\gDuryXKڦB-7J^u~g'k߰T0ƹ] v xn(Iׁ0nPX%mԁ$D1^y >N""c\RU0T2HcSu1*efL ;?/onl6,lV'7I\.GXSf$*NJ#uP|A 8Vqh8a172 I҄B 8b?}QW% ̇ݽ=qֲΨ4MqDE"GSW z;:Xe/q饗N]VFHp] Рr399 itN'RP=UQHHhw:kĊcj6"G6h<q8w"Ɉ{kəlXYacFc/Ǟ{2LQ/HΝC_Hj:n^T ڳ1Bbc,wg?|n'łj2#Q0%K*?yi2cʊ?!ѹ̔OD^'G-l+kM׃ /DJYR$— !{rS{NE *Iil{ ^(]Q,If8'xs%/=Я!Z$ !|YH)"9p.!VBM$`l#2qC,6WJ5x/B'm# U $f4J "jlIzX]8#.`>$Y- S#⤃(#Si7 9D)s XD*gd}ynq B(kM""VlETV0uвb)'h;3$EL c7࿹2H#ƪNxlUĞW l+/1V0q8*,fm 5ί֥!k~a{ṯb6fx !ZٌG9[ HbMqqƵ Gg,jK S✡HKE°pw,eYa+;nc* -"Wʳ0֒ƣ1a\p`,ZvG,6-X.kNSe ѐZoRYŝ˻nNF\}t4۽IW9z$n+W $NS;*6ewغUJ |<>ǡ ZCՌ5ѱhwpR舺 vBIT„0)lGq5fΐdTZRk5ߦuk@,/2 E=HM YAp 7/QY`ra>C$hҘ8)PZS \0@&y4sgS޺E6Di\8zޣakw)ȧs Je *PJq1{?C,G!뜅x%BTr^sq|JS8zG?~ ;ں|$Ij,n,2̒&s߿Og^K}dx!ER`|>l` {׮8W"/0eN3"J Y/mϏqǧ<~Or.wٔ>௾G?q\[uт[+ܺxkr7OD'U˷W,>i("#i قqGa) Q8OILւlغDzRV+Jۖ*(ږ7K1{/E*IY3b0X!MlX)˂u$阮x=+x^H 1i:(sFˮ3d5A!UF"ӌ'rT Q)%XZK]Pr.J,ek9: 2"/Sf-ΖX?%CZA5(WPQDndWmP$DKmPH+"ɥWk蘕*XRx$-JJL9m3A ]wO3FT-ԹG|Fw|aO{y@A'YN#%!Y(Q#)@*oRRNrd׎ZX'%&gvhIU -c8'N4!\'\KJ`}WI8p zچii˚}cucʈ8NV"JU>>1i`+4hVⅣKۛXgRS4'#‹[L Wix!Zk|9\_ceHWb*N%5sJo;(;q(+-^w|ͽ(#[$='S.NϘgئd `'` ?`ܺI}*V5ycc Wz^|J"NXr#[b@8͐IuH@ejVqq|J @tE "6 J)F)u9@D"V{1k׶iʂܗ&+E'ݹwtP>\R"Kƈw_s,63{e 2KIFC'k;@$Kc1I>u:_a=:|x~9_[?~ ^\s}{<8LƧ:h O$ ?Lد, 9)Q1$15#zUҗ%=Yoii!+!]g=U X㈬ӄ89|&}!{{׹v:8R\ݻFf-g6<?g .sXkRUw-qdpJ>Jf7sp#3S!J IlCYT3a AK:$N<ͼDҠT#1YiC4 Bh^d R4ںq1-EulP¹*qmJOmk h֞u,vMdD2cd/E` {סTElB]C`HQ!Pv I'EuLn݃2XbqFbA{h+\aBDDBem/$֖T׺Riwk)pU MX8?<-:dlT5HRz1C"/-XkR-u,ւ(IDX&, w2G. )4('Ŝ? 4<< 8/%`B1Nyɴ{A,gyik/΃S^~ȡjY\̹89e|z-Y/c8IC.ٹswHzgkf;a}&ٌj6z|0^Aϱ]4:y".[襫ZoDH3.7ȰQB9I(NZgł4!5[lS[[9GGQh8Jg)"z)0QL4lpq||| iAi -sA*m5M[!%@.Rb0駨~::d[&Vaې m 6xȦeqr٣}̮ "Ѥa}vW60T2xd HDB||.f[ E/8weHz{aHqOȽOTGXʗ?`ֶL9wdq\\GyҚ8U.`)3Wvp@($4OݼwTU5ޝYmkH|6h8@%.?s9x^U?sa^iu0QR2ZYa8? gyI/H1BzdQ0] ~q%x{} ?cV ӌƼwG?]Whh Vz-ZVBWV(s˰xZs** L MLC20,}%;B:k_TGh@686^kEj@ݻ/CstxʃqUUqrzk/|gէF3٤%`pXε;CuTsGAM  T) Iy R8Ƕ-RTT \Y?>D)|PAڦSCU4eq-4ONs-J48^sQign@h;o4x:I7 dzzFiαMM^+DJɇ3+3&yTHa5^|6d.N8y[8IHiEoc;wH3DL=o}EQPbv6#ݛ IDAT;ׯTAϳ6 ;2z!aӾA &c6>sP @kQB""R}Uŵ-=:mqu>l c58 gQ G-4 TsŬdGnFy>  $iB:& iNUh-:U3 ]㳈_y#Y;,R cZaڵLE1ٚD"9n 2MD><'rRPe\5#GriFK2>W)/4Y.Idۼ kVV(1I |7D0~4lΨҚ(M^M&U4q09'TEh9sҍu^peooooH׆Hc _'Ic~|ǟ c^Ǭ l/Bxk꺦ޣ6&*BSe!Li<ẦӈV:>|/$VB24ARQE@ p@/X)8cST5ESҴ- ̧;AAȟ/ Wi?_ /?zڠWx/o|ې/3)Nyx=[Om ˛%>`ִ܏#0@OΘXm YדּŸo9Tӵa?9K5m3'`ʒC4'=Ϭ(J"a=aa“ 3g')7^C z4J&ۆl"EQ%/iի9==, #mZ_?﹧ˇHOI:4K7lA8zJ/AKr@ 48Ӳ6BiE|aZu5qċAKcKGGI.p@&nMKDY >GM A- REH8Y]z%opE` $@STS(N rS#R45qI^%Ͷ@sCYGvw (%PB!mF#z>ZK7⩾qm]dz=O%)< 41@l"S%BLȂYGpٚeZS`dx+/JUVo!Z&$mےϧ>hh늦iٸrr5$h__qzq.3q8Ib>trFfr@En,sQ7 $ sln{yk[7pK70!Z'MȲ$Gz}~46Mxk_%nf;V]8wy ߣhmbFuqBMFss,g@'Efn"d󶄭ZTbjHh.ga$VH|!dP4uuP!>]FO1ݾk>?b>""BRx$%BfNpxLSs֏opꐕWA3Fe kHePBrq1O[E1&}~G؎CBI/q6'r޴LN8#҈ N9عF'lvL/ظ!7+#|3njN\ΕfRVT%lcߥggâz@wI$"P0>_Tϧ[xaRƆ~2mw细3"rV s>;O(େgb(ebGl$^MHj Oɫ鐂Dx`6R%qy(II{= R )Glݽ ;x7'o_3ڀ'g6{=#3&G̎O=L{,Kx=AQVDqĭ^":'k 81PZROyUl('6 ,1M' ֦3KNsiFG[OMC}AlH}ڌtמ<}ʼcc4C ke,Lm#l]4cFBcKgt:S۴eIUVXWS.,gy{~ ڗ^bX06mSxF KR/ySe hD]̝hhz#Қ& "Aj^]z]|>eC𖝝]nݹv|k3/{$ K.x+RO=тR: =u!+19>)Mn3X)Jq677Swap]عk%Z+# @^DtʮBEs? !T2qő$Q&U m7x("µS,VuCk;&!BÂoXB !{YMF4gcJH tZj08 Lۧۦieu !Dëg[9lՆ`L۱B]8~Ix;_z}%7TDK&!jSJ9|5|؀84q[)hJaeu e[c|7 UD4Q֟Kf''Acz:MA+!Z@Qv'i6hBʕR$&nl3Lin-k1`q}sĵ/#iBo}*:`갔xX}@ݏ*T[G?|)Z}8&EUӪ6gČDJOG߼.go_6K WM/AFGȇ;=^ J^?{/YA\>;KCKmSǶAN,&N@*d MIۄY5c+[WZ6ll믲7y4o8Wd[k+_}oRT-Eyl< -B&0"lF]'2~ϱhGxyl_c}gG?m+C^@:Po0pn 锇|@ocx Gti% غau}q|v{rq6D|&S@gPgUI*'Ǘλ^\i Y84MK=&ܺ27nC1܆S5>>}&,{XLŜ*/xd'Mc#dSmV86D"aR ~<֋7`&czkQsq1F<xc>g)b;Ɉ=Ōl0iNH=z!2lN'J:lsau 45Ӌ)h"G*hh 4x .Wc€;p8YzJ9Tߐi(-Ť`1.h5rNrM@ڶcaIE`w6xJ.anE/}5 a_z}%:]rR!Q沜w.adN,e'@ J "Ie)G1! ̮9\ -E^[˝/B%{ރҢQS#DF#1I⼤~|+fAr BhFiʰȧT'bV3,!cVuMj u^cC:ܼ2W_1`륫D`m{i"nv t fK=x$Mѽڐ4Ꮎ`ʐТ[|cɫx;fq8eū<},crӿ?OP))3SxxI0 Kɐ*z6πFƒŕXFLWHulܓ sb?+ "uց(">CJ *Bon&R5S[敯}h}<_˼CŘB84G^am:{7E[O4ΠSC;/DHtR#C(Eh)1QL6b$zs=ڢ@1U6rxxxrw ^̗ )pp8$N#i{o믿'(WزOf/̵W_E[UPkSQiu9}z)Q]̙gNNI#P(Iw$hJbs/A(f9x@=l:ʆn88;~t;ƫ/4mY&={(%;k0=tڨg>Kb +yA=(Rz2 D T^{O?Px jV%Y]K iot׀.Kx:ssOp[0 nۊH"h}!/km99:@`@g9' #vU’*៺qLUuEf\(JV+O:_3)mw-7ZmѿnQim<+atׇX%vP-(ʐF A-mkl}3=p-ކ{ )Li*|^Р=lPr1Mhi*fjkgHmQ"5:{URd0H{Ew0:if n %ҁ$x \m8wihp'€:R :UUir ItC>d63=>` %z(D-9?CTHD U(Nt&0 ?л:Ə`ynteb6qG9eZ(鬬Fʖ\B+\W[8{`8Rc0ID'jЧ'M-rb'q}cш+: IOUW &Sa[fZkZg$X_[a;WٹJo4µx!i8IH{Y% :6({ g1Q/SЧ˗%xGoj?ay籋".e993'7fpI 74UEu8%5r8 pOݶ8 ^6-|oG\_LFHX@Ftigq*ω%RX!g'5ؒr{ydqD_J\e i/A RpVWnq(/Ω9#,C%)j^` BC ZӓT0`8JپzyM6`73tgD*h<,9o  /Əɤ:xFdw"!T">L~SQYϽp,þhfk:$ЁyO,ʒ$c‹gSZ& qey| 7贏ڕ ^1Ip$bccp c1&($V4Mbֲ=TM>1>9ʋ`=\Y ؀N/m[wC| _ N 쒼Dip}K)'<1Í-6\}kWr'4utVuw1&"Zwfu íKFPdDq?fdud ?` HmbeX) 8bo[ ^ixMfh)l:YGMӐf"1ܿw6QFkEzR$̱3^F,} y/-dFJjd@lS5F! m袥 B ()0ΡlKUcV(BB"#M$8b2 rdqLWؽvw2fvv}'8"RLqZK%_~c/'?:⣿.9NH+(R"k{iǫ XHt:|!Ay*t]nI<FI%i:$ bCQh){OwXcEQ[6 22 2^Yܒ/rh )=D3CKXIg<(IӔ͍u&ḭ5ĉ!RA蓇S )$Q  p#A.;]t,|8ɵ'\Bw,IUi֐1Ճp8#d<8;PUl$6#*Y yθ9v˵^ʿ|<*-t8RM?z_K<cד}֐y ղ-r|D`BRa_w+w `"^yiv- WDiW q_S~`ݜń*/~Ls/Ktd(@BRV(BD9y|@os ǬnoR:gǜEKع}􀐊d}gtä1Ï>f`SFkx~Wy\!Hq=Y IDATIQi?1R5{f1mQC}~nuϰ:6\+[\|s ){K s׿+Cod-~U0Ɏj-FMs.Hl"ZגƞH93&Q"5mv2st#L 4Ƈ%'|dJKC =0`-EXPwf Ѷ-m۠¶sxb?)y/a$2R,K/d鐕'loe`/rK:/}{ɮ`/EAC~7seOD^2ar8U}d8uˎ;V߄c< ·c_JJS2<^fC ^HaQ>vjNQCbپ.?9='UXP̏q> -vA]R@Jp6Ƕhy-]g,CIJT^O]oN>gz D HT'ے| l_|KTDR D 0g:|vZk"%ּT:gOͺ:B 9fk ͝sA'#FƇВ!lyLN.唸lonD3[VxÐ6 mBg |R 4oB[g&_pU>z-V+ IC$|ޣ朮d,kn1 kC'{}RmL%̎tzV,1Z2<[8γ4,r|mE1k}: ^ekC.\^ftǙv&Jpkҁa+sq54 'VÂUjqKãs`2&QZͻ߇M>2~[7e*dx줹VͬP Ta Yf*2D[LYektCЉZũX+E%8#*7UN8!Z-QK*[$)~KSxJ#mI[yzZNQEӄ)+N'|tA%k'=6}nz<֥ɐңkS˗9:JQJpQ4>+ C8!F5+O!$زbq+P!3VSefס ׊!eE+Ԣn,(E3,4&l?u"E[IEUrx}nud^ҹ[LI7s-7~;|d}2'r>o6Jǥ4<ďڞNRt rdk\y$7utCfvܣ !AYod[oť/ZoD7ÇgS_ƅDiJU,?Ii㪈$>q4/*{v19Fmnp< JXL>@Kl6}ƋN@ekn:?s*-umv͍rV:/+o/{yڃ>+ > ͠Җn/ALm&/x)p4Dﱵ5n'4򌟍Xq %R͗h+Cީaxge0ⴄ&tjlDx:väńP:c("2NI !< X'#v k&34!єOG-wk"';>ϯlq!j |`yቴ;LNGJСq2680/YPu7@2[}3  ,kHD% aOdl58oQ&Ib-]#ט)R#} \>L>\O/qϾ8*i=l,XWG|DP2XpH4I]1Uκ,?ݣ4 c yb% j|$V! Kc= F_?Geglp{?`|to5i^$1><҂XC̻pqFZl: e ҋTfPo߳>miGWHIr޹W^㽟ѓ$BE DMxuiY.<{NE^H'ܽ{{A(`YId[ޓ%Eڽ!ٌp$:bMpSE`J QV4N{,e{*l]ҵl_Du(񘽇x4OAbD:qTR`<^A cnL6;m|㜥څ!RAީ) ?1x-v1SRT ;,.s3,)Ci 8\%B gXpOiR.,BRknDPlT U5xG=1QEJ:h-hmsWULNh'QU#Q ɡe1I5Rabkn%1w(^1J5Fr7A%D06+FKgfMmj9Ijczqi; hL Iƒ*bYV$4c 2 R©l I-%ubVEē)l\@B 4[||t!Z `'(p.((b6 pH2HTXcc VAӡn3+D(ZCDBӥ3KZlw&-~+/NK?}5O<響2|ay.L_/c('[[CG U2t7Y邓ш!:^ %í H QKOh߹d13[r5I KiRKOI U)._? v|"K\<DXcɰ&Ox[ա3 ( BA3ȧsdV+>}0H"+Z\Ze舕ZKEY{*1Ur1! K5=<^Ex,#">ں^/c<7 w;!ɈV&M?;ؿl}VQsnjy{:D&g !TT2,풴"%QF Ѐc3(5.e3k)M(T=^L)_T^C5 o=,qH.+nDk<=tQU`PB}hX@rR Q++*jX\lnl# FʎUBmeJkr8k1ޅ2; kpkvuze\%{[]|3`-;ݟs|Tl$MpE-*l^\N4Hayeq6 QDDmqVֿt#tZ/JQ[MJ/C1fNAɈ8ICA\P"a82/1֐F1YRDZ)RJ"Xk%%R(b8& N 8 [HSӓ1{pG ɶQXP"(!A8K' y7H;s % \wayJ6!S~^(O ^N@ SMc *LJ]h(EBThw{$iT$qd]]ڷ^EDAMlakngJQ]>GZOO):IJi-2t>jBSRM&H {cjrBVDMJ jG1N+lp@AoiJ[rj>'鶈.888@Fvp8p7AX:=6{>ibW?õ!:Rር(g#>x&>+kkXT "cڭJ8*p(hH|>9*uvO;&Ƒdְuz Ah4YVݪB\/g"!I"sTYpS{=o'ؐG%A̙k3VhX D+4};Y a &Q yIpq*H@آ,A(` F>y)bNQ*s~`0+F& I։QI?(!!KcR H@WfBrSysxcvp*2$lDjC5_#/A$!ҭF!2K>xYY*$YP X1N mbޝ~(|1 -}F3M/g Z8B6{$|O_eo3{|cW wB*B-J(Lچ8yVk Fao "qƺ5VUxepŖc-ƇT 뷊2D[#GxBkhAWwvi 蟻L][dЊ,"sBk-%*wĿ#9 AY4kٚNCgƹؾxvG2N{nAO5ްT Oo}F=ʙ>b&Ӈ0bZkGsD2V+5?q 4&*x\N(`fJ 4K4#N(l^Fzd1+H.m"#1xD%xgb+dnFIXXVqs\&ܸ~En(LYN&&6L4R e0o 0^P Yi pIِQvI`,Q/ '-UI27K[ucvo*y!jŏ>ܣW˧dI{qJ/8\XNd_(>&6LL\¾gQ̖KV%X&Ihi\(e\(ق[?՗_s*lmy9d9x)eyނed$Ji8-.s5VRWkBl;ߏ2I ^`k+( 2ߜZDzv!˫Ә*Y.'8S\x/1Om kC$#v'= Ieufs" =9BU>nmp[ĶSsc"}8E9Nۣӭ06 9qMg3 " >E=f8ܠX̑ϳΞOHi9{?߆ڐ|9Η`I)OkjH\𞊤fY$EɌi$]5-0n"4:2*$>mܝ0֐ wc,p;hѭGTcDU#GBbxI_K>;\+tK`JL9GDHł ,v#PB& #H&:ywW)~cxnSs?K/އ`]Wdq vp7,%ɔbAYc JQiq-jj%5:Ҵ:6پts.y~8`g>?d~OF2q8֔U0+yjxjmkjG;,=;р3KW+[}6=>:#WY̱ks[>>rz}ԀsʭH`sj6+࠵vOE2+A0ñSȅȕGxnLYQ"X><`ۤq_'XgrY*c$(ydyL@#ȗUhI;]3'+g0cm\ @LF)6ژD/|nʒɈlgxL})%P]Qt2Ҁlԟ, !! Td=ۙ0D۬5$eKJIc.v`3& J{VhO)( ?/3;װ$~`}ū1++4#bOyHxn.kt?oll!p:*7iΒϖ_?t}/XTӘ.2>*RtkAIMwynxQ!l1;xߐtS::M d݌tɏg?.1_tA+LQrwy,16X; یYW5t7d7~+6ĉNR ͤ-]G~r :Ρ>E=s?gJZ&}^Oo}77Pt ݌F1oy~͠cY&jRHDX>aUM]Dɓgύ lÓ)5—P9 3[Xc)6xQqv;# ޼K^L^JH~apOYxIKl!6:oLښlC( Fy^׀%u1#M3sy͝|e#eyu͹k:O.($k GZ9kd^(R 'c9CUXDcF"2#NJafLD k@ʥ(YY5@ IDATDhE|) 2YMbB=1,C]#J.YOlD%ju'(EKHBIϷ@aM^Yo#,l&WRf&D WA= &Mw+DdnCf #nb>|_1CB/]02%8PUuM)}+)WYsfõu$C)tru-?",@zjk OX˕Ц-FGvyΠ!c=899 _NB"d()2i:g70lts.t.l#2//f(b,%;qB\"52rr|*EoY>yȗ\y:q;+^IzW_j!D{?9qE>W#, $!MS꺦CRCn(I eQJ5n> 7_^wE02H|F9Y"-F:+]RDG6"6~3J\tPIvz]1Y_2yƸ\,i  BzK)p8WA†[,8 = 4O՘OfbɣP;ϓ t)HC^&#籣u{tLgSHa#cq]DNyg 1bZc$)xAQG !:>{>,S`:QZ 6RP;+<999X.v۴mZY 8M oas9'=ڥi1q%qHLS# '4p5N,k^x_wm)ˢ`^[N sy( K$iW7y6 #M{w>B_~c-oXPUDLX:$vZl}:y^ gX{L@lK}hL{(J3& W MӔ2_Xg?KP\,w<>+L^`d™iDlRHA.M( RrpqeX SsLzmg:Q;ZǓpiwC2Q&]̢ u R9lek`}!!)GL(f SDi` C>x]F)4lg Ej3_⤤Ԏe8Lj21vrr4f0F8T-gMSm</J6TmB* A4hb؝^'O'_Lx|`R )+rIz>-y)˂(q8GqӜ agbs%'m7uI/}%<[.2^g|qwQBm <#S j>G;8$z!wfK"[2)'x!#6ws!53;wӿo}X` JZpMӉA#NM^%Aa64q8 %#UH0\桉RW̦a* ifem^{\vGt-4#Jۼ{{x2G)+D&%O|l}wa\>!>VOy-鯫Si&9, Y`9I]"PLS\Xg"Iԁd'@0TUwYTgdWޟ3$eYeٙ3֧CO_O_'~-!#Fx3/ Me,JxW`56VN1.K(%2ZVJb gs0.1WM`|ΘFjz}j$؅=C脵+/ӺY _8`WMi9qNtأ[tz09|oWh΅tV5dW" &󚓣#b< hc}`8\R$i yGCʲ9a (q*Y8]*ӟ<~C :ol;ׯ{&Rs&GGZmdpHwլC`};HXEQ!xǚ mtyh̓IZX?J4sK/7H,sBh'm1e?nMW' F˜:0ldh`dkFyMYI~Dס:m<;wptZ,2%E]P!E9l% ^?O>QAϰ>Cԇ&Ynӯf Dc-ϸ|~쳳:!qk*|02[)y3Xgj "D:Oޣ#vTj8ES us4LI8,G'x 1ܔ"$U0^. Ipnl wX먪 8 S(OVXV g"tV䠌Y5Ԛ~^ 덅"=8!0JSlxLlXM2J.caV,Ff> jփRRI{{@>L2B r҆ee4Қ" {cRkB4ƅUR$\tVMYU\q,pnt6wlmoq~˯p۷?Xol𽷹v*.QR^O} o:s䙝 ]d @)*.˲I|_X*W%]PŒMBXl.fgf'tk etY2W֩ eڲ7=͆UdٔG6SVXk&)Cup.B{(Z1k~Y1{4P71RؚKW.0Nƭ0" Dt]V,{ؿu? B*6Lms?}+ |t^|`EnR FYR;R%X~B(Pj͗fFieee$иr165B("P'gG'EdAw¤0Agѧ;d"2윯1֠iMe~ـg|Hq+C~vZ}$ф{O/퐭u[Ws#вw,EwiR؂sdc{ [ hN"BB^'Mlv1Mh|S3gCtk8b]jܥ%ͯ?r;ƺJZv1C!Zkk;'tгWˍ8 Ybgm?Υ|$b|<l<-8<>v,ƃ."/d͗^ғOS4C͢?dd43425u<&n޺HHMrr;wؼzDkJc7脐$8eX,Fy._~4g2$ڒ@Hqt'sR㴬@LBホ%ӟacsN˥Wxp>"8&#e.#gI6"&:⣥}ӯOIK>xˏ!Ęn(ȒI7H EGxn,A@,h靧\Tg+%7 Ⱥ ,R^ѓmߡ~l+yhH9Dw Vܥ3)Y3 e bL8H󜬥GvaV;xW&5n!=GUdi>7nYM&,nQ1h/O%z~ 󳌣_~aͪo*Zײұdl87cmC/@(զ$%3< 2d_@ظ FQO$sNebu{HteZi,c g(`x?g[! DCާ'ɀ"8bZN=tlE6X|Q5S\^B ?qpt >4 ׿m?7Pr4GP$h* `u1ጰ0F)bT&7tN&A :].|;TvBob Tlo+Elp(*?`-:'K(!ϲ8Lt *h9bH*4" IDATuc+䝔Y,M}_ZJɛ/sf ca H@O=<^Ptl`5eIq.!HY?Ij{KJPm{r :jθ|"~ql1;҅s<~S&G\ jÖ iHUkL[ע1o"ԔuI@Vi㊗,e X4>Bh"KLiTLОsԇ˾Zv̲Κ~+IU5Ӧ!kCxpmפN%$I󜺮؛RQplsn/onzbV c>8UT 6\E(Jb=!xbNO>{{巨Lp@ u8a_%7++EmrIzV"'W$I C9BB੧b8(d(>h `6_Dox? 淿O=ͷ~ JWURV׸=ʣ=.d4d:Q%W^VW}~ y΃XXHuœ\KSe~؆{z<?:a 2IָTR>M;OE2Ǽ Q\ч@YQ3k*p&(#x}h$l`yDOhC`麀juzgTvN9kA @jsf1MԬH%=q֜Ɩ@,Z@A<|>t:2}Pq얒 -[˵{ZC|TQ+dk, A9̩q(jY%^&4uR;rzdJ9PiJo|luev< ?`12~Wy=C!bpl \=B}|p MP2J)C/߭Q2G>ýM6f\?@5Y@KT]"{ilҔ!fȣtx6w(Vs&(?#S^!Mϑg}TGres}qg*aYdh5KN9g$hver,YcŘTk)r+x`X^Zz)(%~5xLv!ݵ>Al聰XS]JgsM&LfSt!#D\)I2$%)zs1/ϥ]swOd43jY ι..@"WPm]WIES1.^:I oéɉ4cUI7kL51A˄ I-zLk8x׸p}.o]lPt2M'ͩh>۔ V{'>^ jc x6_Ql_1'qC-ocZfDǨ3CGA?W 2Ƶ}W5+=ܾ}*W RJvbQ2 !QU Mm Ҽs"MSHp".rWx:vwyYY˜w?'J$?z3_"՟t]cdc"+qʥ IO8/[\$q)=禤j:_ҟ`!ɲ2hk %'00pĠMW@֎QD`cWm^y a Ѐ Vv CKy7ɇ{Bd)B*A@e,apa"̈I sTR :u.HEx!*nm3qԯڑ@<{c*L*$C}R%xOe!NqnuRhBi`61L4xϤ,yz[zeG>汗Y342yUb$A*ThR(OehΟgN6@7マWeCj\SO_7 GyQf#Fxn3!_}rKJML%*+R#Mu>JtLi$|h [ " A(߱q/c~u.>,s1M;N*KPz_xAoW8{w{t H{eʨ']SA% "m-T\KX Є2CdLh5YVdҒ "J(|: /3׹p.^vXg<76:í73XK9E7g_cl!:.vߠj.@S7Eɲs8X? wXLܞO9:xD]U,拘6Ѿ5e@z37<ދr%?wY' ;c%N[?=4S$GvlghOZ潏aÙ@C.D5^2l. |DZh-t%HSȳ:{,2i6Qq%&FꜦ.Np+/I)N)a-״֤YJgY |hh%dϨLT|$)"IS4eRn dEàזtǕ-~0eoվyЊ-zih4E,[6O4m@^M)4ؓ$).iJG(CYK' rQ"g-:+o'SR1#=>D?wI=*-KU.rKy<>: SqN^ Ih -4E]t@!ak<ϝh`@S5LMr !G@U?dZtl Xu|Oޥ,㓿OAh3/?" ,X+E+ *"ywW 1:Sgʼn%ޡRQ$I Lإm)%DQK]$^fܠ@*υu^ r>ň[\_ackhqP5eH ˻h"HAVl}ACܰ #d02Ϣg^RWcIq(-IҨ^f$_Oe{B"h=|$xݡ5zʭnr㕗yrvykO@lRw+w~h*^z`!vtI :4Ù]-*~='_(pR !sHD8'YƎp8^2X]lΕkOXaعt :c6r|| \|?~U<}^x s\ƅ &m8f3nx\ą;ho="c9̜=?9BmeMx/$~wN-Ϗ2?sҡ%yE&"OZkLӠt+ KlH wv`M&xAM"%y%e%JHQ!:CN}O@$Y/.ugyAZj$*IORQIR\THJN_!-8::z>?NWg!Do?B V"%ʓf']ÉYk 0#F"eY\ޢxbH3aOp;Wp>q@g휎t0G$JtEɺ^'3%W8w9V.r>^9(4T\h@K)(Dցwńf2B(Q,D H.l3GUxQ/4sq ,ʘezg%IJϘ.)5HA(A0&5dp|ϋ簒sV.RyXMP&)KfA Iu|܄ Z{\mT-5ހNgRlEIM '=^JL2s+%6i)!4qDz!2W!4|{iG#AHMGo怢[C~~'왺nb0)ZbAej G3浥6D)L9[|S_~>B}D-x"MhVV("&:6*FJIkv)" @G0"brT [@F J4l7D+.шVowVy/[tl6ADFjN:yC `Eu4iBwҁD]*q#8mlp9օG5 MpQAO,F-$f-XHENf*N|q?o{}WEHr1ad d/+К,K M++)g$(),s$yBH).!་PqD'OqAdkDtz~4|K_k$f8WMg7%y~U 0kC0rQj`]8^0@#X$9!Sx ZkB IS/*{!׷c2FvW_e<nBre>~tS~,fS]@]ܿwpN}m~k_cjML&c9wn7}m$e.c8|1ߟB,vEϤ(We YxLY~?C VFr6%Pscl{e+ۊc ྐ/E+2 ۽9Xzm5Hx41:NH< @րVKD ! MRvS>b}y1Qv6~E125,hy4 eHmZG$MTa)+G}\)2K=x~妨6Yґ(OO1m  7`sOP9" ,xۼz  F'C +tB=D)1i?k3Rgȼ%YT+x/Ah]7x+ITBh?&s0H4xC Ot'IdNCpü.>Rv3d}]f>ޭYI/nxJ{LT4nR N0IRQ _ SFz`cr`暠t|pv|Σ"QvYEiœd=!T)@k7X18nԫQm4}?}My@]zvo ]g[?|\r*k,D,5b:Yp|<ѣf ݻ{&PFaVoLͣ=اҍlҏR"P&S@K3hB):UΣBhӟcS@uÐ)pKGKXu!'@&K.xG5 $/LwfxDG 2 A%P$JK|E^TL׆xDeTŀ[a1G ˪P+6sE5G$xm)YS+Ee*l̂Mv}.>r}Do ~B hEc̠[o!@ ,gmml“{)!4 " t1S ?e7)l@%"t*X z ~y\ M^јw` IBc B(L's+cVzuͭ5&4[f +++eIxpް <~)]pm/ĆJJ⸫IlmPDY ģӂ_"qcC*A%rTlUe:6yPhiM[ڗk=!%nȼ`u{:EIRgtOHoM5bCi><)={=k.û<ǽC\I.l]O:E`|-B`c{T:@&eɨXT5wȥ"u?, J忁+U) _XZ?28j##qqZy|"% ' @Q;![FQ(TIB;$!JfhWqy o >Q(Ai@tʃjKV,sŜ _̅ vW}n ~mVϱ7 S/ c;,m2JyAލ? [YEt ";@MzR<'ڵP3,f 9ID@kVv\˺ܜۯg#&܌I'e83ɃdUe|i2&` :]wo.h |#A,Ϲn=o7]W ( K9G5EQ`4?S@+ؕDKz JIᓌhΥ`k킺͛j96cFASQDŽ\Rttncd,O3l869O^/Y^-ws!s?=ng{};+]ܺ~@ַ~ןd}rW|* |6o"@p]+t;Sƚ12 -՚~X͗FP˟݊r!~P't6aǙ?!Mx£;9V _FfmrNIAkD /Cy (1$.!eePJ1lY="H$d~`sx3 9=Ai4k`81g=1B <֢Bigi0X4յ9w?[[vЯ?AXbsM"LNBB@IrgT DNmg%,@*y.΃[ZQLa:ge*q/{/9û=Jz$tC1VXc74.ZAUgt[Gj"K Fxת)ΐ'!\@RY+O?1hlMxH#~/> dmzEޡ=P5 ;BN&B9O&,NIA@ $^J)H/(wpk3ҋ3۝ښ2q4*'HzcL֐%\rp?JGh6+xwPB%(lS㼥)BlM!i.2̝w(-06$k뽰 |ǻ{#IT5Aq6/gK==!!]"JZD4[1愺C1cFS%DE(#҈;$Drx9.:bpIm2˒y]@yxxp¤v;ɵWs._D?<{f <}oNa؃^(Sx!YISl gCwӻqdsg瞹ԙFΐ[4Cx:k9jūV.n4α5/{ܺ;cYrzrK_6ͲC* ҪkP~Q6QǷQ?E6EtI|bU!9iZEo]k*ເ"Q+*i`xNEϊ)>ӪcCpZ5${(,ORz pung%&ʂb8tg^=Ƙ34/c^׊|7J>?Wy`|ɷ_.Q &̪.-o||Nz9^|癫yS ӾqkG gwnI ~^"d\湏|oMP@+t}q}'-Lsm<:3ϳ?*Xu+Vsʏ378<i-B)C?cOOYErpEG9Z2Rrϓ,#]ᝧԪR#ȢLUtzD3oRQ9]6 τ@Ѻ6}⧆n/U+\)}`-g8%3lnRSbi2dL,{Yi'A$1DT?c)wn <dY?פzQ)E3bHIdm]D#d1HKh?9s?W_e^- 0RL"43DԑׄТg45F=W㬥+tUK.N6&?':K+GXrtI '5#Þ<ܾޫ@!(L0󑙛шfhemk٣-=+tdHXÈ1m Df΢774ohZDۘR1᥯}Z_D/E^^ko?G-O[\G/ϣtY)N_af%-xg1gTx\cDI#Z锞CM >o:E Tĝ]XDsR[LGV.Dz+:ˠk  W&R =bXg =UĴ p}dsV (+RI?>BI *y1I EP"#JB_ZO].tdԜA&5"cg<}U97M,cQ7 ʒȲ lSdͭ1F ia}dYYr eQP Y9gm*R#6F FdƜ6ꮮ7P$ڤ+t&z3/`<=O!8l["+J: Av_\P:,[&ŐEEKl->z4Hu'?drch%B 5V7\E߸\/ ͍:M_aY.knN|mVIJz&Khmb̊Bd|3U\?!%]^yBg#1?yt:dvbw ,~wަT0 Z$ӁJd!ьwsG<}#cmiX2ɝ[E 2iݣ#\B] .$hb'dp9K1z2u4]L S:\b0j? %πI˥TMõ 23mƥf_s>[`܀֫8_Uv/W;zwxpb1rc5M]Ѷ-m#] "ƘMdpˮ⋿Ev/o k9}O3;3־R}_V!}`9='3Y+oR B$)% ״]}rm\EpޚA*E1_: :h)вTOIA풿lg;4z1&W5]ښ(!-Nc6BV>Ũ$lFc.oNLΰPs\$%LJ 8,uRLF<Ĵ9{RsRl}ŵ?x w2CF=AUW6)BĹ!YT1F*2TVI>dzAhMxCP75X*˘XEcfUA1I/FYd+cR״XqDyJ" Mƥ>'<{l_Nm:bCV".X.{-UF%{˳{3~o>n&|[9?˿dΝBz#|`vY[Ktx<7_y190Ȅz?>FkzvQH(z$潎1=ZYHاYҳ[cqtP((c1ȈJ df5oYq/<})}:W AJ~Oy67mś7h K^p^: 9^Z4EMe\24\Rd-%K/q5'z&M"e)Qd`\_3NO]fDu9o6+4sחNf#5. E95Bp}ttl[9ʭX o8ѝVL CM:RD]L1} 4.!&KAP;Kݶ'\QVw2W̎ȅ%SqI3֘d,xb $_ixb4UՐ+ĺ"$3 {!a4gYC3{|AQg4JqEC~ 9Ґ2,ecDI[Ϣp&uub#b6H@u#"@11  .=j!4{K@Ir7$U Z.om13ͦbV >~26O>EK!AX l0B rG&.Z gÐQn#fRc!s'\a}mQ6dz0g9B02Op)^Ή!d-͢FD$KuV 1y)y.$OS7Nଣ-KT8kËpְYxD!͋;{.J*0L]."2yU TTggH/leRrbwyg[y1m, 1P5Rll3Ǯ b9clSMZGm$GH!:K/aZmUa2Rmt&PdaRe > EG> ۵e>bƧ?yRh׿b6EOF1%0 :5KlHr2kQ9AHZ!EpP gev|c:Fw\ qrpriEH%MC;M_zJ hv粖/zA@:ɛ$bi 9DH!-@?Ôb4Mz`](p1% <*qi`046q IDATmM}tCMʰdܜ\qZ0h-u+)z˗UR3Պ< DH~|2&d.ky~H6Ek& O~RtW?/^!^ڒRI1_z>}9|WǍ181[C!^PmU-FTy6YIbDޛMx\b7:ISdYҁ]bݒrйJIH"(R~H^V@N1RՊ'Wl@qF2{)!ɋO8t[,8],|XR de0R% e:~>(8WV-O_{2,'SdTtQhw-zwxxJb_D?Ne"RE:-Fx\1,2-0:"C eL2Ts֏\/E1!,VI4 jZwI{vxrAc>[+P$N~. v4vItrbdɽ%oh e ^J"ZJpBrwe8iZ2]bec(VהQbxɌ{cCDn߽Ml+ֽDE^Xo~"E$K '9k+#x._^u7oL \`tΥzɫ!y'|c'אX]Ak){0? {=z,|P"LrqwXmA"f e!og  (FnJÜb;ݒOgf{Bvؚl>9$7"rBؠq;9Vuzjs`&[5Xu$im.%Ϗ'O=O=mw ~᧞co2 o~[<ӟf}JOy!OO2r "xun*7xX5<<:a`X_du͝+ 2={AJAg"/AsG1-u/٨lԴ䲦=j(ws!6PbD(:\aC juv+4^8Ȋ%Yb%gd}D"n>fs] Zi"A^ZA,ɱE@RhM}ÙTM ͢gPk=sxP>'odιdԎCF#%JI2 8kЪzܧ30pOG!I|ȋGRNN9Ne߾ǣ2=2C@oqaSRNF°C~2JJr"#ӊ瞹ի{߿OpuT6WnyYEb6oY.xa;B`x:c6_S7>19b? A?gih. qtK`ܧxWKl(CuT(,غbd|eoP-qޘ[ NLdjm# %y6`Z6AJM` 26ԘQ&kPd +eܼ}~;k62Xħ_!Ȃ9}tMǢz6}2e͒咙rşcOo~Q@Kݻq7='xEb dK]ifpj1& 1p-('CYDYnOh=NI QB!4]CJX>y(%ٚr.79D"ƆV`iҺq9Ys?OR1b&ܥ[JjdhT8;BbĽ׿QC4MâӶζM9V k|LI):EQtmF9|d<*YV7oϾqCl۲Ni km}s2X]J$E9ZgB-YBx@{H:55lݥ0 bJVܻQ(`3/oo}Cŀr(,G M!CnjXtMbѹRF|-ߺRg.`k,rp8G)d.k7[{oPDΡ> !>Mš\ =uQ>ǹձh;IJ0]~8ɀ6""坧/pe<M?OB)1 C aC$ 42>)) Ã2*r6KPuBMGc::bll'Zom>n]r^›3g"mT*G{<7_>娄\JID\N0eZ1:L[ľ3QgH$@B^n%1 l[mD,,ZD2)4LRjQI2r~ڄ]ɤW B$ /YOH$wU4w|L /%[{rxoAJoԼK>)BbPaVM@(lCƷ4(6b\X|_=+;|g^`0%!AIeMA`h =Br>>/\!(fAI @D31,{{Evdʰq޼ύϧNp/K}*BstKn\@K-Z* F5Bܠs{wDmr_8a+ Ziw/G:rYes}'Z9il\hk\){<g"jM{ga>:fpS{.6Lm`.!ȷX.G tahYso,ĦC6@Kp߾|KEr}3vyzw,8۔o /2}4g4(e,hgܦ^8ـ`9=װIپG7%,^ElNCp-\PT (U릔z\h\N W^ə@\ bW>. Br!khTwclgK/&HeR>vcFq{Aj HH2chI,Otl^ܥOgi}1£HL/!xFÒIy(I,X"z{!3k rI[t#dEI;5ʼ@ɼ9i4MlVK'cϱ6=8· r> U]a=*B^ee@+J&Ɏ:]q-.Li}#0t.i9% iibD.ZKBZV ~ [Wf6rp6*FrkE^9 #mTkwmw͝Hyrﳵ˩hpWXM˜&ь>m_`th~8jƇ 8i1c*z!vۉ!ŐfC)J!ƫ,BiL5K(m1ku^LD@(Z1m!\U>g5VVfHߐUI=H e82^#%ȌAH:6yOh-{Mʂ?dw-Ng3nwߺe%ZH4 I6BT Q,%*l)D!<!i&m-ۓEEG,3ʱLԩ!2$P3u۷ً;</?++_奛W{H"{t%s֭7F8?IH8:iaΥDkKh:od0 Q::`d}ZQ {{>*\*6˱(3R_1.I{L&FhA|kl)B*,]dQ| Nl_c6daŲ>ctYmK>R% `<szrB MmqX02dTʂp a[!uXϣͿGs~sWX?6=6ӣG̎OfXkԜFFT,LQ)K)a$2Ք9 ~w]:X(6aSÙOPp=SOsmdZ*~;[RRf,,) hǭC@9=R7 kÜ~ׯA9 41Jr~s.*s.YBV ysW7>ױbm#1FL]6XB& )52&$OR2D(6HS ҃W>*"O,3( ɔPB`#4}r@^kXZE۶̃cP5BbtFtyp!z{ k[6NgN紦+x%Y̦ +}?hZ~ ~5񍗩5!.PZ`6DKNr.ơ dDQR+ŋ dE"!FVurt3/L<1$<ֲl*LqPXyzc\o-d,l1ɰR7=^ѯ{CF)CfL@,Q$'%upv`8Dt{ %A*!%7ہ[Զ'Eǥ K#NEHн~c9K %‘55''`r8$/3:Ӊ{vӊq[6{ =sp~(Z}$1AccڀA;5Ȍ L2( ,RAn.%4ƞBOc7W?S? 7?:{΁3ޙML?d^5̬'to5tR]dS¤aX %h`c(d%UvkLFjV9#ռB.*d|DA#n=E2B{$Y1ĺ4 rۻdENY !=Eтw 6 +Bd0yUDEE25:hŠ,RPlowawT,S*w5&z!6 dMl^,:3G\bJ4mDT1Civʟrp@lQOsFQN$ 6MhLUݜ.$2t3P:{⠤ fwG̸N3dhZkWD$1&p+4FO|mnrm2m9W ]/ rzO)6:/s !lAiMb^;\659#Gw) a 19psZcC*Ta(8>m Q~&]Rm$iS15"vYѴ`Qa=ε9jy!Lb8=apꍫܾ7usRjIގBt}6B ɐ=ɝ6&JI'VKAԝn[rf׳N-ȳގhdLQP*G!R\X,H#BC.x"ȸueV$39ռriyg?Z$8_?6]Ӱ͘NOxtpȲnh<шx6(Ȳ(ȋ1&K:Q,zGgM m=m9^S* 5TX QWisvq$pݿ] H\zB)IմLąP*M \ _$Ȳo9*kj@qa-{lo썽[WB!;;Lo)2Itt\U9g̬@HAetgWo8kCVFXd̠(sPR\du"g1 e/KDV"dzϿ>K[.qy#Xѥ̫CJsH($}e~aRV/ IDATcp ^.kDw蘦,\v?IW+\)|ִ D؈М̘H2 <}OG}`76RR<|  '#Wٹo˛JA9S zp,m&,91EbL1EIQ 77^D1F)ZOE׬wp>&gh ߰&gZ8◆[l_M&!kEG E]LgԜ5t؁$d.&O$&-LP' 5[ " T;P9{$1zHcxW@ҟY !%ˊ 3xI1(xɔHsM' DѶ:K~Bw,)K۸9YnݹM;f SoAg|u8nJ RDd0Q P4 H] kE4I#K9e. aƨ(2E{^<1\HSb=7xn:N?X2;8ݻbj' )48\K?)r\XdeӠ#t,}}^T8ENbcki ݧݦXbMDFO/SR:yMȝיΘ/Eε:BW ~QtF"O -vK.xkQE!!+4QDEdW1…Hc rX؈-޿x sTq3 P-s^^Zc-bz=/[ɳR(LTS+*2pU%d.-! "/c"FL.mv*Ym"A$&md!1e7`mir1OyvpldceW!d8/{yNENQY2yNYn6 ӓJ `"vEO!K RZ̙'%pk(-?|w44<3fS I&La&_A6 *8bsB!&/zcR㴤yj># \ә\; `%' ϱ}kq9t| 1^)cYŎ9P(2dH6kɻDZ$!u%tJr%lwdL&;/"gӋDMKiR SV,Cc{DO8:oqpt5`1<:FFkln`G=1ZM]o~Wؾv&+[:KXֺw~xNq֐3Da.Z 7hX 4ytFS7:(5m[ TV*dD:AOk я%*8`2!F6wmHS锲9FC4 NFaXQ9ny&iEd~k[OF,͙/llo9A):u:iMDJ*ۿ=7Ǭ`7Vx><|H֫/U^K9}"YBt >Ҵ@7غB m oS*kkzfH5t8~iY7>#3Y.K%n[RDբE }fǚ4a=#yqҀbӓ{*LJ3yPBे@g6xLf/qy^~+q,Sih#4%PR$0%TGdrޣ-a!X2ćMeވ4GoS]+*XO}v.W~1yLyo@6(awQJ4=IY_e|+?# ;5^qpzH]:UiRõ-mޑkD)6 BD()DI+|DA6,#J%6V $Fwɼ&@1sY2x a]?Gw81="%9IDԺGJ4ѧML"(( urY1 iҔ~^γ\׭o.gR1|@/R+=x^8i Is!J1q-@gFvѺ1y9-=ZF$2#ɍ?WXU@"C@8Ƿ ?&VKODu [VLn_Xz1Tm ,Ez1ސ_b{w1J|و[ED TV`GwGL*61Auʠ((H5* +:OZ 8!hT\фR"o;t gTtpɻf|mI])%ɜ{|0'%W1fu#gu c-' M+Ot2oΌ?)%5" 'zi> ! M1yn$UʠMkaJS/oyej7ù%i$-7w'\ FR7hO 1xLe12N3 hM#-FיE뜍o=6rɑLGQOi7oW3RЊc:[י#f`ʍ@C4>D[\Fndgǚ7L2 eP\{\^w#ZU/rfŒQB0()+I%&DK8Zm֞CH!γF҄m[Tre/Ϳw^G>`z:ux e ~\0ͱuJʒk\99ݻשͭ+ .3/M`C`Y7O+?RFem*0ZwLUC]/999ƹќo|/~U^|yy B@+EQ.oorys FE>R'}a? dcʂd+u)n_{76Kv]PYN1 re_Uvqu۵/_?prpJ)[ɴ "Gf:zrePYFYW/cEAR@w{$ID1IFH "2\f4P-dz%^ILsBR}leZ:( ܨGg61/ Oz*2lR e B=sÈۜfÓ9mDQ $)"XG3hz5јaA 9ӇoacN5!"%J:ӦI-<Ϸ?~Rx[3V $Z bD5>i%1?^sO@:6FKEJwdpHX_KN "G 5 1J(O>]HXUx4.mZ 11X+@ݫ/Dp1OY4Qϳ<>:;~@h2}ltVj'DRPg_TX!I(m Dptxyfc5>$oA%>ױFsdbPtf @im{2F 0^. Q㌠?Tg@J1o,K'alm`!'6H%0,a,?yϼW m?젘'qAbFwB5Ji:KPەJ&N {e5a&(M69Q2Z[۠Jo{Lp &O8].k1UvnɳDeh;xy01􆥅 ([־|qDL-Dc0FXg̈>R70G<<L׫#Kmb'Zm5ml£G,OfTS>Sڬ2k@s -< z fĦ!߸ '}Zw9q AbsL%Y]l#py.q͌i"ḚxY]BX+ $i͠ .EnZl@tTbb OK-%~,* U ;l߸YAgA%5dk]ps/Ɵ+JL9@HF{G r| mS!eJX!BkE)2f&Dtzӽ2_+82Ɠ &3ln ~dn_ "?Cc| WWvKl,-OyuGw6e\e: cb74w#Ӛ͵unݼ:M :S_lz_~u^R_m'"hg1ⱍg^7`C$ K9˺a<(QBb:gRjϨA'Ofh%q0VpkLh?>~%Xx%wIb׆Cwd|+耮NQmU#D)Y TS"]&ښ"bH + ZD}KޥT.@Hs(y閔"Ҕ'`pA$ (N.u zR"!DA ) (>-HҶZX4KN]$KCe R%Yr"v݃}1t܇o=S=~2^6٥ų~kpZYGޟHYdJɳC&#`<Y[\Z}cb}ΕX[_CIh۶Y^&_)(RHB;;#2驖OgL%"&lsXQJg͒ _z~SSW-(z7|3wޥ8+kR 6xvQIFZZ^p#U\"d\svSx"^GRVJr1aP P"KJ1sM[\p{"Hp4f17٣?duOO(O3I#5WjJu,_a)ȣH8 [/sycjHjd!2BŊ(yCcG`EzR¬iƟhDFɄ<#)"`nWŒOl0'1,{l .5 $pW(&1洢B4j=z~{ײ5+l_"JEN0Q}.ƭJ^,: %0'`Ҷ J{A"Ia^cC]I&q>Ġ4~[B)sA((z\a>ugv^OV, yAڠK^oao=F=4i5Czp9 uP5EfGh4d0`]JRFo&Y/w?ƻl8bɨUfQ pH!PRJ=ਫ%)T, zzE@3PjγzuU]'Q@?:c%șw|&I<:Q@HRd'ό`+Cb&ɈiK` 9618@ֹH"Yڄ35g a2dȝ;Йѓg<= $M]|J(a2c TKjl.#.ܡ? ٴ<\l\#(D jĜZ`sµ[ei9".1"Ly?g1hKux% JuG4=!Utm^W:ڷ;eseHpis=8Q%><3JLQ+\_P> n >=>8EH "p\OJ+GSrUz}EUd%TnG7!)E.#A*蓄2H dZb x (O~(DjYTj޲8:~SszcPW y Q NN k2u>/>zJ;V;(ڂ[MF 1:ר"' oh '6M̸Oޣ>1=O \%?bz!\eckAAYl$JLCHSڹ0 Ig`&fKoΑ/Gaē ziII%o |/& o [<?aXFCŠjÚ^ )yY0,X"y.>z9\1yqڈ=LѧwHя4 #E>,9))Wi-Ě0#%Md@/Т9VBMeO2}H NbK{XH놃IϓN?~e>wD^QcH%1,gѴx!}³gL J2^c8r||H]/Jl-MZcdbmKӤHw)% !yhӒXdCK+ܺI?T)[Q(=HںExYM,AIO}37ޠioSyoꄢLw*3H%B+E&5yVJ >3/kxhgsϞqig^7%fR@휣hL@$eVP W#vf(dc8?pAUIg"MgSc5D'a1QXN2IbHޥYM :=q)ѲR]( U(B. #?>=z]{n/v,YOkm:Qɜp}5[(]$1tYϙqI~`$BQd.I*IY'k=ɠ**9d}m;؟ΉY|u`8`_=>ejx΋:֯}`?Bvݲ?xBztH^p*Cd^I;*|a5)TOo"oKbJ^\gZO<1ߤ/0j!4Ao7Zab#p1J>҃i(%Jv晟4 ȼOof\Bu: *&L{#E4N)WwdMOé^kt:gqtĠ $I;8X_'Z1rogc(ǟ,AJk͜Y噔sAshzzu 0q\c-AybBhxK,-jZ爺)38')>Vm*ַhQcBFG 5ZLYԧCTҟs0+Uppx1 P,3h)y{q>ǀ%4A+E%jAּ^^`Y/msg{d!91B3*7x lmТPgEKp-mM7OۇZ"$xG &ۗeGf'̗ MEFD"I\k676(W/!LdzB0QJk>} ƃ?r˼p|hzt>#u{..8GeSS/m++Ja2nn1y5bjO@c u!8@ )ϓR$RQ YD3Qr %6niC(:A 11R$*EAk\"!~k;Wx!޺P2DVL2%dNLAsMa]yب FlnN[Orɩ9W.9hW*IB0 %0REˈp% W^Z,yx[Maו b)ӤPIld>_d5ji~yHp*:nb$D=5g)XD>VƮ9 wTsOcM"ՇD{O[Ķ7ɴUt-!X~,38L㽥$ZhE @ڋFʇ#"H=\9E/a) " 3LwOwUז˻<ϛU5Д#]]Y}=0Rxx @" J$& R&tCLiITs62 e; \PUudniΦ>9i ec[m*!X̧dJ0ՂBV9jN$ }$U%֮t:7vx?K/b0<,G p> Y5YϘϦxp!8ې*44ѐ1 nd u\tՊᖢ3GojrK?a3N2 $IEs1ut wȲoDGKFP Ȅ8Ɲ68J yݿEhl_;=Nf \㨪\d[5WeIe,$ZӘNdw)67޼.O>~k~s) )_nsuSH PETzD9=,_ Y}c<6XҐPD~Cq ;J.kT^Mf)tB*JC?#jT"Y,Hd)s! >#.9qmg6ɜ{[C$'j߸JSP #|4mD 29>eHM>DR))] /0ާ6bn EEڸ#kkSC["an=7{2qN" qD  !+ʐd*n/Wh?"Gx _Wk:Å8gdH7(u;1k I $T%ȳEJ(qv#%C!zѨu=gTqۮ.'|FtӇoP/ΩqDb5p]72l6J&b qBF*ĵH) E/>H !x . i/WƖoAELFhh-3Hk0JX)6K|1 wхf$(R poR\tMc2 |O8lD&?1v(wq? -w!cIܗi!ZGVx67lnnsmX [R+~tX-MaDF, 0lm$|wx$!68ǟag=LpP6!tٌbpRῆ, P0!P8haq"`}w=H£*uX#$2K8Cd!$;;CDpӚG& L* w!797e <}xɵܧA`mE"$ȾB!ۅZ4ggHu<,ke5+Gxɜr[9)73Y5 >>!b<(XuCJgOLN笖)S6@ ɜtIoۦ? =N̻nTiHfR0fԊ[nK*=Z 8iМGEu'J  (G) vlS?c5Dvs Ulp ǧ+C^^(ż\0(1 Rw8`#0!I4EޥҚTJaM4! d$  ^|KpcHQ*69 ڃs۪![V4'G`4h@$_^ <{NJY)J#sa]L9ƛ}Tn_7i;1Phk ȳ6Obzo/8bls6֖("6O\]*Why% yɝcuM`s5g^i_V *~~dH"2B<*IL H/I+)-~$ 9d*|!.$Bh"ּҋh핥)1Jk&TuBRb( VKulnp~>Ř&zX1Hz7'4}67d:oS.T>>LlRE^JO$64JRT7s[s*VD Ruɝh|d`V/N4II@B;rk1ֱt1kq39iy3YAn?{o;1E@Ң@(㽏tdž_ExMYt|S٪<ϣˮmlp4غ֣UVpagwbV-P؀ HV1]p2fRE3Mep*^dK)@IE7䝘x+LEd[bSDdiBoܧ?FQF`'OR5NNMf3 ^w ^rEkPdK!?’K@k BJK7(\+JhL/.}O54}mڢ 2Y*IR]Bp_\u,z޹џJM;H 9Ohfg:ˣ$JllmveJbA( -(*5,=>}ƒS%!x<%i2R6O]4K00/ZY# v_gwi2/?ǍX a{cd$2\P 31_?~{:Eue6*y ?DO/I hƜ6Zs%CLYVD@۾I2}!{/AϥtQJFi8VRz9mMگc>Z0?["\`Y68q"0-˟,k}6Y+5۽MBuZaqW< czRsvTTW#:[<~mg(eؿhٌ": vV1Yy)AXl,ѼL>-tłAq3t\p`)rp/:-wi.TK ! "IՁHߡ2d0О!uCF:A9Hl_ 6Xi u4ś/ߺ!bm: juZFwB B]DDŽChBuBH<32MP5Ql8{iF!nGg0%*9>u)Og̳ LPJc ^p>3k6]h2ٽ֢(c}j|cAE(VBߣW$·}bRUeL\Jյ`Ź" x*4a@Yf!IwiX bk\u)J (jk_Ns1шNId Nw:w舳ɄtNU1NPۤJ>jxR(۫B+C@vIAK/-JB& *=6ZR織m/%RFJv"@$d!L.G?ƙWXA?4@E7β:W(Nϙ&yRNS7|DIJutt{}lpF|;,HbGꚪ@>,!옧(RZ_WS(sk0BЈlIVC$;|[\։)|h/"q\`iu§~ _kb7*E)1+" .4BKRHZ"uhZ;O*N,ì*:7 䕻/q&' ՀyGDQג: fw_oݠ )Scy<;G%ժ&z^0Ll|? Os'ߛ|gaWScox>'IU{CV&CɧnyC6y<˻sQQ{N-ĩ^8{/OdfLՃi8C$Z J,{}28*T^t2$mAὠ2FQEHDRezPR2+:1LS8lTPE/=ij} ISsr>)G O?_@_iO_H+^KuEs)]4}D"BjMT>)2ҜTx^nоh&ȵ̇! !4,Mlmos2=Ao$J@f8g1eo,,-$Z,/Xo2F s.+BX3,S^K^ۦuY,+zZJ67.7z=RX4 [0suahl8@hΣs7ripj4( '!(Q@ ^<}3e. hϴ)97V&U(l)cHUdk-Z*ƭw&&;UC0g 2J 2srxPHO<,KhDx l.%Mqk,[r[C QsC:_QKH #d+Ht'[eCɴ\`%>7_'Kʺ9Onnàc<ꄭ-vww9>=LJCNΖ- I\pDhw)_Bhz]KT58x9ǎ2v@ EkkXk\M4$P D@$+.; %} XJ+1_',W'T(ݤ\ռﳹk)B:*y{r|8aw`׭sۥ_NzJf:F`O,.u ܺG|cQWݗ:O θs{L514-:*>6p|& &¨vY.SֆZ@Պ4OᯤHR۝lIyBCƝ//__+>j/Mq]"z3ҷͳx"m#AȈ$ "CW(JTdi[#fU)y.-/kj(WM>}򸞰:)(:uy1B!EBw^`S[YnHbz:=y6RU+z33_TcQ-غ7؞=V}xZ!(db>ݣ99xñ~rI%vV`&rF3Û9*g@\#AR?MsL&O7a 0m,14YRyrcAq֊R@$z#5T|MȈ~6)w>ɔt \,ΖLߜBԑ*>!q"ud:ǒJ2wa6g !P|bQ[㺩##bD(11c uS4ukm.ųgLy =l%m|T_ֶ kƕ{hA!XùAllmu:$Ax\8˦N~<:@). B ݬ6 yy(16#a?/LOyA=wػub%hx=нva\YҔ+cSQ)mhyQ4"TœyЏ#'_?* gb"Z..|d%4A/>")iB&RhchkD zd 9G#ѳ(R%ɋ:OB& 4B4Eb,MHiomLORc0;2-Y, .uۛC3^C4eSQ VMCSU4j(KyId̥ _FVUD+B ypLCm ǎCRx)0bֱcH#0hkGDB+ #8/AEb`}ٿV?%JDXU-qhxcH! n4$D O&!5Pۇ"'ք"lM^2*4e"44^SgjS2>O;n_dԋcʣ`+$F|wz]t999~[ y6Fƛ<:^!έ|_/'t䝇|7پx98983-sF^>\#v.uR0GV,E 25CfO* gз ޙ>_|`rL]!Nj<,JMd9#gLWR 7^ {HT9p`-vnȮs6S S7 H\`Ow R 7bo8N+wNНt{A;`I9g;:6:%!5(#[ @8簼gssLcJR*ij 6>x1Tu1&J:quhkxCZk櫊ɜzlcƈ,K{6'~},ӑmF v<=9y)%ly(= 3$IIR֞hjFP')IuJD{K=nxٖ7,!5VNhgEd6$YF4:.TRQBDi">G딴ׅो(0/v&cZz p1,N uSr2 B@5VLNɺрtFU70m!m%kji[C)N mn,KnL/}ʮ u_Mq7*2\ Q8;_R-WA%W{ʲBMDޏ46ZW 3o9U%Jϼ8a3q?B'GnEl5$?a+J-V9VB$=' NDiUEY7ԍ[3A/bMӾ5~ǨWj} &ܺs7+7[_~Ͼt{?|?ܽên}_of'>q?|(P!I@@P63Xs &zeEu"M4X[T6lmoἧFxϑ=[k?m(M%`qG3)cl.5+#[;Dα7Mtn'54.)K䜑l".-uc99r6a8Uoo3O|a#gXRLo3ػ{|yH1h0h !1!IRDAAӐ]1"Hyx! bSŃ~")s يE50I2Hv4QSX@KDMv?چzSLc~%եkF(1}Ey⁤IĨBs%iHF!K? %nA1豵IQg'r5ջur!QJc6A#C R6G#ΦgpBERf(ȔT%[NAc lnqTNm 408W*<c T1(TJay1pMGhkZyi:or{3*{m^Xj$kׯ{DI$+ D'D=Ἇ-ѝfoщaf4ޱ1=4rMs>_%{5+\CRQ]-hKe"a t%Jl;oswI3͜.LYI%?%p!;_?9ךstHM$YDC@9"_DU6H IDAT/&L1F\T^P \x$ )# i} LOaЌ{%/#>:9wrvtV ן~_bcWN@tWYN]J;AA*Yu;DCԏA%phE<9ҠP*F"F:JR) Xs-1z&(src!wȳo٪7(4/X.JdzʃS \Op Nj2X.bT|t jRqibXD(~hL,WLuCp"h(Xt:T$)J^n)j풼@"$PrJ3d7c>;wae/x++9O].ns$fv+X|; dZ$)>_|.YyyexdJx%IΈ뿤Y-~wR3~~4"l2qWa2&=p'WV=*(Baii(a ҫ7so/k5Zs9GZe]Hin:+ΫG!q@(56sѴs%QZ*عvƐ|7u(_1襨̱1L1|@KOvmN7鲢BmXI]:#,m 5[)6ᦷ툐?6/&YQ0dƪܻNz8h+؋ϒ{nO;R^wz[ _mHe4E#")JlCDx)({'ItղDIxo&'?OQT..)y$$.*?;O5ejժOc-I, vl:]I??8yθ3w>FbyȠgYk|SҔs5贏HX~͛,'UUB[!,e(=G\ae,:c/XpQ D2"RT%V@`T{<\X6)'fbK8?6zNUp΢(푲a ^iZ0k:{Sͯ?$Х=Sd9!ϟbsVJήE !Dy$O|Rcg !I46 Ʈ`xd@)e1K4ժOYcij\. !NQdIBfH)4U]]vo7,8{gˮ﷦=;ܘ DQEG;ʇ*bR)W*WIeY5qAwg{)>b˖Īj\=ݷ9{ϠA (%Qbc T}X'nσCd[Fy{|@WR# h rV~wOA5S)OK|taAtv59Ii"F|MZmp|ӏoޟ ܽъa/sp3%z2 d*)Gj i[ԋ9maKg3;>&ͣ^:';&Pa}:t.&"tf-eSJAedZ0\)EYqrQLK]mN!gvƯ bB@:7)z3%Z(Trș,g$%3Wn0ˇ2/%fowNޘl;!p(D>8nЍ#i4m0z`;vSِ` 0u%d>ikQR]'|"CkI |PhmJcܛg;wkq%RĹyCbdRR<7M8/&&ܣYǹi*P"5gCš"H[5.⺩Z8%aʟ~"\^iۆihچƶNEɔW)5YNf4,u61Klj"%í}nݾsRV9ֶ4M>&wsE)j:1#aļ0KUգ7 &J<||:CMt\NMT-o s,@٭矕xHID@ dfs$Xg4[KW㭿sf.FZ5/Uc~vDsLpYYDYΗ=u_6v)ch271uR b'SY-RdJ b]e I\y.*d^PGp>:O1M]?{&:!I4e m$t#HtDFk( 큺[/@g|cmU6YtԴd;#g~aYs|q XФt]NYdI-G}s/[o}:?$jb@EM|2+Ws)3'Jdv+"AHZL *te}@cʐ@ƐG( Ƹ1ێq=otں!eLJ&֎29.Ԩη`ˋT4A@dFŤ((lX9!R3 -j16K2Pg,+@%hHZާ{ ێ"uS$}B <|/لD:l"Ұ{p5O^\eB  75 s+kǖ2Bƀ &?goo7 T/rvIԌCJ#>lus>LB҄Ik"Fܺr_G_}yΈoȳ%y()+M n] FC>'2aGd5HAʉa[W\sy9A#/.̐ r箲\qI#dn"\+y98|9I'Md$ .'MG~(Ȅa!mi@+|ѡeCXna<9}=cJ3B bN%)LZ[![lrDf1^3X.y>_r׸uyqZ;a +\=i([ԘlHCvWm3h%m\}ku`{x=}eMNBhEeLRse~HhmjZңf{5|H,m{ԢB\X20,Edh.ꆥ2ÔW)ΏgƁ d+nsJWZ-9`QmxDh>e^ n. rYR@?gYf sG\J\״Du)#J?cEiY&wA!|)(˜Rpo`1)ѺVJC{&n uCۤD{ PJ%Cfذ֬_bLJ%k8 3O>қo0;9ǟ֏^wGcP{Fc^E(uCg IP|+֟1^s) H^D"cKKlw!DIkۮСJPY1J\:Grl8Ż{1|M]_܈?IOz| R>ϣu,[ t:< 5׶ \`cJddcT) Rk=RPB !KsSdkBT9|x/;"/9>;FeYOhؙ%&J<(PZRfyaȄLA~ύ22o|GeZL\Ҷ"'B<7-Uny@QQV i-yPQBb )]DB+JR1QgI"ys\Fs6l*`εH!*>KSo;ޡ32%P+\;s751YG5UzF{λYEǮ}DwpH5M &cMF?9Opβw WdUׇ,K:J/VGvrJZ-_<^$ }jiA@+B"MCցWk t#5xQOX5K %Y8j|UK/?{h $dJ>ف1Ԛu8} MlE4:1|@:h2jVSd9^iӋ1eQm`#d 3#Z b"*erdUAU[Q\6i[b3eM)F6K3dxߠWrxOY&|tV&;ؿqO>\I_j2n_=DW}8&S!<_[(}޵)5m%!$q}!v^NC50{)ͪ:"HyrL󌦭~ b^ȸI&!t%]9:'\[|^mMTwmDPM,s)3暑41,@ԂSz^Q:&KV'|Q)a#LFRZHؐEw~ǏN^ݾʼnWɥGs%{^nĔ}d_`HY+.2#|).)t6mj|q>_?auM&sʢsp'K/\ݥW^`)CRVdJɬ@/ gg#1W=yL+=!.S=J4h?ŸpYzWU<%LgD;+BɵgYf6o~Q^WFL'|/~ɓMvS< ΎepuL [;9?9ǵSp@A ;kQXQLE p~ uӠ!ƚXαB`AT!Jʲ`8$T{{Hkm)w ih7Fk&LSe\'г)UBHqViN@ CڏT=o{#n5M5ޜUHDi5ѐmMݩFnw u IDAT/ Od%iK ;dy79qO?g01I _B6%<֩GqZ/ t2\@&c!ԨM\X籝ٻ&Jqj[Υa"K/GׯzumSq!HV[Zmrr_[>rDOe2 Y˫[Tãy`>tM* D\ H ("!z@ "]=t hRsG@]Q@NHDڮ.,\k:SwiPdrJ)yO>?XTڤ T蜲8rFW9?>ÇV9iˢMhD< 122s5E[bG諼m{Ⱦږn9=?#'+QU"d`Œòmٲ5RVZk QB1(+̉Q:91mY@Fe^U ?Lt"r >JE`#LW_7~ 8Ta2iZm۠t5сw͆) lC%"1,2{Z%B>1Ԓel EЭE9,/GO"_O昝{n HnO^d4кk;; wጯsQk*RzBA&Kz~Ž'.~`$4uӽOm d~Ƅ \Jlўb2O_>6b[Y@ xL?{#R8gk*?fbM֌h JxTQI!UK[Տ8 eqvk0h?=fxS_ 8o<5$sO_!.N?~9*jBǢB&L@vI1M*Xb$ t `C:5 ^ܬ?:K^>V2OӺEap0bث3CUfF l=BvsiVIH^e<ӄH@:UuHzZλA$z$9/Ds)1E!Khtx3Whcu1EU%7r5ѽ&@g<{։DHA"%be^$K="_%8~8D!]Nt]+C袔d ".ReV9:6hT!ֲ- !T6%RבKlRd(Ȫ>UMKE0[pxVO(, <2s) )9Ls.2eNʨeF6|)#ʪBe\/^hi]ƶ]ƱKZdjXtN^}@JEY" P/S"QY!Gؤ%xx躎B$p47:|[FYS5Kqgi~~|ąE@J[Giny:"ӳ%ș,4sO)ݧnm>{nȂ pb%s<68BBc(iW | Ӎ Q@Kd&Cȵ>טM<~#t+y~WwRUfyrC~|އ:C'P9Lx b x$m*̼cpg\".X-Elʃ-_}v}Z/R$Rcb2:JtJ&_ 2(PR2[Adx/*De@/4fيM I+vCNg\*jy> +GwZtrc,+ȵbuF!?9nD?0%"Oekkoo_V9AJ2e)%9Gx{dm$W_`W/tDg;L,.[|` "#SCT.@%6X{}|Ck JɴOxR$=;'gJmC{qesFWp4vAXxrp6p4ER$Kahoo~ayw1}E!Q ,qe?n#Jnyb8o7)p:[дmQZiC*3@R"ti*(J"CKF>c;[\ᣣY-i뚶)<J?kgb5BL:3X+):6QX:mVuBlbnX4 |su([֠$h<ǭVF߬]k`G=#cOk;]Ss6JAp.Ew:ٯe7eilRQ7a4|R~i5\1 >DTp$O];*M;up$cP.-=c!Ǐ1"3 8oMlQ~7_cwķ~kܻ`]46FT H}C>xe}ʂkWc{{7/"O) }Vjp osR*&q3$w4,1K͖K=o쳲=D8%Ȇ&/ #ZhC &$fP%y@juy#!"lE!FJkEsEw]RC~^:n!xZ댁VhR^o6J)Jӫx0sgRnRIzv)*Q*GX-:ǧô~w{^qzvB];nݾͭ[GtAU{N qzdW-ګ2 sNtcW\ʬ[K$2zZo 8BiV,cȨ}jAob~?}Dݴw?e2ʭ l<ɜmz*:icpIVDDKM^T[sW~MT 1I{S7oE;Qv~!Nʩc|wI$SEpi[VbVj/#3\]Axk4!2ϸupS=hL*y{oG /+ @ _#O|.qA!z|WڶA7yq?՘ eH0?d^A7fG2*{B3DV ##ͣ꘥K9kY>[xJ)&s:@*OSZ7$©yA ҆8yNub/,xQk^RgG+ŲIt<2|ɲnV>ei"UN#\  "iN(21Z_K7otpwvt/"1xUb`Uפ< u@ 4^Ajmcr\UDjI68`4xRTsS%i=لD"y vgե6}s&z9wG{cH{ mg~CInZ >%ٜll<>T31$ 1"Rϥ %VR"wݟy&Ȳοw6O %5R(Ke=jE^/|Y=_~(3|:ߤduT=!=L2tQUǰR=n!{ֈ:t)2Ice{CnH5*EfZ@f Y9GW56h^ EQ(LQpko8uuNq#FLW///Y9Ji@Ur9>y}mX_^&<<Ƀ#Vˆ{~n^ٔqK}@h7 mlh6:ijAW}t'D;BD ԴFE DCy/]J㼃j}b@g_!,Ke">} ү0@!{%˼mq2bDE!Ȯ?kEJ%ሼ0АP^4@IUTYq>]l\%9x^Mnz+DB9eYɣ# !t9FtI%(xGO1~ko믓WhR#3o@[CBm'z7 f<8!È!bN#<\-얒Eݻ5gu#e %[[|N~oɘZ唅ڤ鷶I^j)8U y%Ѩp6lI歁,ۀMi-LR*Ϻ~9q!zD/Yu`xf['&"3gLCqeɤ2{=7V(Orֈ^$"cz6{cveyaWm -W%JgL'pvqI]0 |2=rb( I5"x89yȓ' R2e!U5ƻ8pQU}&S=?|DYlmqtrB۴D/''`Ѽyp&5 S(3Fab `x_9k\;na)FyHrQRM@)K`&+,z!`19_``N++xO8;%Z^~sDӳ`=w>d2Yppy .NXȸ"7^Y$YLHqѫL dF?XEd6}&aqe ^ ? wznmtWStxvHK cS_j7`Wy=f@-wFc=Ɖ2x c$M}21 !{\c0.Ȳ 79gnoӴVx9_.%RCAfEmOq9Vrq~l6DwOe/ "@.>vjw6I;69y5:LgA%FiR2A&DjCk0e&r:Oػr@VEs<5}{B@NKD1eE>0ÒhHVH1%D6+e!"#gZRhP*65[s {e*T˂v2!/Kl4xk=5~=F[knp_ch%Šɽ No6UJXP.qytN+vj4h:M\o~_yL Bc9~p}|nSsw;B*gm[oQzY3aVgFwsp-i&T,nDe%Tx*i$Hh} >%8Iiwy9yu~*cN!~9-=)K1*"WfEu2]VZ G!$hɪ:xؐ@Y]hD ;t%a/vIR3m4eQy!eS7vXg&O]}s7\Balh4@HI"eR7^z7WvXю&iqy`@3+7L^^jƉ^w߽uHX] EA4|8lAȥ$%do3Oy89>7ߤJ ۯ[% mt[S" P e^/ 8::ᝣZs6!c%!*{2 PHS<|U&-AϢf8 (aFAhFLgP#Ʉ)IbASD/c MI!Z Rz3_5TYIN`2Y{@`m͛WzeP5;w~Νm\Eaum[`nkXtx(Op7%<~ʞ "wB"1+ F`32ܓ Q IVXVxc[zʄ4Nyt$Q*!Mo'8<:g`5Z[*Q$qJJ7$y#9‘E`d|K/ۿqN3/BT}m ":KDBc+x[2e1b|8ʦDKɔ#nڇ 8+Ԭ:}|zd|[Ɩl\y06$'- 4.U=Ee9QV*itI$%bȍ~].spt" Y$9C.&r5=V4A`;h8v6wҕ ;Cu2; <  2aka>'1'4DANND!!_~GqX9U5>zpu#u;ŀ?9M( K%Q7'ZY`xJ 2s{0oX!-I!mփ*Э#A`}ڛ4UVX+,E/ RILD(hu戢HP5n01 6 |+/ [ " چ 0`A6Iq-6+UEYUM8Fg,BdF;0>9;A^`,KiiD`-<A-x?n}FEA"zYA )+Xo/<zIRFxpB7 't ?>l~E4!$i@P $i,Ֆ>AȤs6RT?dAm͆H!4M7"<BRkKYլln2 5%ɹt&  IDAT .w|}fqsOp{{mexeVuzlv8 D+ps /}DB;Oy89܋Oŗ_Thf.+3P :K[oa*uv~|"#}pg 45Ҧ N`]P(N[_.hٚYڠ=3mT_Dzbɰx$4 !AJ,Q4F7M<ǛTVy&:I),E;cZ'A@}TW6Y?X$" #w/S$yȨk!k+7"E(lmm2PQd2^vAGOw;/zt?_O($U5xɔ|<3lle[R9"> =oas#\ "YyzG9!i}HP.dΧiR:h"2ligBn*WJ*S~!ALW*y4M7 u-# џmX"H5$trLB~)k f <DpkM;wlnUB@S!˵\*b0"XB̹5  C-[o~ E" ϑnaZqyJމy"Bp8,V0 8;dw+g4J ~)ف:w<`2pD<ɳk-?z ]s>ǞI*Xl,b4mE dLEAh&sJ +a: 1mI6ZY8;J&1i6 ^9уDYMV's~zHˤ݊]M=g5ϹWId%Rqh\&Ȕz̦;"4\][G-nr~9e\N2I$**7.'cbl}NeJO\{uS!d7`}dbs< ڃ4H3%6ĊF$V QH#Ƙ P$;,C;l2+͹EìˌnbئFFxAڐу||`V[fB\غy BG~10x\$XQ֐1>N Y2Z40 b4McDamB$E-` ~k,ƒKHkLdj4U,u V,)iY-ؾW NR1HdVLITdX> Icy5}DjILSɐlÚƅ0k>Zz*sjCro0 -%(@qJC>BQDEA) bV7ȁ! aƱGH)0 >$( E6 վ?P#/%1!zZ{t Y9GE­#n^(a{K<MɅW89G% %γ~i^yInO=瞼+H28cqMϸ]~={ n^VQ:lax< .8 =A@e2l/IHL",;) qtw*w6!`bw/gm8KBDyƶt} .'6UgLHPB&͍^F-I6$#y3Tm"qk㘋V sCUEKXHPrCۥkq$!2.i7s^ܞ|pच;jQΓ8$ZJFCH% N X$k iq}fZ("{Bj=-Y(  Th Iis}[L($OLǔ圦ih_Za920n&ڀՍ!I#adꉥ"A;&`o ySF7< &O2$q6xG2 `S_UC8)G 2ZQ18N'wkkkIJ:dcs"K8<8xhZe~P u(gS?n,kJotP2XHTon)HbA^6"@$IcqmjH/4Hc1A5xE|$RqB;ߙ3~s:>k]zki&ɋ.%8HR"Mc:YL,T1lKcqJɺDsh "ڜE(ZXIgu=6/󅯼k-;0Fm\I.xW$B`T9t|U̎y799fvT}#^ye2p7|Lg=$iF: q$JSXvBAVa>!׵F HJE}B}A=~_o-@iv)#KTux|JS.oDj#%-0֢zz&^p,ZaZ֬UM}TlAEfc ~fݰQdsPMp!NU^޻Q" ¿D?&h968'µv;o ?fhuu;+7hvH+zαfSMkv#n.Qu""GQkt Ga[N䒁d~W[)'Pq #a b; 4>43G֘-ee~dcz\ 9k!u!-![ytv#5>~cA]j3[FǢz\AFg=`FU5Fyb<5+FZk+$YKkaTWBbP( 4BBHޅN,R@7zisuɛq;W7'_Yx̭oj2Ǘ ^:޽׿Ϗzfnl+~?IHv}J['s!䔻p Ab$)S{H8$.NBL$1Ze<*ꔵ؆H 62z4<-Y'az8o|(R@e Eh+E -q`[x[yA()|VSUz!xfg\r,кStp>)Wol9 f1锪%sdLnWYp܆iQʋH0j@,$`, g[ܬ) ˓PHRxFU 'GE61$RiDę+UIg9iwaΗӣd2f\Ʊ6ZA;(LB|,Ż]2QKQS7y晧&lLT iɤfgo;\o=x@%Ե8 ͽCA{lyܧY"c2!øe*RJJZAvS6=Rq~:νJ/FIɹuqzQ-_#UCk2;,'v(!_x |]Q9aϥ8Tcf习HH T,S z@';µgEm9byQcɸ,zh[IS?{f_d0;OvLH1>`*_θ<^ν98FGH%CV>$Pk{>?{5(޹`Ϋ Ʋ 7B3h[{y8nXXa+dYLhSaM5MhYMg񶵕{6^ J`Qg/?CY/0rHMݒ`l`xף+1(qȢLy4IthVvVITH8*hG\ lsDq55=yaH"֖(m,I78٫+7^{gy[0G$2aBVY_ G}Hdb0_LCzҚy!U Y*5HRw"k RR2bs8L#Q%ETev6a 1N#)i#V)[6kW'Tk !"AJd$Eյg*c3n L MYwԴ4Ik#j Κ~Oyi&:e9IhsyH.JJʊ-~4AuVzտ_|ܿ{$N7DkA0ɧJW&C8]n0}/ٹDž$ZՁ k]J1E$0Om`@?ENc蚰 pƆ0rt ,ל@hnp'BFF5h㨵nqp. cM%2QR2O^/=ϗ_~pn$!ϻՄ_~?:Hϑ{-.cyΛ]fjj!!ιOoѴa@ȄQ 0?w{ܸy'ͧn߮~vnAcldo@[c8I7- R9B)4VV.`&a` k%Hpb,·]@IEGkCӸ:XD!IIF݂d:a:cEueHS8F?3![%"ўSO",J6W) "ҡr%{$)^`ףs<8xͿ;<Ә IDAT7xñz6˯PBQYO?CQt Dq1ob6 cT!GY-(,RHȰrꮀ?ɭCӘ.~0o" Q!|}vI&,-K4@ʚ+b!N` S d)@D8#yuDI]ldYL.?Ё"MSP o$+M _QC`@!Ă%nތ1TUEY=8~ez 989>YvٗA6?$ Ԥ(]J;."meP4{G jHtm q,{x Bptz{$It6cg٬d2Pz6k68Sx/>>]#g71 fveBâBGFkDF1Yq-^=4:!!9Ax az8h]NczhSrxpB]kt] [DA"m|6G4DQF#vȧAvDɘyø%KUC]x9d%ٌqqN8XxT9q|šĽ` }F0PIT Z2X@_LwxL;T uAbVUݔ`,]LSt}IJJgҢD ]P-n~4A5m’3)ݴl@ǫOXi>S42"g“f1Qst蚦0`mZu)Ǝ[R2,o)CP%mZV8)qV(a}kDTeEY JF(%1Z#O.Ie2ɸ38; E/|B~@[)EJqM-d -άVe -[ _C8'$F h5%IǓ?@?Jg GQs< T /8" EcgV5vsDHp!B"WBRDYicNcaĨqouyq8^eNXK.%Y|+ڹNZ<$zkqE+m:YYtzsOhce|c;˂H|=Qyΐ+O+zdE;1r&t%UX zEA3̴ƫ(2":28HVX\5!GXw*N_?k75ӭc޸u )y//~{%ǣ;$iF)HVr>woܺs?WzwN[)o1f5SzD/O1W? 'Ǭ]ȅgwdJ3)q'3d2[)em) &qЄ㗠1̅3ŰpAh[RϮ)#~z|mvHቕ`P*b>3U`΋ wמsFc.hnjg_g@KǠ2OK/ Jsk߾ä*iN픣( uDg{YŤ:iP2=W6=?SCpH&2Y.5DHTԚ2'Fd*;b׎PnxAIE7OGj"qD3phrX#^2CDI1ExUs8V1s@#:JSE'ƫu&^bS8HLX}E/G)1VkC I=*p>Rʿr-6%^֢ĕE>T,/@{]~#У`||׾ezny>A9&5yu6vzzH!ZpK=Q$HBbJtɋ1oy9c.}|J| E|1ƂPx$*: k m(Xk1N" ];<3| zw~|i-͂yI8M0unvX\L/0v8:>%\dHpjS ZHV6{]淸kϑ\! sK2e`3-\{ZƐ C=Ag >ϘA>[FE>G&X/ ˛sGJ"%sYIC$a2;TH/:GJD'l5G{ T>mLo#L/UnFﳲƐ-.\\ל;>|<_{ 1?!oќK8j^ʯg8bɢ}.ߢ ؼp$Ȳ(Kt; G=ae("_|aiY L_?w&zic}],m.o5._$ 'SdkVNJ֠rsὧk3ma͞,Yr[KF7e9e 2)yyp؎pdmٲdZRHdXvؤ(4;@7z73懓yG,Tf͛w2-V8.X@pMQUt'iVp%NF7acr<яDH({l" D8ˆ^˩޽{8;$\{1.K ;qUE_"lVcgSjС)GS˃0avt&M3t~b [nP8!믠k+0H-Ѝ2"1@dZ+\_KWW![cfeo?lgb%yr%axASX$R_!j ރTBPn<.LdJ)A,A稍*kl3^ JK4jߥZF ʼnhW/}WB¥-TUKf|䩪e9( ʲlu t9ƴ,bc!\yxyQ\dKBo'~W_#(Ig%u6NHzFEiECv>RjՀ${Ic!7 \;.R*:yxw2o$hM[*>~lq??)$KO  td|9@ꤹOIG vmi=DP =䑣/ SLlAINN#s@x΀ c(\*bYΝY ! \  WO0R)V4y~j k_" [tsl;' |(p"Yd9L HDPXiq"$&>Y@'3!MtAKRc3yA\GY #򡀰ƅ+Ϝg0bRC.ѿ>rkDy<2q‚[kT.+0eA1==Iǜj< C߃j-"6@ lZRƵkgqݾƹ'J588κcH9bZoc!vj=VnӖ1c5ak% |h}!ĹPkMnbjdJuB$L%ʒ<ם@s,ٚ|Tր2y񍿑 6m"ckL\mZ:4`=! A5JpU TJBcY)'czkpE%A]Yŵ/H;=F%#ZT@6 \.A"LpXYj$,]-& EP$Cf Ōg< 2- LJ=03|%-go9|k! v>^CHG'͂LJc&C'X}`L+Zj1ST!u E4b+B ñi6; R8 3c{VU|##m%Bhn3戟ѱd>iz ,e}HD[Q㫒NnbZ"B $x4_+3+(kx$6]@~u?A$1q˫|WN N J7+=tn9<~eq۷1fies:{o} ;@/)pv!;<H;)W> .!M($jB"dJ:ؤ.Rؐ"&yv}^"+zJ-[lJQc!Jq"*$y Kk(:ɑD(xǬeʏ'{M))u]x+hϳP8(!yFaJĴ+$*ƀ{G[D_~7~@Q$:JwZ2 uz~}1/&JB#XcX^^Dk[g;Wx?/. EgDlsed3TI NPTlޖ::NCI&{H<*qj- rṴΗ^ȥK 2ODAi ): 8$n2],h=CfSԆ[L8B !B`WI Ab%CReco-fi %A\=7!8\1佻LC(=p3|vxu>e.D*69zܤ+Pq `$:8׃`!xIzXcrkҎ*ckc d4?)\U\tϼ4K˽ӧ| Fv51 ٦zSC'B+'sVk?ּ^Lj3$IaFBeXېU=Av?f1̤?Ƙ9:y?1_G1E/w9'1 +S/;3HzmRsHZIcuD Wdl ]ߏ@Ƨ Oq<$<-? PkBR7*k&CvG lR-&(Eei$ӄTbw4`,kg}2y˼a/qel>>{K/QMzo~sYQZ7^{J;[!~&_}?K+X$Kynm??y+d&,I\++_?ӯ3>,MGp~x#eg^,%VdϳG$YB覈A@59AN>5 wB$dDH<6>M> &EmJYx4㹐RicOt8X[v2)ndd9ߩlv#̦h!'iL 3,uq@ !DMDCBOJ]9 밢<!@1q8c!RCx|4d+M0dSը QYJ>f5hJ<r0`$-K+TfgoȸI k[-^1ڡ2AYvC٢rw0L2~*="R(!Nb6B^!ls!, T&gmhqcm$]GX4_= @iܯDdBpꂧUtØ˗.1:r{$(֐a4"=n|41+义ɅO"&%t ?Y1ǯ `{{,8(g%+KA߮G#OhT/bԱB(`V B*g:F3g4s< x'Sc?CyW`cM͋ϲ*Ywl2FgnZmhF﹦$ Khbr&.&jLa)$*HU`yl/d%B$@n2 IDAT6 1;.2E#|= @VXt z,&x?燯YM-2*AgB=\bP@CZM(AȒ>lAUTG{2862#x^ᜣKf V׈OIdi]/9A-^r.,AF1a"xbHpFHL >z_%SE*xBcAa[Kp|I9 (e) HXN(!{=>nSo@,db~g{h< ɹC; 䙤>vNҼEV|7{/;H:Gϭww}ܦtIEwf6~?`gKpt9VWL0vygIn,}>K+g_c9[2;?O΁Vx: 9=utj.,to~uG%*"Wxa]dx/QT56__ax}0"-KDxRs- o#? qS?17FwkdKQLA u4d2xM [(bC1U{H[jr&hsrN+Md8BS0wDK20:+TEIR.=K79N( cr WAC^zLA#̌$XdH[rtK(/u>7 ɑਫ1[{ w&ŴbkCD#U OS$ |MWcC Y3gT92g/!X'& +0TO)΀$,EV%}mnT#|@$zxF}R5@JEWOKő4(/zj%(w^U%A&LbQ2gV/=KK*bk‘BZG5!Y`%GFXEu<:xt OyBM/O)x(&_yFlJU._&(|OPe݉&Eckk8w6W= 0BjiMsqL3 >xVn'JtQIBurB4o.b#Y{0Ɯڷjw9X|0bOL!ĹPHYc4aUUE1\;C[# =Z@Hj%RG`I(y<_6G685 lӔ;yo)G~(lۿ{=M1ee;Gcp )6~mE9;&z@U_xᏸNn#@>~)f6#8Rpkwȿzu_%|QM,R._uί,{}vj]?}iDcg3TQqgWd;Oxŧx~N'E מ?o̯}Twwtn_d}ޗk[qOL0w^=l?p4b5pZEƀƠ#$S](RmNv"ě}W@^_oIĪQqtX'( r`,Ȱ J{AH%ɮ8gIRɀK=#"kH)aL sy=)Dx\1.˒1 Jd:єq1afJj}6c7 N xA v9OY ٯ DP:3wB1glҲ_p01N&O> Ͽ4=`r&@c 7Vۇ3#TA]pGkW/!hZAۤ~D02ABA{h5E@ߥ\8Ťm1[ Nz8l: ã##INb 6)̷kc'罏zbWdHvfߥMGx]l4o/(1K6N23_ %3d.O ~ޣsy}L*J1+JNXկ~,y2C|2d HEQFjP@iB)!y08 k<쿶.jtcyGoҀRɚܪ:n_VtSxG%tSM'\'"lSzγF){" ncohdd k @xkAk@JI!HOփk=!K\rՍ Kj$Oy6g~-δFZ;G@h-s"}HZ8pQB7cUqA 8zN"ӧyh;^bhJ }Y~M:Y?` | R$ ֌Zg)u,/ XY_ L O&H>xbz`Щ. "Jp0(v 3wx򹗞G}|:O#42'TYf*O:.V3sZkA6@AjcCEhdun7'PDA0/))I y!ph ]-YІ_#hІ$ / Ÿ cLa C/ CYԒ# : {sXT.@!CG.upv ċ2鮮F"A!1UuI7^DMmG$J'( BwɌxJ(T^d:.6"Ƹ9|pq u'0l+k9\sId\ gR<ƓX[$Y2Yoɸ6v DrVۄ!bVs >eDm 9k YfydN*I*%Tsv ?IlUU52 $Y;g/ e5sll'NA;b b R|EJB; C5^@  =л$]2{46?iS1NuM* )Pk*t,xw>R}pȦ14@B6NS|h|vNs/?ci<^~^~:9v2ӗx1 w;_97~WYµW'3Go;bimy;< ]?|vCd)Ji2Hӌ^1ýC}./,sYvxWypjeXpPϨg3%"X=7?M3[)p0/Nnr֍ | fF:pts>jÛ֤6!cXaIeZ/7f[H8֝ G=Kt o~O! \Zլ/t[gLe&(594JF:' )f Y| [$F=tR"*jyrkt:-x\rv+=ݣ#v(W)$$`1DK-DKdՍ5feU5쨟Ҍ*Zp슽 vlna8"2锺),E L㘐By+d8m)iNf<:M ~41)ƍɇ[vnDB/pA8lͳlf~.a4mR 8#Uo$Da[5sV%=Xs].*zc dS?P  Ko 6Z9 !Aj%^<,v[>KUԢ"wHg!X$lO*&u " lD˧ѪRX=aꠋtY|Jƻ kfX;C [ g$=P9*9WK\Y1a6tl=Tnz g]$Yʛɿx /0X@;䥌sTjiť96'z7^}+d4er80Lhċ&%ʆ|;|6_!RIӝ75DhQ]nf]רIє@kY,KD81,MY]]eq0;GcBp^75q5| ~bDPMGa Շ͇vsѨt[etpDg, wxc/G0(IR(]}F4Rӄcs=mLeQF*!6.$z6k@eFPQ*a ÝCRy1fCv0c%U "KB $T jB]Ұ8F'.-K6;LZ$W9@ bLѼ?Rg%B9\>B .%3I*38o'$,vkL؟V1h- /se;5-MSŘkd5I:FC=c"3RXCIinO3K41K8CJ)4!v$EhHdj}vOn>| i@wRT <5xt5[LYDOdZyQza*˛TF!|P&2 ?T{ z콾dGz{#,7Z+H&{o-Q@XGW` `l=-KOkvE>fc{P%}IC%4 Xiz{;Tɂa8DeŻ[&b$,KRX"jVƅD`V Rlq9`.vJ1)1 h=8QM>AcX44G|+~M.?ȴxGӊ?ղX )]"tn\:-n8<>Bf)GZdɞXDB@f115Q~+Y+Q Yb޺Ps)0 *Tt9^L@j\ܥ)wlooqUut1zszbr\IbUa#s?R7n^jd *U]HܛW" @y16 \ȍ*5nta&:Yr&g =3zg7=F00qK4u&1_:!gKtYwJ`A"d,HRBEYɊCƽwٙ?]_nϸ` Bn|U?~W_p-qY6yCXrɰ8%$Քgy/K1N mp-I)㪊j"Qd^l$T\ʎ}=M6´4 eL_5MSo1%[M)VQo|eå(|? ǏΈ}νy->f~aW}//PE9ޢ{P9Ojک[)*Cc\kq{on3umR5-7?W4%zjD!6c2Jb)gFDɉ,bxo4nNLU% d N-NK i[->D 8$%Q) #.%Nj.nv'I>*ߒ=ba+QNlEM SO5#&9P䘔 p̭yb VNefHsyGր >X $\YeGPzD; ͎vv/5Gܒ<$>BTcޞ\:%0"F&~^>sBJ\.!iU-MHyILS) #ڌ?t nA)ŕXjyŠyr=,/~wi=2Iά {*`vn$7#ZM5l>2AGfz7(oRD(xO&͸6Z g7!b3 UUeq4%TȆ* |Pmc C) A])MPgnDtu#S6Hї ¬&J,eRE¦(7r,kz63)wtCdwHБ'Fc-}c\M yAx%LX/}c_=ck{sCg/Đ9ږOܧ?go+zͼo<:&IχR9_3]oUcPg\}LH~._{9v[7i8ytkk-[HNȘTU8 e\d`"11 誌K5H&[b"]Vck2]$O,6TMkQZw*d/.:?wq/>W*$b>F=*(MMۤ~p}=GNf#[mbpAhj GE9~t̽{hlY~ukܝ aoUUSU5[)',s#Odx֠ړ jymX_ D@"| Yh}{wuB]W\~ ?ύ^`2k8{_Ⳅ&j+NF]i5発W6+ ?tyyW9!:ĕ$'1NbEۦl=hƜjZ(s)Y ar-ټ:+K}\svZ[#lz`+ObDSFt 5L)g7ƈ=},_e8[sE{"pv@LʂfRI$铕SŜj<IfJɴ$ug )awE&-^r^]qݷOn H_;6x!ʼ9R3]?+]/wSo,0h[Fn ;?:; [| /]jWu߿Cy%*~_ya`Biy TF1\BM8[ƗՀ[m.#`s>! F8u@Fm- VHൽ=NHVb'@ ;y A9==ʼn/ipM0ÊAe4ң:;S"/+GdFU'*CELZ$hT$xr!%^ilgtdywQҜJ1~zVKzoMX,# :a¤_2|da1qLgۆXɐ8%jЭ,"k?'>Uqg D.rB[L<˫,+ʲ>a8MT?*p?|Dz|K~|]Hɨ%QUڦq{A@6oB]qWiO<;a~zW6Q]vwwF}~9e-+`ll ]yzڸ!)q!czڰ*C,5 &+LE$e;o_EJ hiTw{QtXeC OXcԉG][,T>}hXM 4°sH Eچã4=f{"LZRL$?8OU"nA.5MCvVn iHN!SȒQoZ4Y2JpV]qq;pyK@fe,Dh]ܒxh рȄPn| _{nMɲ`"JL3ZXRJ&H{Qπ2C5 X– }OWMnt5Ofy1yNj vN*@GijA53 `ͮQg5}!<zZ" R MGjqtB`(mY>)!3jXXZQ@;缒)Y.;NNN9u0fA``*eƛCz`2iR늅޹ϫ''8_Oꗿk-|IKu9;][w 8~cv0cU.>wsbIC}#MȊgG%n_}W5{t /}v!1i:GOPPgYNlS6L. ˁo\}Eqc%\hNW'G vw/٦ij,OcFFmͶٚuJnTe\x1~4KjM?{2!<E$\)8\*bH[}.嗾dl"xE{;<{JaRX6s&#Fpc_$4 N__ r 2 RyMV'CoCgV٘bWUE9u1qTfQ]"0 []oeef=QWSA! -?R*FέJ67QY7@+yaJ>YyI٧mEHCoc l"- W1Ψ񶹟R1wUiP IDATG#4}3?;Cso/tկ'ͼK8n&1!ჽ}ZDXkʁ# }o@?6 1qc8U83qHb{r%Zò#|r7qCGs xwo~?:?C~G_'qp:rX.:NO<>>묆}l]81@4H4A؊A3vw)")v:L(/ƈفZ^؄)(d9\3a%\vL|DHHrAÄ{&UߩxugKZ;<zhz(*'G ӳSilUg嫗m.#v*̺%c{7מ~T *T+V={fuڗDNy˨*łQ({.\@3w޼Ͱg3X2 x.az2+Yi'ۘS*HDrWb|~0 3ݞ3{OsvZ"4cw[UW d$+YPP'l#V~¶C6xHJ7UT3i>F4W揜U aסnp$< m3!V2|U9"8GNi{uf@U|5E1ZOR) dqIΥ\W.z&2ecsÄc2d{8;+ݪP;N^ьZ>+J14ƴ}$ϴU#_vND?dt{""8-vڣ20Y?|ILNJ (ȚHb%U#`-cAOVS>+k2@Eg'V䲐Ҧz=9fr2, 1q*O1xዥ}t'VQw'gb+ia:As6[R7i4j R7SKԎ!jO"j _TMkDNqApEcxxsLTU\ٳ))w1>j#| Ʀ|[bfCAtB.c`!%M䄓X4% *zE޷KCK<3nn8/ږؚWU>ka/[.]o#az̙m9xr!+[|Iw49Z5@pW4uY4=nXd pVđ,_MR}@y^'t^l…| J as4 6cT(AƑ݈g=6 i,w6-[u)Ӊ8\C8>!\LO>K-esaHlq ڠ$:'m \m. C<\pDrrqp0%7[zJvf;Uq}eq?wƍ"T(nG7sm`/&R5ymد[߹_Ly!n `bYo\<"OUU#8\i=9+1E+];mb#{cc>HLRIE]+]VEO3l;)fc`_z-Dmw.cnoqh gy"KTfc\4$ 2ÖMI#-wί $6zt}]@zm!UEPog?NUB/%%.`U4bmTEC!^ ~PLǹ$\pT5n ]%n".rDDhx[9S*l6*j2]ɒx(dNMְOWP9"16;%\ w\g n %t| Ub)cI.\1y~@]۸Vד#bu\pG60dMMUCu9}6g MS6tέ}m[匈g~e| &57^}[o){TeMl\=hc[f0Qqpp#ż?- Ed>% {9gs:M al]CӴa0!%S7 ckPOj8=-b"llL[, 6+eyeaK6 a%i,6՞pcg?jf V%N>]]GJݶ!T!K˵ Wbi m3a:i#z궡*3CqԱbUD_Z٩;`e&,f؞z۪LdmqnokZa e2F"X0Tا&a!;q3 6}amUDR+ gGvۀ PM.2_ݣx'݂DŽ6]pv!.gAܔ~SEsX@+@Y'PG;xJlh(Θ45cE2gr^0 ' 8xWͣ6Ϩ&VJۘ;Jb65X@bdC+-{ǜ VƻM 4N91h{TP&Xy:<\n꺎%}⼷@6 .tƲrVRĘ5d>(fu}zG O"%#d+iϟ{)R& B"f2JL<.R`$$ hۆݭi=ܻs\zwwy绯s:?NI7Ts|׿ȡ&~sv3)g8}|D&Yi| 4 r7Y}̎H' Ncυq7o|.]躁q}̏Ox6TeVL-K4+P5Q.8;[mLP-dz+v'cVOl 3(l( 4. v:\ ZW5EfH$X:HhvŶ]Bda9D02\ha~iٿl`k6ॗyvzʥoORZ2[׎Es nJwpLw  ;npt ߹ͥPțɰp8<Y ;xc3*8.wEo~fƋ6'mzo)[>OO?B;puljdjr,c<:<'>ʫʯ}T MkœI;1z UU ~*~S5hDZ%cq4cscEqol{`R>|`,OqDJ{\l% 7M53!s4.ˎJyG=i}K:)C⒕C|?"srICGJݪٚ ^֍<KJ, ˢEWyakh)uфczCdBN5mW&CufL?nLq _l~7FJ 0Mdi| PdΑC(:9nPn7~o|Όw Ʌ}GdM+?oo0?{o||,Up&8w] ݷ79O|2}Ҏ;vw=ǯq-?o7ii}|ï<ͳW999|NhvCf3VOfro j Fz3q9jtAƎDŽb' `%\t hoNS u2 (cHHPGqڕ)Ӷe%&%bNjr4 d(%i5q /Jf UXW;L!].x,`Vw^q.Xfuo-TR.G4z-qzDufX,ej. pz\(Eh^<2$&NQTn*vNk!2S>'y3.}JGk"},\'K%#E=0H͙׾U6 5~ 7ؾz1/GeMWJ3m ׂDSt*^i69 *qo*&{i yϤ<+E>?~^Xqp8Ʉ{U#)+RajŲtV=7B<y9|&791w+}LDWDM}0 9+)Kf"uSႍKvTw!ڣ QY Hݜ`E!w|YEx&ZiRUok/Ƙ $D2=Izc一O1'ROKLy}; kBpT!saI=e[; 4P UTN 8uj I]) ^KV*S| bLwu畔^';{W>x\C.PMPd5wYQLs@%z%VNsQ3ghn#j|Y⢱j MPe86gG:w l#BV5b ߪ,,Fr7Hb9eҶ픪 8VZV$FaKʲۖd )<, -uZM)THDm;tq)K{ϐKS~W;ãG_WK8\wÀ8aoBJ>=[_=ٲ!+޺ld.]{{oşG3/*K>"/>{/W8-agvXvܹ}{B&dGVG2m9c).7SC%kY"RV)x @13\= ݋d6CK>~tDr(Aw0V<uR*WUNܞI؀Y{NiTvOā#9pfJ)) %JV<MŐ:jE?H^:jvnjtSFp]>`߸!Օs@Zy;j㾧z`}2[3ICݫS o޺hmf^yg٢lN}4 zcsh<)8K>f_cg<^dn\A^O][_e=;#TU0(>w`ZpkOPXƓlmJ$GT{+'>L3jgۥN-1tP!G4F:@ =.2f{C G16c$<'qxg~-v 5}Jj\ POV\2ʼn텳njbe3ILᄹFr[.{{ב&K9gB{smOGS1=o;RZbzu*y#Bow{n9 JL㉽)| K6Aݟ3$JL{hhV50 2_iHGb hd`ʪl+T7;{lfuEԅZ}1x&E%g>?BhO8b1d'kvRZs=Œ8 t%)&nqfx|ccbo?϶l\ TV`::^CV 6oM IDAT:Rٙ|R)̀GRy笷,ߪP2Y# K-Så>a/2y7bz`W^c5o&_ҿC6rt°v'!ػG;gY elfX.'^eq:co\^_b~wu )_zo+~?˗C-^}=|ģo<: 8Ը ZoAz1{cw軣J~وص@8X(2ZiGmJ"-'rX1Hcx i-Yd/,[A5siW}Cz)kEY#{;_8X2-n1ܲX&@"]Ȑ" ;jebLkb(.{lE g0o 1`ϬsB;c02 RgB, 1 kDfϖיoetﭺ5ITHe` G4M3ʢ*+9''5l6 Gn@zPz_Tv݇ԂOPkKui^Fm1F#eD%k%U(U-}E}OU8l]&GgTb͒Q(,WMzQBb;58pVj@!Jia18zpD'FV/DA]Duv="fJ Mv̚)؍=#芈ErUe Zİ1" RR!:1b%9g5gD)q*lT n![.'Ri0DJq&$+ν(iϨq @9kaK JI_ !&7-Y!ƽCȤttgΒs1&1~ǹ+"c@$4*C"hv|#ǙcvcL2ak ǧ79>9aXPUj13+%d6`醱Xf% ]GuiMeph9ntmvB}LSssON8>>f3MS{sYӸK v̬78ڼ{~S5R#@dtj|+7i ??!#Y`r%Jv XiH9$=ܐr9ax8"{oFg?iz!ѡKg^ 8H ,gTjExט5zu7o抇|-=Bzggr4Ѻz@7 Ʉ{o7_M*IXA ;cd([r)R"l:G'Ħ eOR~~x2[V%#!$wA)#q~'W 8 D(jR-1vUr!f`6f\52NVI"q""Džz$)>5ZVv0}rz%\=e9\ӣoC;.6D'X kLcۜjryKg&㞉1w#g!avf_\|fļgͧ |uxh9c뗪"qYF\ğdf`BѓA((b׮4jdu͝{w9u|D33&a%`dHOZG)J8U<׌5z{X_]q~g黆crGDR}L<R0 l[-m2T=> T[nq)eYMfR:n[v2=nT=8E>oֈ\]1 %|~3|^/#ɾz b,ryCsTr/.qAkm11=a?,Ln,g\noڶ!n|ƍwOXZ*Wpz|ь+thܾ}^n7ƌW{\3ci-;g%UPdz,otb:Oht>EV"÷=dgHkuЀoq6!e8΀*lƍOAAis+9?}04'4:JY$}we2"guu)T ݧ~Z 4f\4DLz@nm|~\c9^ O哾=v ~L1t&% qȵw1hP!U#Cmj|L"^01$A$NHCwV90Iu:2%}ZI]>ogaUyImzoKfmNkYɝzv4+(!S6t 5l=\]ߢkztQ.8^r6m~= :Ǎwx[ߤ(Slk\_!Z/ E͛7A*z0x8>K0%IdZsz&/w6hbmRpy6 13.BQ\.[ﲼ\qto(r/XM/gL7imXZB=Bĺ),EИ P.3:"$.ց#S aPߡ$vdAhKZ@axjLm!04햮sVulc22{e[oQ3p\ALE$cO4UʘZ8HfU Hw*c%Ҍd=9R *i3r4+X>L hubZQ\O. 't@d2t +0!M^ Rϭ j1-K$m Hٹ Le߆42&=l?cb tVQZP}u4!R.a̖{Z#+fC1ec-=SlQ$Q| y\_5LTQ0&Rf`Ke>6e]s|z+<}giM֬tv.fe4[>9ڊ*1ptΝ;,TU@,@\ɧy sܻΧ5ƑjW /q|6r"G~4~5LMIxc}Sa੻W3]!IXkD%#~R-v@e Id-F촥STz :˺x{تd:e~t?Ϟ3yufrhXUŚˋK$P%CTJ]ĦXW[ASbt~M-l.Iv̮!*&V;Cȼ0$4 0\G\y풻s}$]io s%+EVN@U՘70p~qsG?1"J7 WPZu1s PE0(1 "뢍ch.aL(lp\хscD&VȰg9>Tp(>9!%jwn6z"IA!DqD C+2 CSL4H{кإ9o5bU ;=c4ܩ"xEh.R~LFF:h"*eG_g"CgR7rk񏹹 \|wÀ$݅7Mf#]]"~E*ŁĤ=͚ghsSɓ;xYCwQ4+#=sF#UʼnpdN!Z!z͂m'3'ϟ_S4hq X@r^>?U9%C}>u=S{aZ!BdLb_jW)qB–IT+ȎmN1R8KU٘#%U8`u@ZC1R` tB(4`LIkW csԕřmpkHLxR+VM@ j03{HGp"e724h LZ$vS%Ҙė%IYH4"IKETL O aWڒҕ FFV?a^}qE!4 QMſT}_2 ՘NYGmEp=M& )0jp>`Ze⇁41#{M Lka֬ fv%uYz:ݻM;ʪ3z;B8{~zK u7u+\֖iygy]pRc EPC()#>_tyxLGڲ&UǺ"A 3K| <[Uјk(˦lL\1zIw*}  zQŀHنT5Yi6lY|]_Wz|w}|>Ow. '8 e)Ɇ] $.E 9HNN/ragtrHW m) 7]0<3LtpymN\!0lX={s :|5CNn> )Q CEW<^n"dԉ9U:ܳ5%GXS0\_t*s]3G/WJ]Yp~{E&!S5UYp .KRz( Ɯ[Sˎٿ[RRf/6^h/(/=]׆O>T/A-P==~[!`߷CLX,N,ӘZd ')ˉ~JEҼ)(+1HbVWQU bRk+[\Y4B*'vBi, m1q }b%A-(PD&^Xsi*~&vc= ɾD;]GIe]wqdghrZ*8T#&(!fH,&6 hu ~Eα6mڳBn-n; IY!fݢ=tIDݓ+XЮ_s-Fcbc!y| aRˀCǷީo,r `J(|lxSn |Yu=Rmۡ/# uvvyt>s)' ʪ C@5Ʀ6+IdKmQdpہ1D1HbZVNio[͖zzyųY^^2LOgUfM0 JF*bI9_S!F,6r{q[X-0? pTj|+W4t ^/R)!?cr7Z4*vw"^[asN_dq){|#6s (dkV9s)}ros9^yh0θϞ=m%[̼1//F'l S$YXLaInN!D6Jmb8#Ϙ%ö窿ɓ53^˾9ihaCl>'ڊMl9X}AnȤgA~JVaR9*k3o| fZj)B4K C3I*V"eYPIX c*$5@\h :LM p*SWFQ)=Hq>vFNbQEq$IIv}dncN!:j82 [l7`+8G 鷠^cfm`[5PEG&lImDs\tIӺ7_!$I='_F;][V%{1 `Xa`i3;,Y6Y'zO7t >XCXR;Xu`ZTFСo}>*8͝iDc?Lȷ8OF| 4XƼd/dgؒk3T!Y'mD$>EMk.k)[%9 kQc9)|GP95̢͎k7 ?rܯ_@걫/j7Z(kDzEqDSV(_1CMBY2?={ ?Σӻ-. ՒmɳǼ޿BlbqFC IDATpq[F)$CmO٨RPbh EtBRzClB^оw]=a !۾˞k@>YИC&J2:KխL$=RFC~!P߁;k/(DTv)y|M1a_Xv L'ylTTPæw|dCWQ]fL |Ybk{S6\]uD(ݚ7WDq6}FzmT~ˢ")D3ԀC A,#.4'w&7E85d ll6FnȍIC;j\֚? Ib޳=M?Ok=ƛ5O,OoXʫ^M#,?:Y^A속 L@DDŽ4eK/\ o0ywg1NٖJ@)@q =rsR2TLNnpr5PuʲԻp^b/?h64RJqmik~Dt}li}ɮ7?\{~=zjd61 avm=T@!FMd%MsZ1GK/3|_+8upqv內Zbx3 ɡ9$ 튂%S0 34[УuGU%'0Uue4z?aFeׁIl0A;mQ1brq$Ա&+< u :egIKg&eY_h/;q[g,Xks\ʕhj5Qb)=76@9[SP*_@8D`WP Go]~$=߈z@ :p =:* BGBbXD%C{)\⇐j 9>|{zE_ :xV5E*TgO/yO'S7[Mǝ7^#LJ>1|$vw`bhXYL 64el;vuCjh }0DL gFw:|F5Xi7&7.!ݶ ~!9b v /LM{D PfrG<m%M=PYwCKㅿ9_;v0О=)P"VW0aZ{J29FXH6J#uXlI1N9:T+)vD Y^*`"&36A{83ln/]ƬQ;SM C Ӆ@70&Dߘf}̻{?+_@5 wDzf[f)w))5:WMnG@ji|<]&髨*lPjDS\4[4|8~P$\:8=h;7-Z)1jap_u_xZrʝ;͆3' w WSg̦ )[劇 pz6G7'T#Ua{{1MqrRFP<kٟzA_|u1\ A3n6+ D*btHCE(&oM\$5u.]f:o4Dm1cIBaEKQ8ct=t0 (hh2$@$F d*b@L,9T 0V2,c@Ic͌ug\2Zl}7ݻ&0+;eFb$FL![b,OOw"~ nXX3Hwȴ,mLLT,3!\ L?# %Y NcYF9wǯ? 5b8Ƞi b^/ncz5PwMSQ#%=OU0 TUc m"Gb4\Z G;2uwg{{FPEyMzls~Ac_g|}ҹAFE7>Oo/vx DDbINf|$yU%6 BD1PWw&5.O0̏))*Bb6=XDl-F{?y_fMq|DSX6嚀b)ACHP8b#+Ұ `۞~o6Q0xĘMrT j'*FZ$YXLPgpeI5wԓ MC%U#13UE9 j̾"nwj ĤJeߪ 7QSe]Hi2`QJc8L$L0H|ƕ:ņR'@,p4L yMiV! fJX,Dk[ ~th8сWm]LR@xV׿IцB{w׍:-%GᕉT;T夞r5Wa T COKlLMoJQ;^PJi.OF{/9`qzr2#:6֩U2mU5y$ %eo45xs?9V2rPt<}]V?rPL3x3a'T{l{3.;¶eXo D+qwyGs_H }bEb~mքpM=pzn<ƍM>Ւ7_ٿ?׿]|L0ze{ܸy>oZ3EK.{qze<ƼrĖVUZPTSl9' eaZp.@XtN"q@ XSC\$ 1 P%, Bi+Q%cq6OE5$R1.`PֺA5RvА5Ccrz^G $cd0rwOF"razA[Imd;eD$!` ء°Fb-Lq8gҡ2$CWV)Q62&aQc 2^aB^;Űڤ#1& `'FaOJޗG)}^MDϗ-߽QL)] ge~LMrQ)Ȭs"oA 1bbQPV%&+Ƙa+М4JՈ 5z¤A!x'WݬY8[n>% W+<.`A!#Q5ҋR9mGGmr5Gs`ڋ2+%$;=&(0;*A]lUΠP5U(mmzV.aVAR#d/? !ܨ wB7nUt n}$U=b B,1by?}›oaqKeD/Wg+M!R' ײZ  ]\}Ԭ<7N9q Ѱ7X6MϬ.(kdvkoL+4 1`c$q`"!T,+<1,7(y~>'&Fô~4TgWnY?FxЁYdjV1--yӷ12z`1-3OSU WϨ0DjsR(JaPapa&OOx,3✳x7c7ajǤON~_K+}B7a1/X}6UjSb1uTCdpuEY>x֎j7֛5#`Ɯ9dp..9?ay/v}}#yA{kaVη ( ^7S  6<7d,`2E^>'wS>FN$/>J5'#pY1?/:x{Qv7XSj h`0M1&<=V"I1P8 XWj+*6@mKF(ŧ…ͭCN&R\VŮ=1KGDɅ6{D3Et7bL{ضBdlM pϨNCcttdk /1lf 6fF85.1=:2(5[ˍZFcLh B=lp=>C%8,feIn黎zR3=>fvJdB D@pYzP]8e D Z Jz>CףCUUOۭr@7#+=c"$ƀFiNs\aE>)!=8HFC>;twY7ڼy G*(]ӊ!4Yf:]6lU1;IUh|w0W{֘c5tZKps^]HzFH )Df)4ʤ[RKL D|JBM 0;L`qvUӏ <GHy`a^%-%i >MµO)ݻr4*Άm5E&50=}gVîjC$JO7:IF+_RG*)q"Щe[lg jOCz"ۧoŊK ks]^`k9~oap'P%RLL^O'j__ݰ&!ο'{<&O>zB\B .(h ۝^{>8?'?ǀAc߀1i/G]@5J;|E=U5Kh:,=oeʝ lT " tmG?83 IŶH (!z5pC"1`L20FjA!JNя*q좊!@"@u@uHq]|sICH$p/-ǥ]TB%Ŧ1}яCbb(M82h#[ Q=A[zT]zX H@OshK~40Y$dhM@Ff8H sF2'5VĄX^~j2P1<I>qbs`:? b!h&8q lQAd(lBU%ca MK۶tmKY^^<ٓDb) þ8nʓbʪ"Las`a!ze>qُ-ו[{3xIJ%TR Op fŀa?/ a6 ]7jUIDJE%9L^~;97/)TZdEdĉر5bT"Rn-*XOF7̙wEc045Cq,_aOi]wJkxU)|.H 6ݴt6{mݰ=;@w|`ug`de= qoIM-ԙ56v}Ae<Bc6 6'@)s₳ g`^M]DyrՈ.Q͒R#,.iS.GC(@@nqC :k K4Iu@*6.)bi3ZE6PfP 1YYlo]a2x{1oOLlK9nO1SAK0kZh$OY Q7*F1%Z PpPQ[ bɮc_y=nSyr) bTn1j`bzN,")# wkQpK-&F(Ib:ZRl6B X}~m:}\\ PO38;؏XI"VNSEyﳐgy}Xéx5PS7nw{N~EEe kED+JKᣰ`Ev FF* hE3WsZr 9?oUc ^)jYxQL'2,vZN0b d,MLH E `<;RJ4MsX/:(!`;"unȵd: yNu[ܹ{壓hǢ < |MYIYGCGđ+\U#bVqF1'hmWxF&aUjAqkMTR")zĔ*BS -&SV-. 1Xф3#"[p:$1bң.& "*$QERbL&A!) #(HQ& d3Ax.6Qn/)b oe9D`D|,EPYJѻF0Vp)e\ejBhG 㶣Z;cQq53sl2)]Tb)ߍ5˦.]X[LVE!Nsjd8PAdvV,*B}>J! 1-0GR &/5bЅ~>v\?S#y<=^(Ih$LƯv!߭t̮YT2 m0{<9tui&TւuB5d]|Yk4wbWDYv|U#P\wD䊹XN'KBI~/Be pK7h[iܳ⌬4Рm¢U#g]5ȭniȦ0"&7bbE3$F,x|TQF P b3> Z1y{cpDR) /oZ2nWxׯ w<|tۀ%mLFg8#ONM~}oduT]O o)uH쉫uTu7; 9ȕ Wr:!&3Nn *I=T6XI낗5gfIBPQRT3 :Hі!h@$] !V򮜻Rr(j]eH. iɌժ@Tfǰe 'gbFRRmD)ld1IՒ)֤23N#{d -ϠRvm_ztXo2$)̠ٔB9oԏ/;bPR PdϤkn)&M z3Ǐ/WnWrsUvz1={>?l,It*<z &K<X/oS#Ɠ;\^]puub#zU*S|R?o)j.%B.Kק?7^ExI[so2,I-唀w**>)֘WV85f7dY:"ٱT#/ҵ-{mɍ6 o>1i|ØO,f0:$YJnb} _y&;''.{Β0̂ r5[rtz&hlb+ܰ&B}G2 v9*.Gn`ܣ"*k(H2 Tݡr9{#Vf bekpiB +5! o._(ܠǥS5܏-L?G=C<3_Ԧ*4!!D5-z>yŜA].rGfVp::dOp;W-k˽]n<֔AbN%v\s *HMƖᓓ'őpRNAx?l tnxt<]O'f.6CLLʦW) &ܿ!v`4SU ]ہ* [ImJa>u(]"f``򢚏}P19 9ꪢi ;W\^\-_a1s\h>FE(JbH<: <|c>GuJEtݽ0k0 h e<€yfBudm&6cr-au˖^[!Mn/e#=카GʸСg}) n=wo׿ 5гi3kV$Hm:iլ?W5f\zq&)ݙ\e򊓾+bQ/szBԴ|mJYĖ%)js& d,R[*? ⑸pL #4(MS9O%vȯis_oJ_͎ׯ@ ͛i ܞGO~QǃKBuV}<4/@ "V$cVm;;ǻ\^\Jpzp2X*IFUۃTxgv'dPLUUypTq|G0b*_tjOXUGČC?˫9 n4s?!yz7&R&бlM4iLW.[:HxV)'ːh{*9.9LyY`h&%~dPI=F|nk` 7ϽʹȽVrEmh0E`9"Y_NΞu_v+cyRt@wWgk-wa:Żj9c*tw,N0IA'5ݦ[%;wèa>˦!ۃ?XTsrڙl2\;>`DlqYE}ѐoz`g"&h/XwY"sqUO6|VMd%d(C0SnŔ۳D1߸9gEaOy4d+ 6֠"b 8CZa`IqEW̻+:=1XA! D=7oj^掚#|m^Xݾ#‚(O1+be4xV)1׈{mJhb1x~hY˽Imk$ s˭cv2$x܈1!qcګ".L)lhZWܾ$D"[˟͗G7sϏoy2Yv| 錪%al`@LV>਻EUKU{SYtLZbdV7)ÒVY/JVVZ7)LR&,]҉});sQA"(oa=VvadcUߓ-\ fhZQKv-5_ &2 YFJLtɞOA8~@rn9ria-jZkf@]_ֵ7XUb!祥=:qzބ1ܞ3;1ȕBʦp )hL֮[볍h4{gbqX;SX|Ƿl)cm' OlRUӫڀjj-q_WsHZ΁1&W^1Sܤuh{kSewgJ|GK!yc1_3 %Eh1_?&Ľӳ3^#UxxOkє8[g*ů/Fz;{$볭,bלMX)-bRna^?o80>労sc-~˓ V%VY?eK_p)Œc< 55-HКhQ6&]bՔhG>zUrAa>{b 2c^ZUDF!)] ޾ɳ/d/  oK.I1WM?%?zmoi>$oܸITuz|*0Lۀ|.@/"GoY/|YD*)>r|rˆ 0fyŔ;-@X=t,ib*es. efVz K7_ՙkk$b\!1[ceJh D81*6N6L `Őb}/9nS{ L,.kXY~ٞ{~?:,PbN/m¶}GRď\I1)mG$ST}@}O=2hk++F]ےՔr~^- c!e+W?2R<"krxՓ]ʘ.ry5I"A3'8kʯ5dk a_cRmu <O# o0F>פd2HaUw}]-ɠ_fM5v<\Nb c k,Σ@m-U3 1b k#9 -my3,¢M6uv/SlE92 MY@!WUۂ‡Z& tlND7B-|\#X"@1Ɛ4'72?ghwSۛO\\;lUo~ywfH;փ!/qXe4f+{c*D]߸rop ^ОuY g7*ˬ ݧk.O'^2Ɏ#:,VqhQż q=stՔ$5b,j3>Y~ <"@e9_0sUˇ Dl{yi0̯md"U=egGҞe')GsIm8`s he||"%Aju6J]UPp1>m<8#4Pʼn)PcBT%І)N6>rvЯfYN;Xc9;?e}G̋{şfI$r|vŪ]!1hsy1j>5}EEs<>*OrȚ5$AJ9jȌ;w6ۋ[U4d7V 9/cW ;M&n5TXr;ƾ&ϙ.1&JGe`zήN!uGTs$j_6IF#O? cQ|8}7Tb6Ao()Ͽ AZgSJ}xΥ&|6仯^.;8_ιw3|&w@s}_ZdWx"rђ*7i6P=]JP#꽆1:ZBJ'2 !V9@+c&У)H19Dāc)uhբ a_7@chI4 ʢ7RP cz"}@SQq|sZ[5 x݆IP^]DIíZV- Ww9;fD;TzmY"_OKt~:4bmMtYsv|9Y}?%:$L}YB6i`11 qo6)bٙAc "thTRd>fNL)S KhJtGJmJYhWLIg4r_dD_49B ֕h9T-7N| }"|-ue %DIy3쐌/Րb1ԣkv0qy>'dT,:ڻ|ṛܸy)b!c'ImӠn#j^착$3"X5(A2+UIJ=Dl R(2h*YԹc&mc8b cYPsZd z'^ ȼca-&~p4хl]os0d;g6w\57LIp9g<$XehOH"֠n쏩Ye9^ ALK6ǰrj+mYw{, b3_xĝ۷oڢ_2By/RCi&41Ŝ3+&w;/] IDAT);/=oO8 \_ͭz~CɌɲiȦn,ue)V@jOΰT~ SetTf hG=$ "1lV+aGﰿhAjO/ޥy?LyuQ2LUvChβ`L2 HRg2"y  ,p[HX"Ϲ M—90;mkKWh+M?/fzIUh9?:// +!f`Pv$o*wweDCi||)~{"s4:Yp@1$Q6H ;U[zYnlZB~Qn; ]ogw9b f6NJZUrJ*,%LF{;,m`i=Ǐc{Ӷ@ kmam^o`h@vF%-rY:4&&nDSZ<9ficꝳu`oSQ 8Lv]r뉧ZLv\| x9(URj1!X^WcyN]_Y/FGso9;:CcDI耳e+?;qxݱe\{%2_,Xٯ1!!~d 1])`HX- jM\=8=5tSBW$qc-P̦VTUEjd\O$9,~h"8'L{dY]rу1 EQBѾ[-k &+2WXlA,"W%:{J#GlcZ[PL#nh&z\e}·'>lU?lqWFΗ89=łwygyi6tẁdP:H>Ǐ/}%4<)xE@upov7br: 1EoIJx7»1=%Ė {7kKYc58[jK{րLi&L_t|WjHjfL럽IEvF&mS=EI -G×bC`-z~{|ŗ+,޿=>@ 鴡=\GX*zFhy]j{"T&qi:v|WHL%/Mv0I3]ygv-ڀɛV.Ja 8"Vp%'b_Xۅ)J%DJ(7id(5EcBnH΢g\ig}?KT{ahu֨ H,mA*`贈ZFsѹVyEV,WZgWKܔиζ%D"klMLV֬2騚FGt]䶰& 9nDVՒDbshUdM1=wƖ3sb'M:zx=:wV ]hЫXώ#޳SRP* 3 _%f1PHICT7jb3T$ Osuy^"& O㌧ G#@1yB8Wt0l(\N7\p`-}Ȁ0drk" ͙te֐YS>;MQ5w}[nK*Ao-dechϰ#vG3~|t>n Ů_0!~mvz"ćR@avdh+ZCPL1ӧn- cj3X &[S ##4J)/"Bm+&fHXWQXpmnN6Un32eSq2nEc3E #0p.Jp֬NL~\xz "&[uz7:_HHʺqH1E3?TJW·8WY1&j|Q\A$E-+ `a *OE4Ժ\ j0UEԌ*aZY|I}EɎE9| *@*\ll]O* 3dS4֘l+tX/=?A^}oJvIlb%pZX.L϶^?}rW_% xxȁ.u=J%,[fLY#Ҩ?M#L,ը4e*̨/79Nxeݎ[rqGƟGu,WKiIΈ LҌI k,1tQY%CF{v CĎℹuX_#حw,N]q`Q:b *5u4V EKNNXT5g's{vv SSf7^{I]qso!3qLޭң_+n5nA<Lԇ(i2Ow,'G, B9:zD;Xc uE#, `m>+4)_ַؿy_133}?1>-iA$ f!}zk,bFHxD{QɖO FDIjJu>djRZ|JdhOv/;Gln#w'N,I휻nx$؍\lJ,o-O[+E5r6|/S-|l &2K=g*&wӔ(GNxo}H$^]!{[4wM; F/;܌8sZ̙>{}pu9|g͞-ɮ{gX@@L"$E0p~Իb%!h)Hntwuu w>cfs. Zj:u<9\[7:@R*I)zM[#$JnvٽH ItMB\xrNA_-za{eBub؟@OqTlmDª?Q]Z8KNf͗+ˍ4ϠXu:3ByWZffH@6&ΣN{M*\2c"O$o{uuT"  hR$xq2ݰy ̟׉lV59NSŹI&|\i-vE 泐qP $ɚjz!X~{% Y`u"KoXpk=$=)5Hၹ _'J8! j6Rצ~Cdo$></@O1n`LР%P:>w*BU1NiU@:CY\CL".aO :CNh/> ?:.@ٸ! j2CRg`% \p tZUwvHzBao[Xk1|5q KbZ|ڙEO\wyƣ 7o#`s||L\`cL]|`MMِb {{/|W^'9==aZ b>u'?͘{=t[*B*@Q~GpwcY9ze z"T44<_'9&k,3nxf9`0i*BR}/x[#v []5;HwF Voݘ۱Cv]˭PqmKc?}E-)7vRfy_q^yOx&c9jj9|v=v_#O>u8I|m~ls]au `$RafbD'E#Ɓ AgqPCִ"ew1K#0iXGkVcbbuPeSy$s,GW7͔f(1]5rfH '9&'\Qݝ-~ir:Nɟ# zUTvIX:hڬvi" Z62vi3{o`Y;q!_?9Gcr|H͑y S 8_kOV-;T&קL`oZ`;l΋ LvWO?^nĜ`hBY+ENja}]. GUw?>6]woŞSY:#<^O1bW 1Œ{NW,"XW'Dz4ḱY&c2<[F.!+`.g^3b~%»e.i0P)bR&B_X}u\E?94,o,d0(IV|"YveVJj_LJea6eeHK>lՊQU91{RC=xK83躞xU5I1$ KK 7dDru9PC$w\TUuaԫ)c|I8w'xq`::blVLq.k]gfekgG-'ޛ A8Z/y$vnM+LiʚZ<&PMN1]&1_9M)r hb qyyQzJt,1a Ԕd#[4/1МgxgIc:a;aNapYoDqL0 􀵟л {bVIq1~4FHUW;t;,cӄw VWlOӌۖ{;5*ɘ%zZ.@Iu Yj"nG,W T^#LJXܸy#@SLW?vQnIjTMsAD) }Q\Ϻ~@a}&ć"*)\A\&(]ld neQJ%\ģsIDǩӆC`vV 'hjzxֈxjG8UUHU?z@u:?7K/SGag+LJ(#nQ9#nܹүP1[d8<7+; =V3Þ ލ6eF<)H(f4?|acgtCRP:&ZY[,&"AL|YrT%1&!7`IFbZc0]gvMY->{F[7XEyҐTc9X?~@88]J )[ƧK L. `By +n bt6l'"Z= "xS/;^{N:ks0zq ]CfUg 6 L׸9s#&amYA {SԯX8 -;942G-SDPeov#04+efLdD)=:},'987=9\*abڑu]zmW+HGc,:*0/3 ЧM;Bs)V0]zd(<*^{*+dw.y6ՕѬj#thje=[ѧUr8ʥ}dhc)Hf#] @OkP^Q%[dvMp>VJnJ@- &* ]m43=zVBcQG¦II1Hbҁ-!1?ɔ5݆Ip:glvKP"# ̍MD%k6S@:Fq{f$xKԕѸ5Uʺ;k8صtnb;ʋ'ܱ[Ga98:͝HbF12Y{օǤ9n RPl5[wXV@<7j IDAT]Jȵ]4&Nٞ^3%Jvf<&8GONb4 8UjF%3K8}wٺ}66vR`'h(J|?hĢ~]%.I}hse>||> ӣC:8qθ/% ,2_xa}N#WOaaVM'_znC IQ+* #^h^+XT(xY$Pb/YO|E Ҏ[&t .&ƍG<{ 6?tk/:?sku{Vo?g{[ƫo(g{/{sܺI17p[wgYn~k V.xa*uϵn*5o8b$ odf{7_gmM|hS#B!w~S*qjED==]B\&_6PZ$̈] )'%H=|/a 5C*1PTOxo7\K%.ᗶSj`X{?xyʽ8M?r 8% Vy+5wE < 2B{x! y zk(.;"|w-ȟu*>eMu(Wfz?7NVrmƶED #nl*By%Z|MΟp\ Duß}/6I#:d">x}F1Dfl;'79Rn$fveJ4-Co?3H(w>m&}$Ta?dp]*  8ɓ_yɟh,;jXӞ-#m*[ړdfNJص,*y}^ zN>W T󖩡Iێgl~UY,|~2ʾey]0.uKRc)/e P11e9eGcO &3ͯi-~uMBSUnTU qeTAsʼnl$ĝQϟwA;K)ÅZY }W#f77>|k-gy0^JK䕀$$B5%7}5'Lk(䱀+]CEmD"ʚ.0o{9ⰬwSI9ؚ(Ę,0se"QYx*{p.ROh\܍fgTuE3yO_Xͭ=j%ZU8IUA6Ug3%cX,Z5Dž0n6?KHڎvUuiYg@)f .ihɦa!ܾ}C!䲝c |v$yZϵKkŔE zxkʬjy׌[m֖x`ΞoNrۼtk,cn }XWO,Ly+hgB镘"Pԡ)kS ӄj(a e&:./ z!lT3`99FanpP(/453,g0ɎA eX(;5>T\ՈA:<.9ˢk9[$jT=y}G-J R5 wY mϵfX^0Us bq:vXL-^5 !ݜ>bˏjNsʁ>v|]\4fR1$>x8x2MQ4=:5xhBjMDS9GT:Ɍ#'@QEzV0YT=3H#|AjҶzQ9>_ܹs!_ꟲ<;Âgo~ \qcs c"GE-2e=U8ztA!T}JuLͰOS0Ok.L9vcyE)u%tW14%+TҬ5/D fݰlaUy:yuF͸S/T)1Revkμ2z6twЬXexKӈ;z&IC]?OlcBV'qX9ѻ_~Wyj'Y{VAu0J53ZtXh)8[̙m_ 1Xg|k~C't;mL 5TcdLP `Bk": ۔ ВH;'%n9N&f kPujčT3=떜/?!^]8'*B>i:-k/Nk4%{Ҭ)X=t (I/P W+wdgk"T!,&e+9笖3ޫeAg/]aaR߷xlW|WEt`}21r،yCa+9&RsTl36Jqfw!WA.F1W75Nj'>_yn16^xwLӳ&RlYцGOnŗ='+@`$p]&%ҽܼE]%$UyBmkV\eG.<;}Cg=&7!cSӞ8 3_k|^{{Foqp &P/@3nF2e<" Z,Xe_08R9;94kِt?Êv~VlР=ezӢd"6M\y>, pcWg6_r+%瑮*قO gmpwn|NtM麖r\)QUdB~u]3{MKPg-1.s $c[OƄ F"a;j[8_S17E1Fw{1 {-_ghy8uw!ޣĔ;TըT!VB*8$LWZhnX6[OikOm& gM(yuGR%Ԏ,Isьj!Ĩ;;ۼr.g<~7>& De+EyayK_U[3נߞR[o?flg<|ϰOst)MgE~眥1(>Vr]דmbty_;uc6W_Gg+?9&5N`ywqҞj̗-n#=U[˯72K\bw I˭~[SvOG'z~>y} ZǓҌ#x5ꗦTϺPa7c~joxK;;-j.-f7iwipٌJ|s(JNh{uVA7Ԁ%zVrsxy8Õ6g)[8G4ǹUEߋt+VDhHxy.!=sWn88[SQ! SHatx3q(*.j6DiʧKö.^vte;tyOAnݒ6ײHn0sˀˀf7a=c1!]$dxo'lmo̘nJ TqӮePgy[!m.6AcF[X ͠3ݺcyNWN3 {0'@sQP⤥vF56~wf|ь6lA55WQp4g'紫^jQh2p,n!tjRW5lrƍ-!Mw݊k⨉9$Ux8NLűtut"l2} L=~qYp'H0Nnrf;ᣏΉhkƈ8Bz szTaα{ҺL?/,}Cg0hՏ{ @Y+br+/g3+ɭ|r_b??({ӟbt+t{ #J"R.:{"C 4C~-yDrv}×w{rz;J$QdTs]ܽƵMT@/~[g}t7ƵMpꌝ]lƛ=xw*8!Z*%yBL̝'"y\ s~w1ÚsC`G3lqsm9G$\.lI3S+Zm3<ɔe=4ϷqERf'ifgI*Ò*Sy!Ŏ礴T/U\y}x~ɩ˚\!gmˌ~r\leIU&Ldžq$<\&tUUXziC8ؕQR˦!k\f4yS/ ؓ\|V>$+`/?O'=N& Me&߿5]?1Cy|<}^9@G.9j U!'ڠW,/O>dvzdVp)aHhe%k [ stɰaC%vM=@:zDH-.R@DUn`ub=B$ 3U͝Y1#AƈpoV#pmwciG3\ >5^CbܙM) t%ŖrFVXټ\Qy؋x!' yES(0esfm& 8Vܪ;֤b˯+5 Z*1Bq,[NF[ʢI{N;{TO۫|͝1H.¤w'oܛj]b/yMܠboxbyvz*mFʵ|.5\_Gسz6w++oᏏp^5|99S̹)MD̮0-db/ó#U3b&V};cLѡF,b1UX6XrH'kihV0Ƨ,#[ej#R|]QCjۖj@.B2COZbXbE.0b4suF +!{>;?ykC ]Ly-?.c@v%e4MIS惡-'.jY]r Hcg)QYZyZ]X*]\SoW[hs ! zp;x kQ(Go>d;DY#0bkTTc ǒ8O';zJh >7q1Flk5b>&ug{R[ꍷwv@ʅw7oކ?9W3dmHɟ8JSIEWTZr( Ogiaբed%\ASruBם`itÎ8gC7R1eFvt VАWvVn20|>Moޝ>6DJHw6Vr5AJ}hHe}[OZN1&E<5iEl\2Hig2Zv}BQf8wSP{otN?{c['vk#5Ћr6;šf2EB[i QQͯ}_7rI.AON{1բ"~C )q4n߹m*K_t7_ mThebj}^mB ~ AIEm񭷨"Қ"f/(fTbB IMZ <>."yސ j`P]9*Uz{seF{t.@9lmtĕ1z<ʴr&)_. 6C٘Lty脾.#kHcu*[1jjHP#=!eL;NOHih^oǧQiCExU3Yk=;LPbӶ3jfʘ'' c %%_FU胸LaN)c:\9g4TƉ+?{Bmjd*a줖Q8pQWD$K&uBU{>w6oQx;N`a75woR@ƯYfs `g&'w>b.N u9vx*nkWo»cSqtȍz\afx4kLna>3g oIB` ǽ=-#M5O9v[,R" <9OI,DJ<ǖ?j;呰F 7܋{`eܐrhZ&$ux7b8DC$oClDi5GZeW zi/ぉ cHhbcފc.ڴ4a-W4% 费ir M_#Y"yJeRa߼F~agb-;p;\*)J@ʒ%7,mt8HF~I?)A t#Inc˲eImY5P\$k3Z_[,QD"]A3a5|W /JL%`きI7\ssoy/<=35͢u@ASP864x7fgtJ< 6 @{7xʼn[{O_y=tEVĆñ hyI`^*N i/բqC;Y;8cAsM-ĉa%z8iU` J!@#K/9zVI0EHeU[GJ+8 ^ Z$jyCm'|jѤRPB*˷CM*؂ժAmhqm2IִV9AF*m۵,YFTmQx",=c8:V8RvCn.GAEC`HHSeI?0e6am08 ʰbMom,lB"Zt<Ź m )CZlu9YEFŊ}"@0Ph|zGidBFe |3Y.} ntPD%&=!@V0%8S2 !/; jj iGLf22 d^0AR4U9ѐRHӆX9CDgؼOoI[BIXV5jwv_/W5Nk漚䇼UKhm)fۦ$=F A2`Ӧi$_$FA$GԢu/K?ش8rɓc8݂:]rp&p |EHfY|L+Q-"jE4j=n],\|5νM+u!'= 9  /O\t3Nv3L3ҨiXM'`bNRLQ`"x 1Xv\Ac?Ѓ<kr?qscMʲp'or`"X BL5aR $$G XBx->! !9q$.~zP=鏪CAQI]-@ֳ6"lixEbm 4*Uq;=.\n  3G`~ɑ;T9t*Si+7Z)_v{ j4h,ƒZiigu{5KdcȾ՚f|U Q|*tӀO߶\;=QF&!VI*͑?4'*Q`/]F|=dL%xFt ~]slO\*f7,d Z0[o/L%QhXz8i :01-CojP)}uL 1`MP,UZ>#mE;) ! /ڴ ҹâbZY<㦒>EEB9ֆ,L krQM -UchU_Wx(# @&#&C"˦j79K>2w]t3X 4FqMyt5T6x!g?IOЀ`#?!7ൂ`|l{DV\%v5g||/8QkseBz%Og[|R|une8)GK)/Q")H T\t5^DLsX(6~Ex2.A+s,~şiꏭ& n+ +#|v?~nB"켳'kj>{ B ŏmy<5jb?Xld@<@ :\ܻrvw{UG" 3w1 ϰL]ƞ6btPs~|-oah"׀oxǑڣ|J#xs~:_pMKRqJb)EX @@[/[c}.6[`% =qo~cwAVow|яW6!QnѴQ UC0HZ&V4tY"F(ҽ(-D *.:w${kpN bUⲗNJV5:HX\Bْ/{㯜[LثzN$!C ~PZ|& KxЦ Wh1kfgyJ ю!Irs^Vk*RR"QߣXM[*iA2,* lO i:G4,tVlTNK]nݸM? YQDpw 'x;]iw7쵈C֦z12I,ڰ2pn}>&J{Y@4׎xN& 7ȃA_ m<-O gwJ6}*`5ώG89Fe$j7@\\_- ߇Wu@y$d$όr{r{c/L33W-`4lf|ɕ<ػ&~U6)H*`IMV==@pZS+`{~;+|.(<1.7_!o߂{cK`U7zs=[4ۜvStHfWNcWuy7UZI+LR kRsۊ|kZ㳔ND[ފ0֥[z)rH,vzmUfbʒb(*UDaee,m =HJt,1dQTED?/ʀV7+Nm]nTR2F1-`| j1LR@uL 7l*σE]c#g4FLbiSf 7G7ö_ݭ#uTqW`$j1BcNG+Q(Q،rcG MX/C՘2G>uZт)ONPB#K*.IeU', T:gYL8p8Z6@"C/,o&E|LJuG$˥݁YcQ7c_}+~Jf߉V =Mx&7> YKMKL#Qɔ YÑ&/ ] UGQtOޠGP9vEQ1@ A) HiŸTfcd&"M+FO5#MJn= 1 cXz:p9Fv)iBǶ-fQY.HX:!>5;Dlfc8d6̪):8>;|qf4xji&(.;.g,xr:kPM :cZaaV+RFd"H#}رuQjJL,"&U(B@dE:eMrǢNX˚RTRK|h@oLaG%u!-N5 AN5x&3Y4> y2:;K^rcXVnYYcEt]j6&Vآ X,Ǭ&]]U ;|f(q1%xV23tmd48:wΧ $1@Ml@@!^GSܼFhqM %ȔZ^>vt-[ +{=0hfQs|݂mJ_,J F9w4_ny5{ osY.8$OK_Gg%&ٻ86JwyA3fzu#=8~` Au"@D*ɺ)d&}¼Q]h&6hEo~dNy+Zi:KG#7zY^r)z<*O[b²ps:bʌ^Wk[;\p(.^e)-`M[M7Df>$<ɽ]7706gå+7X;NlGHCEYHP>UJוa(/ܵ_X|XCnOUBO4o`3)uoun1Fw G+D;px JhhuVDEWCG okWjų*$(UJgm:g[*QDa5AkޱfO X^j wA@㡒X=:2<<9=h :{5) *y9Q7& 3!fgMM,/+ j)mkc9d"( L֠O' [C+%M0b;$f}Kee Ӛ\u] Xl_Xa0#`,%~nQ9X9^ q4mpF&^os)L8O>CU, k2s1Nux<`?_BIBə̽vbŶqeQ(X =.?"7>&v 1]d npPELE&)dA YSƠ[ݒFS` Kt l!M+n$BJϋVpen0-uܜ[1WNi}PR50<-7*M*z1P)y{(X?zeghu 7pڧz*Ǐ t3j(2C^4EQb:xz Ng]>e-hZjgQ!K#Xd%^FJ\5l) j-Q"ϲE)̈{ a8=NE}A#UB7*@4"T!'֨dD3DlFE},nK"UlFi Ռ[noV䋪8k>|#emd2EO ~- ft:f#boQj6g>4 UPW<W^ zeY2qӸ<;uNv7yY7 NN^,7D-F>ח-A%2y* նV]"N@T*KLf&"D!^t7q\JP!<{Gbc7ab'I'1=!5@h/|7!iP٢!7TVs|Nl>Fe G|*u! LQշksic MIlנ~e}o/&ND TXh'MEWD%ݜ:>wqk5}zDput"U6J)Eo5kְm4k@O JD45+ Pwo3ayiE hEFt#5',)wkpMa]r9ɒ(/ Ăx( eP[*O{HX"`r:~DGJ+*hKP SQ H* Ua6Uӵ ĈԩB CHoLu3Cܘ7%A. d?`nUŽ5waU6mFZt\%P"8[2H0`*MPϧhe޽k͔=(k;ij 4bO}ΞOoܓ1ͻVa)xh#me3k dY<˹~:ϙ D%F df#|?dku·իIX质,g )z%#['!G/&EqMBSU%Cѳ9-ڼ*O!aQEt]կy^hxfç ݣ< I,3:FStJCfDaqhs^`ov"U: wdNghE;5zk}Nu{l ڡYSxOP&Pxo*+ GYx{ȴ*`ı(m>gG75"Qt"7jx6ztSj*F$(xD+N*a> <#9 1],=V$f@n# -NC\3:J歛]x }㮽&"c$OӻhM07o҅Fe|1>q;h4yej^q%Oxg}j618yJ|:G/yd;>̷ 8EY4u`G?1"oyҬ~ 2!!91ScJՒ=")ͨsh:2sD[| :tM6hb껎0тO"C癎dENis{;8yh|'uR-`| $J@NVKc{{lg;Mq GכT%$(<RI׆t=NVpz=8̑mYٝ'"C+1N҆PNbUYA mNn9&˛&/ߚ$hq T˺qH+dž<彛mw9*j~g"ۿ@MN2O#Xd=~xRM{FKv(|8il 1iM_,B痕}JyU𙧹2\Hzꢢ$15ģ+{ ߵ@?${J3f>,rd> K_6I:j߃t:c WRټfJ3זmyvoW.^f`/|Ƕ/`7J` E>S*-Yd7_a LX.֜];:"rQ>F5 9G/S :bZyXX Klxxw s7s_6g bp+>}퀷lM* .1*ǫPcc>+DNͳ>K͚񮵀571K 2{LL&Oc,V,4|{i,BfC2.ң^Yk svct~vzYKcʲpgȿIҼѓ8q CS5uuOVF['$$ / ѱj,eSAl;t!Zc˂rٳ'/%Oi~?c|O3g53GT K!m% etN{G?K/\`8B(d>mty铼 |? }iMS@")}6* <ƒ=s=7+4uMh>AQj\bJnBR !6q AQ0%)r c*r*Y(߸0[wPogjE$/%SLGPhEsƳ17sz|^Qv,Ji\{M3, q!:yF["Ϡ7q;Ի3ʣhu!*hW ?'YK@!akySj۪;w_ J] 10DZ&BAFdafu8! cgky‹mornyS3MY[9~:[p)ǎUf)St؜({Q7x既JYvya49IY 5:&ЫflO)NyPscɲe <*f* U=k]M1.L挪iÍRn0Vf˒=ԇ^d;70=eĜ‚=ot)15/֦&}jzDzV38ҶwRiLٜ=>Jo+RMJAr7)=Ig9*tx~.]@=lIGGf- PzyF-ݲs\^8K"fEGr)~y'r:u>ǟ>h/dP#s3Dxcy^4e7y住zSf16OmS?QєfVǜv }*?18dЙ!X/|gOrF6T9.I Et-B*K[c+}E'8,Dos\ÿ.DUb~ʫj:XP+Z:Xd[-?[ T=ְށ<ő9_zzy[ &ٍ* ١M$1^2TJ#Us 1"{i8oJ15{j*Ք݌PifU`!3<@UX,TIs@(|&lihCnIT׀w}GȾWkeީL ;(/K? ~䝒n@f ،=yNS;Eķl48p[l>mM7gc.FL86њܫsⅫ_x*c5

_x |.'Fb>CL "dBYΑMzexH5QWB)rݜ?Ƿ7',фz:'4qR#VpTUe)ֺ:Zqh 9eq|d2f2cVQhF3`̪.֊̼ǟַVI4#Ғ,Sgp^NǬ= K*LET>59QcrZhĸ@3>y h{jwi+6<0gׇ|5"3(Y:ɫC*>/Ḷ4-RI}ŅqŽl/}\ )<|dzXs ߜ,69()S|Kk=E ./)ZsݻSP&}8#?(!B"bAi53jtgirRԛ=WX}4_Ň߯m1q{wnal8z~Oh`g@H@RM{{FqƊ% "'hF“>O?EaPQC*z^ 8DCP}Vn1 P/oqqοrp@>#ѡe9J&2dF#$^G{'|W_{>,U>%B*8CO?Ns/B1ʱE l&beM#2iI##k7hu4ZMN8%;[|B㽥vp yX`NVDb.~!wGR)ݮ${f8-kaBcoYR.+8D`odxNHy[d rxim!zYxl~d {;Nqn4z 8?`> N*8&0*>C"ͬ~U ft~EÙRAxNZZP9M:6{>E`Y7*ZY} g%%:8n<5$mɡ%89t'! )iT.'}^/ֽ<%\qg .0绫9//]͑$$ M>~@di&2T`+JPu2ut .KQ\:Fk7f*B@NeV79e&:xi4| _vvآ`;g>a~qAX9?ٗ(J$nǞxyZs6SX<_7Y[(CteAe`93xIPxB#-Tj6PFH)Y^^ackhf~t>uH2Js@Y{ɂN %~Q'Iwb |3*L~MEZ}{s`t;"uTp|4YE4 h4(+MmDط̂./K:hɋ8gm}f3oJQs-J d.ͬAwJ5-ctoÑ=ZVplS*!HM^IuSeYbAʖI"ro@zBH$2E AQö(4^+D*O#HHSE=oce$8"ɻÄث3Wyc  ),--S;Tz;o-LИ΃4 Fvբ_n^?Qy,޺Vh=9f=y|܏gqū{Vh-;{>ԹR 2X{s]d;ᾎ6D+IS 4W`XG:s|ʀ w0 #B|io>2l  *R%u~^q)?$YaII`?ljy{/ `Tc`aLTмi:!77.^h.W*;rM66*S,hw<'eC*luկ~>oQY-x\-A J+ڝʱSGu;tZ \vp$*0HZη'N_~NElnFF١9%QaQ:k ӊ[.^şr [[#ƣSL 8)J!tX80vvEqvO;v_:C"bB(V<~RO›y=A\H;Bn7i;a!2A󌪒+7*2S@)MJm]!l3 4ei_Fcks:`k3X^8}=,.TRp6i AX(J F,&m:sH:K'HU;%4V7FHO(tJ qXHY[ƱTCJV[7ȱ# C^{ʢ`8qY=uHJgޏ9X["sM=sW_}__OldKlQ"|(6dY3 /JE0]>߭b?̂_~5tqz.+Q~Z[]~a>Mg)y(#7r4zV$ьF ȩn$4_xlw[$!we|ln}Ɛ:Qݤ;8㨼Xtǁh%{6b_] .x!s٨J9x#.q}Ls92Q sxrQ>vOvZ s l; !xucq t,H"DƵVg21`~W/#_Py{SSfɻT%$A#>O< ՊR흃=^ .+dP'@YJ2t"KX&"Q,E7$JC^869[;e/ ǀ$ϼk7fGJӄgA.^Wb3*\Y*J3g9}"|EJV4e­ 61Mdߝ4XOB('I mIXwL$ 7x Dt'0gmBDM%1a2NN ]1Q4 #ˁ9?yb|5ƢKڱRF8^.kDWHT`!gBBRMŹvS#(h5Rш\iTX\H2dUTH؎-dew@bA";S)56TlH4R`e]Zjc<޹k`ݣ0?h㰄IH8Or4VW!aՆ c*bs8d H[9&/ż$[b\@ ཥ}QUo=x;%Yj */Y/c{3g`pnLU q*X Ƚ4N?y_p9w F KB2\ >.^5 u%#3p9߸C=hJp֓*,A%3ay ɿs>Do8lkشb/'$߃$ɞEN"՞?iU@xg-yĥ~>wq* ⳄPhH3]5:x ׷ ˣb#'RfDxjwIvGHhwZ7DDU4m )wxDd;2~|B׍ q'o~͍-ʲ" ʼ於?oG:e+ IDAT!-"s#6c oe+̑>("JDd;LgqY^?:Ec1 =AUϽƱ9i^xEUlej:;2c<stY<8՛TX)@>y{q!>/֧ȇ#uq(-^@6۫kP :vླYߣ(Al:lZAߨf<(x!UinB :xMjYퟙO߶=ڏvmkLIR G5Ҷi*#ŧ Lhbd&*Y¾9L3 gR/4C``X覴lJƐ, T;|xwkxK^|iA 4q!W Of$iF-&OLgosÝ}<Akm= ^Ry3[ΐ:K^TY#T|HKu3ݝ{nz`G8c/śT$8CafESOfǏ߶SҴH>3JopA/L]X&0 ܀jOfܻ#2ŀ;"gz{E4LF$<8~ΕhkȽŝ-斖8$Y79<))W[t-R.EVk+f%c >x&zㄧ@&+--@U%^3%_vǺ]ZAEMF#$7Lɦc9NCK܉ @6PtR)NLwGbM{&%3`\lg.o(طF[BpT;~,*f6!j1?/!i31tb|=40A0-mgog6/D+ ~.E ȝcT< g=Hn™#Kw.Z.U:m"kxز~N.GLi;1Y;\{3{ л ƣ1`{u-lt95TEk;1e"@DC i8 BKT8tnlP*EFw[-ڹW9Czl\GȀz(&lqүUYտ*>0b8)Zb*^8GkSHٸPy>LSL-" 'S:)XY^ms:(mY;~ FJN]h] $M& P=EMXX?T >7Ilֻ 1w;5 y:%:iG%Zviq...xpJ|!yaH0xe)[V7ƌ D&CBMy/U鱥!I$4T3Qns1x/I4 ":IqS7c;5n4BJ4"bcZt3b0vX/0&YSNOR8zsUYrҕ Ib#(:R4[Iq7#cmXIl5Y]oediw6|F~K?#Y$IH҄*Z1 )IM E;\}n^ 􇂭¹)3w!,C 0yfͣ3yLt6)(ViJ7#T+>;k"{<TJ^VxYQbjCaAtO?p?ov9tmθ$7+B.q᳴%ʄkT7%~A.\") g6׹jV 8 R8m4d֢Y, ˦++TiJ`i4ۤVƒМX xAZ7nsX(7^a !Z N\nNEs[ t0N42`$w/fukQ>U2._Z$߽<ޓ{BJJ:7AAb uqkbH/l[ (%I5)`/"X"\(8rB`м>^v}|5LB0vMRnI~}ykoqgX5}b"<2Ͽz$255@6/ (1][`-z^ztp!bcp>T ^cʒ7^< cK|Y o Na$Ih[X-0Z F!/}E6W6# Fe2Tм8'p}8)FĤ808bœ)/=|`ɒy&3PpIށŐ4)KleHS;XvP8IZ\|MV.A5CJ8?,t"aZ 7]2$ӑĻ0VSM[]6ZiD"pg6qV9蝃@03ԟ ل2lE:Gxseŕj2 ̚=9u8E>&fuUAYnEPXl +q\i\k^XXSF.9TąR2,H"3LY։&MTpPa;WHQGܞ LQ>{Ġ=h =0xQ*!I B/{.>QB Dчyw*/GC38)He5,\kְm9[f30 Gd& ܺ|U>gO?#ſ}p:Ņs,Z p˲yGӡiwNx7iiO;E`!..'V+ -#<1eN]cicIkNdsg-9Cgaeة UdSOr5u5cx5ҬNO= O7REcOW/6w(tw"xk8c9IoTBpZ륷Ȓ$h"%=B13:s/^x;}?X]CZ6cinVR_: ,3 '8]ZXXV:}7a~ew#St!fݹ]:{)2a E5qL̹|`xۯi;I 2Xl4d Ɩ@FT·jq-X 'F/]drggo9FG*J4jvhkOS 6 OQdߺɧNqyp}-sMnq!CGG9O3KNj;l[?poP!ehS_:P5{p-@;Ĥt;Moh6@)x*1Jhqxgflex6ajS nbL\9I\$KqU+|_E3.b/DL42 !o[|R%ŊHD% ygAW9[6ZҢeg1<5i#CUU'k$H%o q}P$M8i1ݤU\:t Ey΅a:e\#%jw0{>8yxF`8I^lPI{ApY3"^r>_%yؖ1-!I iKxs dh#B&y5fnŘV I$ϑCEY\xȱ ia 4Zňh,);@Q9Y.@KE^ LlRN aMX yA+aPXFy4S4D͊s%U"01|hti/W컞i?yTPwBmb$XchҴDkT(kY VȉG~fݝ㝂`F%EHzafMÌ3TeAg ,$RDڹT @@as}@ R%Șx;,#Wf}LVz qH TKW1stO|36o }Z'+ ,?4E/,bm^Y_oJUr_o$YyV#yP7H/^b(HRk^%ߕ |mmCǎq7O2aeG >rԥ-ko ZJDJ śfp|)&7|}Je懰H?+\2*5 3WFerqru#m3S!9Gx˼NF0TLƶ<$8\l{Oǽ=?>Tc1MUʋրIv"j];I*=:h`4ugسj$Bbʒ䜥U1(%1 zw h~i<[Ʊ#J+zlQdQ elI>ޅ v{D5*o U%ZM]ep`T :qkG^U8k'-n"1WP"{; Mua׎c1̂Ӓ`ioBr_c7; "M*XuGИS1׷6ȫ&f Cvl`g8#KH9\Y26yU`u}=l K wR:smY |EQ,--R5Ml w'ͥ7Z;sgqi jN9EՊNEP\cUrf$b:"@U_84D&<쿵n&X+< 5sx\JI{|gol1'5ΈE" :s;$WiT% LP mgW/rޔ,:HK%e 4"+,yt(s.W+OX(*:Ed憎Kr2TH :vFc M<_򆅢BLpxi?s|>D_U89~HBEv=ߓLVL>y${-BFjA{O=rR J9pSP^{ e|GȰ0MB&z D NW| H sH@c`i,Dz/SP" LXCX7]ښ16{ x sSVXUREs*V1+$i'nw^|oB#$h z5|2sv˒JVjfpXo' -w4>Vv>C9ϙͺ hR;fOB!*؞;AZ8ڒvbŅ%cs\z$gm"cyJ(*S;)nn2찲'M Qpಒ2عJE-49A Ckf%Q:)Xc|ÙJhf) Z(ܷfR* TQEa`]Ҙ,fKK,-$aJ64ZM8t!<@ E]gޟpʽsc Jeeepq-q7"Yp0r%.vKo]DA5/\dk{-k\xWT\yW^>GQU&v%-lJs1>v~+77W(эGp1龽"Y@Jh5ۮ\_"4kIk0{7WyŲY# ڱ/1V HHlIc 6-rcpr;tzXbQzZXXuJ#(B*oܷH;Hlvlym6sc4>T6!N^(]2 r1W /Qhs((6qP9M,}&B{,f68}[jL[.Pǝed B1g ; ٪-<ÉzUзaȝLۊ_8K]o;^ߺmL@= (X'!r*Ooz:͊m0-۪BX6T]DA&1I|8 [㍝qb2P ! QSQ嚡W4Ƅ_{݇?AjD?5i!\'9CA8P;"Z~GϤo8G~zBJӶ,8gؚ2+8}G`aW]gk갓Q*u|8N-5|pC`e4ͅu98͵VG~mcZ 8(MxWS-GT&(Djp1;;G9ZhFBQƆf{=Y]g~ץr]Un 9p0`HP̋"zћ3/ C]]U3?n=sνif]QY[u*lщatJ/ݞDfsR`6)bDQD^f!Nd<$iJEeLftz= m ~V:Y5ˌ.$ BIBQQcmG$ JA<8E6)ba1[kuѾY~$0wowPN|]N!Lb>O>믽c+}@G?)qs|!^k\F!O=,^[50`ww{4O?Nt:C~ Io7͵Ox},~Rjcyj֘P y'kЩ`5T 86~6!Ypos&X`k}ٌ~ [ZAj'҂U1߿jo 4#KDG'Gt:,CZׁO?*Z:Nb!P>-mX-퐞sy~D I<}M|#kLqC-MYxwm`e.dK IDAT7Ә`~#w|8;r39+C/G`XT;*ž^, u*uƕ㝙fz@E&"^;:䤬336̢noz!s_<`r4 y 4T/Wy!N֬D;(5zfvP:s"O;%)!C񍓒%Mźgyޒo<ø^ 3צ7x"MV7z }01SJ >S.,hb,14E Sot>8(5SfiRQ3].vI!U0\i?dgإAt'm~r:G N5 㩨skvB eضp`jĻujgeR;W—nMK!nϟ?w'?&j[ONW:]9ҨC'eA(89:BWU$IT)'$IAkME8FUU$I_:>g)$i r $*TR/Wy uFES﷭16j̶/6a߿նf)q䙧n0 Zt:15&)R(I*Ml Tq YtKwf|TuEn'#VWWE1(4s"(b^̚l*J8XGRJ}($248Eq. `FHјi[^ g揄9Z,d_ĀY__w_2ZT #Ry d2XY_/P6ZM+ ]?oPRf/.]̥ګgfy!FMc,!菺-Q1b۟xE omX]]RCi֌ꨫ_\D93h-iׇLWױ*BFH-⨏NÈs%pK(+X$'m5,lX~OFWDc1Q:l$(,wMžb⠇?F:ˑ;ݔ.m,:orTR I/siF8^1_3M8m S,umpӸ47QNgXڶ6fq ^[ܱ/k=cr)yC,fn^>)[*RFQڦyQFHnWޠKsɐ%<rlĒqAsG#HnQ j>W-=X/?%e]<P,.Tf-SOroĢl?oNR'Y$u55@yWYka]|_>ݮpB>KcC`i1946Ͷ 8m`ksgNE9 lSϲDQHI(:tL޹uk׮!IW^W]VDa5c ѨmI^DN!1u6Uhq Q 8ܻG&dOyVs03l14r\]SČp&;#d{x IgsJK$;R!><+E{Aȭ;1i{CWH)cTڕuBg9*ѡ*2OvLSPi(uEJf.E')6Ls NјBzC A s gɋ)i3b' i6GCw)|k3iy +|#^'DI[Y.(٦ΞqaH36"g P0Z3oxkz"uRSK7AK;nVUgxHЂBfY^jfҎO=4w#7>z.revZJk %`oLGmD؝asPD[]=_v]X_D;ϹF۵e`=C-TgA-*4$mif:h:f? XIC612$"󜪪Ȳ Ut61Ѻ;f M$sd![$ 1)ʵL3$Ta| 3TY>ݝ]Pa̭ĢH8!I"f ןBw_qsiOUpNޡJ$xHՀ"/QA~MEQAvw23pBRNk c,ƁT$JI 9Ln$H0=H3& q TV.͋孏5$f~Am~z(¹=>,ܹ~?vN#!Gއy揾-R,/]8jGSyf%b;Ԁ>8G.#kp]i٦U"-)FlhAԨJ3V?K$\9eoGtĎBHt,J`UيUkȋR`|Bo8AH $7y^:>ΑQXjJtgQ;o!c$ߙsHVP $ yr2ь+ (cVT:NrxʑUqtU\ Z&~?~ obےOxZ3S#ՀA냷HqK35H*A8arW쌳(Rϙc+of2Y͛]a_I*H,U=od?us %kFR w }7g/\n۫'7iII]s]4eׄw~WwKrs<۳zTy)xƾx9u>(8hgKԇ6k-k pI#A_<.Fݙ ^( w)˂{Z|>9l6c2r|x:A"\D%am=eݏeq4ӮKYl~/. B(&C8aϱBk * ֑W( {̊HxքX&B788ً߹.\8O|-wڴjR$Ѡ5@z6Th!$N|ėv`eh'A9 GcTQg;W .c?KO2*ٰlNv̼+Ļc2)r0$srTnΚVx/>_Ja^yɄ@W>]AQbAJW0|$ $cןBv 7/طzx(b)*9Gf {dkYKsοXClg=Sֲq{Ze\9._{7ˇǓ݀O\3e^IS98,آ=iP'7pgA`}ro 9=ah"3:{A|q5_<'w/,:祐ťm? vcd]=gݶ_|si~x} Q},ХhT>fŜ/X'kDM HJ xk"?c9n>|A9QX25[$IB|Zi eEzʐ):P3Mu0c(07ㄪuZ`T*š"67$IJRtzsb ʲvG%-.B* Wg,N5Dz8FIA+.J M.m$Y;wq7V{kkke2/Itu1iNNf z ƀ8 ߉6J.qeJmH'y^I;<^Ehc}6++aJ8 1EZl6;"fH;1XGT"BuV))V>{ԭ{.vd=8sO6SkhgOz? ;.Yf:<{Z?fEj)_TY]zBfn8HO=V6H (OkTnk #~{G@[<>`$aP;hKѭ*!pFs$h3>)&5p,Bˑ W>d!qeHuO-J. YeE$oΦ8`r:9^U鯁h[pڰ ^@g)hVAs^(&2ă|$:`w8N xj l:E ƿ}N=7u UMZF@+#:7/98'#XT2DKfPڃ^& |$3Ȏ)+ '^+DZNm|VqKAM`@UaoNַ1v9'$ :Vrl6C #iH”x.DJ8I(c0@N(4~P(`D<# K(%u`9 ꅰ~Xtg1N mZ^^r/}v Z"TZ#c-Zkxc(~h}4Ƨ[ua 3Tc%xS]S'MZWWj>ڋl^c,7ZA|| '8>'xf" EMZ2kIO7 BH˓|7y;57Jl]59d1!1J)("@))Eڑ5{=JfUAHG $y^KUi0~|%UUOtS[[ۀ`6"i֭(E *mjphmJzHyT`0@5$pKIʈڡ%[L&3:bsҥ+ad2ۤq\?Gv;څH4UL~6(_U,R0<R%؏XJb9EAN5(Sl[p IDATlNI=h ɲ0 (*M6IU+^?hG0A@e A38JyK1)4M#4Y)+a@UIGc488ЦjMTq qգ$r>sYIxpB^tVW)֝]P'H|Εu0f6?T +367M''H!8ٛ1OyZ$˒lF]!L8p|qik!/stݝV)kt$8Ȳz)nK0! T(ˆ,XeuϬ(|N5Ijyn! @G{E:~~42`>1@J-/xmYUڪb[#39J*1-fA*>L ψ6m_-ibhbyj6)Q;*c05s]&IJ*Ig!ŧڅ:0\<# ӛ_1W""ǟoKFZ$ȗ`Qȵ7ۻ Gr!Rrݚ$H; {g/ Yqe677xͷpf1䳟ȋtB(]F7 Iܹ "O?۷^=3:{{{ܼy!|*G-Ow幏>x ;{]o˘Ɍ݃Cb%7}\R|fo_W7E@H\a JGt:)n~:T$ Y|5() 6!"t2b˂*/ #T@ #nRF~QE|A%ܢbO3~?9Aa"4%jFa)8,J}w;T+nے׊1y([ԋQapunHJke Ao4>oKf|3[~J*߶o.w?g9A]H5,g`§`MUWfjߞs B fQ;eN%<0tJ! vp,V E)5R6Ô 6PڸQ 8s W 4)G9Kzq™F E߮}^(%9WQVwϜQ$o<8_(ϬvPJѓ?}?yuxkdžqe1Tmme ΰGU~+<rWmm] S$-fU)#gW~SO?{Vy7~'#q@4ӔPCj}g**dT  Y>o0! Nb\^ 鰕:0l^ A>f˾{-q1*b^·Q ͭ0˙︌/.]eEn6gPR%Xm0lS\c"IoE J9 K,=OB{_ Q&WG >uy_{rL*K(Ek $iX.?w˯>sk=E8|! jK;րf,nJ,eH_=?=D/ εFNՂ~?g&n!!=˧f &n$or嵻L_ۃst<)us/y.g`b@}kiBQdJT ww,|l!Nxx޺Z8{{>zl{aKefapΝv-'UGdq|4,A`A늽#ΝLgS ]c R*ʪB!%j)_WȲ!${{!)Z-k[6Q,WW1r]+X/)*a18W}zH,XNUn0g̳9_7Е"uJwZTEu&~,QJp8$ 3 h4Ph]S~`>˘rTB%y*`2#:,JTTHƣ!ւc< 7 C~9::<Ȳh)wb.ynMf W_Zp4E ȶ6@Q`2S%,dENQeܺ}dp4ewo`Ð1EY][1lo!syh4G*AYyGI5-, ryl>Gd99'DQBz)^KdEN723d=2T~HDf[n9vSЇNۇv6DKP 7H);^蕴o[D Ԍ[GK_8IbB"0#Q^.DMF~Mر<$SG-MWLR`ISѼY'k1ab Gf0RA;za`-^C{qxL˔􈷤D$]FH8&KqŠV5;--|Yz#4Nսy4QO $ҵ"߭I86:eHH`E1?w^ \VHu\M#.]dXT:δdV0/ ?Aމp}f4Z4 R $R)Z`)@F zu+ d+r~|ʆ-4H+J $~/^@WNDSUP@/|ƳW _Y*SU*#D,ƙ D3>BMnAUU!P,d/ۅؚO!YD]PA2'⻱ϝOgm/,UGZ&i/8&)ɤI{WdXNgXJ+cE6H+{g͓‹;#9;:ӂ@JXXgBz]v&?+Ϛ LS("$EDĔeuARꊢ'1ݞ"N 33!od읜%$xHC%☸4dc_k_P"uz) pt8aiF Q ._$ Ui(hDU!>{|@GsCq2!R:IBv; N&vUp4Қe4IxbvJC͹ri 谳LTeA8"CE)Ye* MdcWx,FF Ebk]S=4~}6E}1ЋtA~8- O?Z m>m>zp?II|y[JP!ٖ;o$8Wi58^ݬbev$ XwV0Toc]3lS&z[| V(vF6TcD D0WB1BB);;7LFoU*;@KI*l$PSJ&`g 6{)'l~<FD2q^VO}1^Ȏ4 ݸŗEĦh[sI);m&cNH!<aHM' YEAB AF-9l*@'N>}ZOìic6WNKyZ v*#G`2ʭHa@VBc1裤o;Sv6NW_JMP]0PesChFBq;9ස!W}~=s/0vT^ DK)RiJ_v }NlC*no| m%^ĕ+W8w,N3g $s"'-s[k4WZ\{/]"B6iL\zz-#Zϵ_ohZ<|w]~׈b۷xZ-z>??d4#8 4% ^rϿV!RJ|' C$IBxR7y$ɒ@zVS5J%Q!=! s"!/~*4ަPd9H kq\UNfQ PJ9}˗/EB9R .^Ha>ֆ8l:1Eu{#咨E0hdS# 0xWGKp7E~Z쏧d _8-h"lbc݊85ߧER"1]~ãCZ-R{fxNay Y&/PeA! ޜݭ!&_ro/n2 h۴SdYP,IiZF?pgDmL6vR,N"-Ѽ):yuGd$w>;y8Ī-}6$8쏺ߦ:6U޲$#K٘$zJkjLBRv8տSb Z V&B2cP~lX))h]Y{=J!ip,A!=w4FcYu-,h$,KÕ`9Zܝ2:6}pXA1T/uc] ;Q1p 1ڂ%2@%qF@ov9gbކ.y =ۈ}ui݃)A9r:9ނi7gA%Q B>B'&`ze% -0u `Gg}/TmՕsKyل~Y?/@c3Xmk IDAT]axKvΜaL0P|ʢMZ~ {dYAxxRukAD0E ESBB09|<_^ٳz\xVMt;=*cx>EQjeQ~) .\H&4p,!RZݖxD]`}'giρikq1P S4&Mc|!˥f"/2(a'EJeReƐUrfYd%#f<UJeshUts{ed*G>* }j/=VgH?@i[+ yD$AyNl jZ&&ԁ8xluJhQd+V?N3XbyWTQtYw`Y8MIt A1gz ) {}pe `  (vQ"n`Zy>J(&hl2 ^9 W)?)_& ƩXKDQGe Ƌ ٳ"敋Y,0CM]Lэ" ~霯|t-#B[p˯_A#|z6Yd94Mx[ .v{ YTn#J%2}rVN 剪 .ԞN>e{y:QKSOzR7fk<].`۟"Ѳʎ4_6q;^@{Z*{ ZwXʡc XDN`ooߦܭ9f2uZrVt: @)EȖspb)oFڜk|0!hwtzm:>A1_.HS$WE\dYݡr箏eˤIth>/ |6ydikG-dV# _|]d,W+G ða&Kc"!9vDa{ni"g/^ lC?d( A Kc / = !=IdiS|faz8ͣ_4Xmnf{RJۦk;JzDIXQ{)b'_Nuz1 Jt=|!t=rw rҢ>Ҕ:9ؾQLf4q (C#\K]_ X`w,%a6eӭ.@%UIiX׀cAi!`. Bh2? OW FW& q myuD]Z26/hӵaǗ7=~GO>ch"N'`b/8ܩv &JzWXoCTvҾvDIѠ0 <+fa"…D$^G&(0ZtYσ8IB%=_*>p&,@J<4Iش6\JZ~X9;ZChe!rl i+BVXf[">"ִ!Jk<;6-ѭ“!6v#c1Zڔ-Pe![JVYiHՊ y^#IKcP,np<~ 9n9E$1vUe a`ɐA&bXb!sAk[&^H3|i0*#}C Ȓ֐P(I*&Nd5ӉBRQ *af\6R+a#}^ A YU=[B=P*'[3UN\H4MFC 7g& -a3zc=O\xGH5^1ULL >2hd%Ňw*'/49:H%ZdIp!Hwq# jQx9Q y$LΌ aN@LND?{c//RC\ 8~LRݲJE7%$$Ԥ t蒙pL6<[FW%4ؑ5:UJi '륦(ARH00nm5Av5΢Ku/iH@ad*:u+$~o@h,h׿ddpީکک}vv V%kDQާbIt=n(PZ1ǜ?|;ի_a=C)ٳgy5nߺo?%R#/^W fsa|;ls-<>!ހ??t:mFo CpU!(gvGiwQ=˽ZVݻx׸p_vhh<}z.?o__>`82 d4#O~c'E/YJQ_%W^NM7@bɏ~wB~jNg~ȕ7K?wrɇ7o_\Lz BbO*O>y,cv4^ ڱQm@X "XV6!^J9F*vJ.re8cVEMH1$AI!4Mi2(B)|># # $<,KBDg9v:gϞb* &\ˣ#(b: Bza֖Ӝ09]d,\nj 熆xyM &5;*r[[[aHeZ9QtiFA(Z!a#m".'R:Qe.qya3Z[h+P;g #JBTd5PJ7ղTF$A)+s]~FS-35pW@nѮ_@7 -@!U)tjvj@/ V1v{R9锢șͦt,e\I~kX.ܼydшbx2c4\-hpI*4{$iBZ2Oϗ0 ZA E?)`*MQ($eIhR{ꫯZkbY-c|}{ޭ6x$Mcݻ1~IF9s$Nܺu->c8sppDRnݾ~tށʀ"W)X `t4il$q\Pdt=Zif9C)/4Kc:pdEe׎5dBrcMiulFe@poYV.TcPJϳm}pb 2bL)@ץ]'L/AY7^r+u`? ׁ)P4^YЍl(I#sGO@խBY Y3nK>vy^u:*pi(j0@"dg1 wb.tE.F@FVv߅ f}y Q46X"bZhe$Sk <Be~>Uش!KQ mhOH.2@J-N1V`W乭.B"GJK]V"C|vlU6h`ʂēJv'/+Xnt7@Mg([>nh8U_Q_lȳ JgrlIDWPGi\ Ojh4ѡZ[??/Zrn$w@)%Jk%&^8rkuUN4[ [<8s03K ^BD-mG>SVI)!`ϝF A[}ouvv׶9AH'i)T#_󓊉|ʦs|`: ~m[s,8|?l}x$:d?ke)d0)UwåRiʫe)UƯH^D\ԦevYS_yeMF|p'a*cWWs\wH_ HDSXD5vZK78cL$jP#Fc:sߝWe*rmܠtjvji)Xlm E#`:vBfᶍdCV&B8+o'=9J)Z67n|ȃ?GxGJ㘇p+DQDF|K_f{{C~ptpȷ6NO&3"+Wy;+t:]?`ook׮n/" C6, FGcΟ?Ono~Qdb1sH, }Qbbgg d2/~:^~)Ѫ`<0NyW}; (WB?4IpJ̺(ْ?/m6[YIQM@mĉe~l/ R^4UWr=`U'mDDt?KM !Jin X^ EhL4BPZl$JfW;AƠMMo6l'EufJ^E IDATˊ~D{M*R?B!ֺ>!@YĝV@yFo:'}'YAg滥@^c&}U5( 7. Lԕ{_ UKDՎҰeVH!`2riDҠ@Jbu[+\;=ZVL&c@J#xϓaDᮗREspp@e<>bNg(L&H)g(yV0/bFDقbEVXdO;yڦE?5kѸQsoK))'1~ܲz|(U?*٤ݤs0B YK=r3%MS9YN "`S0ḅ_[7(RKOiifU⼾ gw7qEFG#}>CƳ)v}n,xיg˄b 6H!o_1h yhҊ .!Ղ}v"{?˙-,c}_}\8t6%G(q)uQ|;x6~@J eZ;;9Ji~?@~m}.`8FJVlۻ:e1Q`E\\y5z `hhotm;;Z!AtyYNVh?2F(Z߄0eakV6GrrI(8` "͟X/ C'mlLO%j`m(D`|Q&`n-!4+F /2cV BRBT@[%T-TFHJ /DYBLvXI`A+{NFI1M J+P4e~x57ըܸkӨ!jw;lEsEQ8C UY=1NP2tCLVMS4oҮ8֖y 0zOHkVjOZIi+!\gΝ׮r*yjmN!к^r}a#X.iE-4nIb1|/)op)%AEUy9EhZh2h, A;vCa'="Bˌ bg$ WH޴U IQOcEݟuE "VϻEQDu3j4NϞE'qLčgyZGO']0/?wǬ)poJ~S +Sj-:\'~Cs~ :A{! Ʃ߷ǏilFG%2p墅VP@'B>X5i,BSdE]JuOo2OO3pj sg }Vzo}_η0ZÇ7n@'݋QZ%GߣXE 2 !H0:FIO&DQ0<4I./^`ZlꇁV+sxtD묖+l~7Y7c ٻko%s,j_Zk<'(iR*Xc{6|5ЧH!1sx[x2`_QJVm4wn\Gz>eeJj$ȹs& ա2F3M=O'1RzO$ C(b2yhkI\s->Y *Y)M^ LAcH?ju: 1H+AI ndr%e:(|`*g,RbX+P4xGoq婮l[[[} G*Sp7 ; x<ģW8z be>i?){.>0}ZmyoOido`tc/,EF&aۭZ^W*}FXǤ|zlu;e&}҄]H#LeZ5jq?m)hs꘿2|I?;} Νک}vRԞ@sH/+[oqKWz ޸ɿ׿o0L FG#0 2^U1G3׮]gJ z3;\xK\dkkȍ{v$Mt"nfloo#<ƕ+Zn"? '^B0_J|[_cgg$IpE;_E~j <ϳBr{DzJH ʉ9R$o OziJ!2BX1w)heYr(XٔF2UASx֑Y2Vd>yNQ+ StUp+,sG8њ\xXv Unٮ)xB/5(ZUZJ iN?{g7GQwU}?6omgAȺe_u: ZZ=z4-meHl؉H3SWWO.C]C=hM4A` ~ʧ}݇6w!Jё)qF6 èQ#)PWblۺc ۷oC)͌d<ttdݵŇW5{^߰|JlIIPI(k&G{KG^~86\!}Vq"st3.n ߄("ضu[hپݟcMqH&\8v.Kja0fE˟ow\I2bMF‚SZ1kД`F 6M> uAryA=k`'f͚J}$w=4Oܕ~oߴi᳸;8{.QI Go)D +i,h2Hs)V-,[EYKn c$x*.]IRE%;P~bqqۑ*nNF:xɊMdɜ$ϯaJ-se_6 {biӺHsh'|W#ݮҭ6:+mu˖3N{LWV)V)#udNXZv|?M{{lQG=l$ܴq#[lu+~U0E<]'N'4mgDgϣf͚5=eؼq#Q֭gerAY<7~,l+MMT,Si4۷`aݺl۶p(Y|%gY`ۖw?[a9t@ }r9|GkMNL7ZRu0]UyHwW׮V̊(Ae B\ ]tݨSpuR'@@@*){:tpk â`ʆ+2G#˜qC?&@KK lQf!Z!%CYSQ QMۘY[s4"e8C["YMl;ҝ9&66g,څId%SҚDQ$fTt̹H'Ī:ny2( gݼXW*Eؚ#hI%kl/d WU8WW)zU+@EDžX$$EH2yf obO .|G_3۹]VA A)֊c?~Z˶mqkyeٝ¬R#0k sA)]I#/-"[B\X۹xd&)Y)qGad ?5|:;k^`S#T*Ew$$Fhh_@\Gl^jYSJODAZ5x&C`:sS.EvdF֙G8 H)3~Q57TXjK,x~`),J VaLvTJ'^c zY$b<`y|3jrG T+F(}*WrTVkObCqԪ:mR4$w/v yJWirwLTᜤUIpD"'O9vT@ᠲ]֝d2a:E"ĹZk $A H<(||g~2̅ҡn%.*<ŒVuU hkCEO;.164e˯-C"Sh-X(D=~7N!5 :Z@oB]]uL&9du?QGlq+1S2(<@ڕDjoo'ͺY9CA=.7)$J׮%tA|- IDATΨNâmʸ{;ݳw:`w'˱būƤ8>` MI4 ۦdSP (U蚅hĦHۂOwҽԝR8du;߬0m+ıqR؂R e 難T}S2reN T B,JR|J)'Uۑ+QN5Iw0P6({6p\~#\Q%5⊝NBA aG(h""P/un4hR`_5NGqм*KSlL8`sኧF2UUVIό(E?9(t8;::A@&rHZ$mn{]Z-U*廫{vQlTQVJҍWJ4=aҕS-_Dg6k9{|Δ)SHӼ=]g!?` ҟdgJrW.a | ;=.~$JqU(f)g )_;STDG^UiS~T҈)l(`"(y3| B *{mb?&9)_ۭT;;V:ڴZ%!HQDU&JmM;XeVp8XsKRjkhJ6ܑQrW/1bۖ,Y47_}4q?LVr.}ʁSVQ}&?L])rH QL l!~Ni='V6T*@18\b1t(R~~e0t&FEBx(){u{3~^{U֬~+RAD( E}Aa%RX[yL`uV':Fתf-;GC=+BKK ;'|2Ǚ5kl  K.O _`ɒ%~\p̙3 /|cc`رO>Z?~|l_W~VXu;v,z(ԧ4iRY0i$֬YG?.1ǰuV,Yի93f {7JLO?zW]zZky /p-^{g?Y,Yرc9y7?_CiAK1\r%<3;C9իWpBmҮuuu|fܹ`ԩ;qG:w&TKoћ$ =>l,Gaɒ%u]h{uv`Gkx ;8 F NGGGN'Guz+?|-z^}U֮]Kss3-bԨQL6tR̙3n w2km1w}7> vW]u&Lm޼ѣGwK/4|WOEt\.ezЗ|`ԨQ}QFas ,cg?K,=yW\qtk-7t?Okۋ0XXt)< |;/Rdv(m57|sod"]vY@Ewy455)իyu]{uv`G7k$~ӟ7Xs9Ә={67tSoӦM̙3}Cx≜qG?"̚5nSO=5\>>wE鷵}38O>|+^/ tL]]/r\,XR>;j*֭[GK:SO_ox1ot:͕W^Y$5 @!Jb ֱ%].#rw%\ =J)?|8z-׿d*o6BIQ>nSf͚ŏcfϞ͙gɽ[N~جYx_ܹsRrf_@m}D輏= ËƎˈ#e]=-wݹƍ9s&w^|}fΜ?>s_Yfq,\.>1fΜɣ>g5k\s 7p~::S3gdѢE9s0sL.\e;ȈFV\I[[|;ggvg?c=~3"KիWuV>L_N:B暢e˖^{E`rЇ*bŊxwarJr|pDGĉ'Ȓ%Kxzz+ЧL>:^z%:,N:$fϞ^{Utܭʔ)S8Cy'k;v,||L~XYfOd/vuY+x≼=)/P[:vvO#pmrJ>w:~uJ3g4i<+VX|9gy&z׻,?w+{ .?)ӧO/S;;椓N⥗^bz̛71cF[~d2n&n&}Y=Xz->2o޼"o+?q&N7ߌ\veEAh/_SO=őG_<VW#.p 'T\宧)eڵs=L4)HĂ ʹiӸ,?I4?ϹYpaE]cf͚ŏ~#~i?|V\ɪU8e"_uDȕdժU];nܸx6x@X\p;{[b-d2E}4:cƌO.zFާ~3g 7GubnXkcg̙w},]g}I&={l~~aN;"K̞=k-zg$`ӟeLO<{ pn2?~/׿uΊ%c o{ccckE#8;S^{Ess3/O?4T*s13w_jUM`J).$&M-hN</2k׮-;oe50PJqGsW}(FAbi?V/U^j#V* |^xLO] 9۷oIRWW/0r]wi~*QKJǜtIcXp!cԨQ~5_WjED  V\YâEhoocaƌ{YW7x#)!?f|,&6mbӦM OchhhSN!r=`NG=PNr,Yl9\m۶b\[]A\ L_>bT'axy)7*w׉D_=NW_dR~444SOY~zYfOpBNA\s=DzeG>>ѣyW8裹˺L#p}⥲SNsa}E477siqwsuZ*QG< = r!|g>s;wnE]ċ/ /YgOSS/ /;ʚ5kW Ĕ)Sz%]A.Si[o˗ssi|E1o<8 8~m^{5ƌe]& AW„ 4i,[ ,6>19׿h7uT|An?x9GNZ$Çot:ͦMb䬳Ϊx쎔ήS__~ҥKԧ>Ř1cUdMaƳ>9QGŊ+89蠃㚛⋹kկ~ň#z=?Iv} &ғ|\x曼KL81?s9ӟĴij^{-'p֭cڵr)S#/qyv/SIA8∸ZD.atMMMN/| eE]~NJ+Xx1'OK/nq1}tMĉ{%MA >(s-WT)\O~Z[[;v,z+G8q"=ZkN?t~_rByn|'>իWs}X Io3\uU˿K{Z7MO[oE|k_+)~ǦMhoo/駟aƺu:ﳣMqȑ#{41*нҭ_%Guct<}ݸA=u]׿uy# 05kcǎ]wV( Rvz/~̞=/|3,H[|I5-lI|'M|N A %t67Zݥ'~  ΁@]N8as"HL!Ͻ̫ʂ 9s&ӧO  @]xGIuQa'FD!ȑ#ioofܸqy|3l  @]2o"uF vj;0`5aZZ+ ߿+8昣E/ L2 /|=ܳ9'4jZo`ގ UwJsK/7?`͟ӧOGk͢^H6c?~q TM7s_V5_RgL7ofY}afԩUMY7j0\tUGDwgX997uknzƏW$_0w9G9߹^|M7Pa zdK/t2J=|`ٲe;/A(< @}@DI3~ǝ\/vc-c 3fT==ɗ 4YwD~uח# Vޔi㦢x7/,uF T{#yMgA_I:X;WZ.sq/kF7W-[4  IDATon:cwƏύ7/hޥ*n}*^{Qnߎ Tw-Z~w76l^GdƌwV͚a&bʕ^#iwp\"^Dnڲ>a446 t6K[?g3P`03Pa0՛$R`8@4464b@Sy) CTw@04LF0T,F0,&!A;D&njdSFڋ VC?b03Pca(2&!A[PdqlTӗFꌰ4:$ <1&@    ;$1AAAA"    DAAAA$   0 HAAAa "    0@D AAAAa@    AAAA"    DAAAA$   0 HAAAa "    0@D AAAAa?ٱ69cLcv8\Sʂ"յ<5Z*1Q.J{ڢK8.T-n_r{ѵ*Wok-ܢrYTP3)\_B}6v|Fk4Jy3WxɿKa&v݄g,W[QiA)6nބ}E]:Ec]Yf3*P @Y?U<(E` [i}s9u hZ19T'L> ֠X (ahFkO+LQjR*.g R+JcŪ0QY*/J)(khVSk Xc1+瞗Ҵ#*Qu5cu[ֱ} V{lN[6ŒhbƠɚYwerQ2}w)}Q5mK^UkYa3kl{P'^c,k*͢G=WShF)cQٍꎊʳ(^| 1 ̷)pj_=LܰR %W?Kٍ{smXu3kl8X"P`SD*>7o(:.Lyi_7,Ġ导~X| bQ# y(_hM .ϡhUt"X͂1XS@+5Ax$~$P2(y)B+E 8p19.5Y~=m9ưi6, |@F<08c}&zyl,[z;[NghyHI6*j#BT4D ;pe͆oH1+@Z)Ugl1q[k?c@kg xq+b]xgoJ+ar`焅d;dsr `ML?nC(xGk gXd/JoRRl0bre* &qmT?*jI1he,hb18O6y,bJQQHZE%&"X3JEBQHWs-@!Y|I|Op讗_箥oݓf.gAA?"2A Zd':Sqbg:n5^UlU7Iu ]_!(jyԩ.^8Wv&.=|Q-J26JrwTTl!oL8xUh<6,^1!֌1ex5XITUX,KaIJA FVUOaPxQJYx| rZQd2 D)[p  `R p-Q20yx5:X" N"#ThQ-r@ilYƴ]i?뷠 r` WNC&(G+ 0_u[/\^/>Ε=ͨ\B.t'eD`N J܁eJ,DV'84i1T$čFUیBesP7鸭Ud-QU\v#LCt]'Yf$BJ>{ Vr\DT(]FІPBXK*o#P`MX$&m$i X^oAA7""&p:0U+B:A,W:'yXe$,Ty" ڝ{3-A:gBCM L:O` gt,|\.֊F:m9 #FXRXwKch<* \,CaC8W c2(1 N=]r6Ήe@ir"w3W$rEY7 s/zC{ O>sb;N蚦}˯,D"%*-(c ZXhp.r6tYuZ?ne39Z@9t86&&ʂ ss"QLkL?vpsݗ<&04Өc\&pZ0gM &.OI'U!1iUЉZ@uR餥^nCK(?ujB B1EuCtʉ60[W`I>kLxN~E"K,9?cP 5hK.1βΚ,{&EK-͙  z k, |0L'<* FNRi&6T S在R*YTjy/)ON`F2[{tGJ޺JVz6~P.VD^ZġJ.&hu\0)]Q \eRn3X΀˶q ~*\ȴˣP&8؀˗1yL`M<\(6,Ǭq|EV,1|OqL;AA"|QЉZ;~~g2SIcw6]_{ϮV+*HxW,lЎz?~;7XĖGhgmyR*M ?th'M<+V%gA{̾ET,G\d51ypEвhB{¹I XV(?y=m.0ڏ"Ku m¼z:":aoQ,{I{+ NS& :R8p -ڜŇ;F{..ɆKomaQ[>񃌋au,ĜuK`lC`0肻wE{07&v PYP6)JiTJ7q`dyǸxfRaI#n`ɪd0ݒVS>24Ȱn-yk K݇R6wdW&@|*\<χ:o-@ *,CNt]z\E.hkhD\`*٢y96n bI(Xccq:HM(ru J%_xur72*HttSMJ'6su o*P&JA)?o]Ě4yNTg+EA!@5nU5UɕQ*!c Ԙ^<؅pQɪb&w/>+ӽdPN\W*>{sA b/]@uv=1BeKkr&O]achz?O c h1>t:CAypiоVG A`h.+h/ yHRX܊`ڏPCk2UJZ'N&Iܻv>.)2t t^yθ16 Zb*g `E -׍ OZ{eə%  imP6 ښ5͆m[XeOĞӞmgCk@O{J1qMuiJ(`eK//2۟5N HXgC-ұ `%~{ ؂Ot;Sēe&Qfܒp8+2{bAL=ŭFDA†czG"Vlͣʨк/qOQ剂nt\/cZL`bqƄ *﷨m`=7) Q& \X\1#Aʄ]F"^nA (Nob5YAA"2ǕĔJnKEza6&DO$UUթJVAYQ4Uʔp&n*3j-wr壢uP`Utn鱅..Wo론7HXnPx7l7yVw!m-ͤ2}tq#iTݛU[S-}m9{{ UҨt a\@&QQh+7bAP^$"Ea ,=LRV]<'hJ-gn5 콪&ޙro -Jwq9xZiVQ&0|PE;1{V IDATI@ Y$D&I.îi[\#˫U4%:NVNSҊ SYY"";% * 5AW e EXaSVAA@g  2Ѭ# 6ݱILVܗO(b aq ?Gz  :нFEW}elgAk?tz>6ó>&Ҩ|ꕦNk0f(F 4d ,Xne7|ds7mLՖ1UV*roY)],|P8HҤ nP!lJ[jWI3h |dPp e7( 5@ nTY0ذ(QN.8v.A vYKxa"gq9w9OwăJTl1h VSg cl.kes[~> xM>4O{cs6{)Ru \[: 46@> 䂁Kw"qF:߷>0lV~ ? mfA\,yڻzEwX$PP=bdil?O~[&<31d)RHqDpIkw[w̳{!`K{on'oJA="Ɔ.ɦJS-W6h{!qrv4y[v2O*,?Vٸ%*O!J#Uxٺ(LgmT:g? tP֑&›ԯOu-U.aw{'wZ'\E 7nɻHJWS b^1Xڍύ6Vb)b)LIweeO %s2B5$yvJzD"8PLs~@l~@2F|D8mo7۪=s4>[[?~'~Rl/"YNCĊG$«P;B:EjE$•,e nmp",6<ʐ*celۥ*T ^ʐ{;Ɔ=]q߯~ 1B&VLJ)×f\+x( M^km{n"çaEu*K}#*ԼaB.7 4 u:GTZn1Jƹ@yQڪ7qm"Uئ/`P' 'ށ)x_)X@Ճz]6H$Ug 5Veqq6~RTcGxW;(YDbCJVr ur| cv#wZ{Љ$G Ϭ$S)lĸ/`ʈ'<"C3`xq1W' O!mO rMK "Yw0bkfzocyI4.(1xWDR{ګjȠjA}4{U<*l: Ѳ d?!\UN9? rc'nv@`j2 }ėoڋjz bE% 9Euv5;镨|h bc Q+e*b)bvLIwec[@̡Io$WH1TI-|%jGYA!,ҳysk7v) CYx8c)CZ2T#SE̘벰DwqHer{ɷ9hfvv7po}?"?iIQdZ-gxw%>0ZK|)8iHwH%^D `d¶Ԍ\!o9pNS L!]J e TR:!mvY[rT|,-BEX),JzHoTY6*ՄDE@)"g%J+΢ -ĆH1zJW&26{6lj\N^𐋌fL %"3'*b%;i}$\&𱪕TQ:&Bykmp< {z]RGP O}S۱gO)ȩm6iLRQBO"4L$bX:)b)') qvb'=/[Vۺ*g1e&ֻ?`IBU['},[;6zH`8{_S_=dAhvЍwU*m6qv2k=tNRi= 2Z^THFgg`Pt fgyK߼2DP שT\CK#mP؜!dY 50S*c& h4 YĕEye2JᣕE|gG Y~I JAyC^IUNZ tV wh· *#=DP9Nlgɭ ((8X16V)Mq}@z܎(G#6xdΒ?1«"m3MTxpN@PJ.u^4dTxWsJ@ 87 6=yF| F5|hSo>TْG/j0p1A#*GLG Z+MBȔ{̹qs޻Y\\$!ш77QJq4X̬w\8V f "XV]_±GđE$.]lj4|&i#cia&&Fery^7CarbDhpɣ>}g09nm0n,(MIiJ$is?`}! *p7^NIn5^ƪmcZz&wbյL|!J"$MU+b/+" BNFd8cb#l$6 oI;dQɉ>f$s{*Ejj[U*18 duXo )%ޅ}7*}~E𻉾&†ǻW[עU(6lV  r z\eJׇԹR‡\=$R5r芘{F$Φ$SL1S1@&4{R(}TMg:+*T{7ox̠`geݕUΒ4[%kH x+p\Oa M$fN:PR.]Zssd6]J, 1bPkH 49XVj!CPcCAaQpߑ6LL<`Y'_z0ggg羹ɰ ׸DKO<΀)o}3?o|O|<,͠`cg?WrS|8O;SO>‘Z -ǵ>VƇ?8~a=GB?/HͿC| OZ&}o'?(c 9o>nGN/W̴4H/|[|sbO?9YO_7ǔe$W$"ъW_{T PW>I:1Ǟʨo)QQ0zҒo; <2IR+Nvl SI &`2P)x&|+Bokm 'b'v>XVB. Al'ɂDHY} VIYr"N@g䉱J*[LXSL1SL1O=$;IvYn.kR 7!նrn5Z&vRvY* rTJKt3,C ;V$YȍmQ4s?S=XnΓJY 7͌ǝN 99aQ;ڮlXj ;3 ZHqh%i yu4ΌjQn !Vt灻9uhe)zqbnn?f4}G8xqZ-l _PR#?rٙ=*;Ƨ9p"?C|+/+Wœ=g,..pױCeɅKyOr2f&/_|vN+CJA6$?8.JIsIڝDowįycmuz;=,ty}s],/"-HJcHF ?·Cg`j`[ jE~dElt6!)KcT T!}pOX1@IEi2PLXU+`"{OuﲕD0uhO@MAފ}Ȁ}nb@Շ竪0>ļs.7Cc(۪cLɐcRJʾ5*OM䢼+dE$Oja E3imc>b)b)~1%܎|q`OB|OoU-OT:Ts~ wh4yR$%pq< !5̗rO("gG480=6 c&!3喆-q6l &Bp(CɎx݅!TPP!w! my_yr5 H#id;h_ ltL:-Ii6Љ䉣4 z$淸I.\ϿB ',J)׸z&ei@ Bf$k_%kπw\]WG2~Wҹu,v2.]ۤݝ' K1D%U. Ve.]Yv+B)f络8~C|CO!ItL':Mow33Xq~=9G~g8 J)<4we`ss}͝p&L `YP$Zs|K:4[ g ܓ1Cv$ rCK`>R*D_$lRY=Fe[Q$U{a &B"tR >"6Ue'I*ݣpTYDMDr֓{RڧZ d>z_p[ *p{Rq_~.=IYkcvS6rcFEV/$P>R%(#"*%SE%iCDWDbJ&g9p,2̦SL1SLq`kp['8[ЦTހ8b,ۛ\d6NNȝ'Q ҂9޺] PN.yoS:R16`nE{ Jq…@=\m0m@xT8$ U޷ Wa&,/)B!Z%EzFO7YJvpyGЦrhD^R mdIGx!}{Rccc c,B8'}S" IRe=`4OKvjC c/k"='x{pu/4;$j"_&V6Jj=Jkvxf#aw8Buok 3$ qv2O > 1{|lycc-k=]E!Cؐ䝏{jIK3bfG4U-,/ t|uX+g@ۚPL sgj;MR`aB;Q"ƒ ާ}A{=ݭ9fwn7HL/#|e L]鋪O Xký)^H,%"AS^*΅ d^QKw/L| Ύ7cl\X|/)b)DŽ)  bIH}ry^w8uZk"}*uQ">AsճNK?xݛR\u ke̺^"@qҡRʂk/=Cnsd1$5nTB;n5)EIcYߢi1s| &$BU cL8Uc"qVP)#O9~w|k-J*ԄDɠ8/$ށ)*8l:j[M-ֆ[̴S:u5o-6._;G| ~?Oh #Jk#aNk93ᤌU0(4pO>q/_7?" 8W09˟"5I鶙_Zdni2EKV7u'zvZ+4`hŖi"m\  ;CTU!mfyϕ!۪>um5UN |^Tᝬ-GmGJ>ee,33OH&(T m:U&dEXj]hHxx)9h@T,GɨL ZS)V[wQ<`.m_+`ES$){-*JXHeB$ j$)m#KAm,[lkAM;?vBc'll ցdKJk;SL1S˘@0r[U52U}$STo)垬> K}][([ϕϳse{O( Xn)( O0XQ32ʠ'I3JHRud3shT_56vJrǑSGr2 {ҠE(7`Ò3\qkDКiY,^D -}X=],u'CJ7J!Gk03-ΖxӲ&/_-%8Ѡۀfó)֫,5 f_yg\.l`>@RJ;ħ~H`c{nҊGy/0??DkEY b )@ˊLgJcBX-r"Eg:Ofci= W JkQNBΉ$*wn  gBP|i)JʋC%թ>Uqm*CζCxl6Q8HC[gb@LX,]XE B=dTX' Dʾ~swJʐgS+U'&Bs?.梽 txhiќ mWeƋQ*34>u8.ӍFg օ~[` aO/mc$K)g=j[P@NUJ7&~ J&l97V))^xy%JWP\b)b$U:;=yF31Z)Pl^z 篡 Oz$."QF)6.:]`K9^`ӣp&=$iitؑ q !a @~e B"$>!de 5QPcbgΠd*&EF~'b{տ L|SuAJ&gJ7b* m+?\磍8h(xiCr7جRɨ*pHpSηN8~go]&v@x"I%%4c [p IuB UМ|`~! %K!qt: xU,O= -sO= 740e~j]uĦ,1. +g]^/9>V I e)x*ΕX[m(N?Ҋ]^zu6wr n}|gY7"\"@ f?zx],}ǽGbF] K>{` CPR%˅IHhDh1! B5V[{jP5/30enZURX =3dD7Ee-Ԕ3, EQ `{OQ( c6 "RjZ 4Ϝfk{L=z/=Tq|vDT60ϑ!@(E _2lIJgvFp0b8REz2(Ye]cA= ##:n㸲\ym>SL1StaJP>$6f@OrK!oYI-S~*[!ՠ")xdza^9e \[r߾fXgjI386XU[D]2NEy<+@hLtH܉dpD/Yg (Qua]ֈ||IS 0Xݦ_p:A:xh$ h0ãbS9@ԩh dQ8HTkm eBe-%B" YwBbJ /t&!C̀k" }@$uc5(^l~"'/"V>TJM.=",C(X͐xM{PZ2:ڭoQM˹|"y`\@Ia!VS6ݻN7nP)b)SdžL7דrwaoaI ؗ8+(e t3&Q%ȇ|WX=w{#I3!p^T`UQAhPZӤ4 ፍ3)5RjliyH82֝Z:T P*d/(ID ~0c > ]`uop#pl &u8-&cn3?yӉa#Iarbv=^C4!ȝʦ}p,8|/=> "^y p 8'H s,φk9 ?"fo|M5s_" 6wȱC.TR*XC²۷|9w:K 4 {nT$S1q?JLA!e,.DU){0 $I6#<}>X3}4F_;*AOp|/:8F"Ձ8g:)G 8o~PkN9ZƎZ$=HRAzB伧VC@y5w'  %eQY*n'ʮ=%|BΏ%aR Yi>,i ~8d7 CnCM|* z7or34OeTxSsb둏 }+.fQrļRjJYFFC'7(6I`Y6Kӡ|cdhжnm738M sH M &gg.DQULzP$Rru*[[; xoqI=,,S,tFBB&H$W\g]'5ڎz$\A}VM @&#GHf6WVy)b)S0%Ta={+멪~5^h8Lh zm66ΠKM&X[CU7Ɋ9rU[S: fB`RopD jaB4wd8IgvaMR<2($p >DG;ٺz};}AA ?$+4z+-Bw*>p@:PZP$M1xla"1BMu7 &?Q-%kf-y9ZTY_ EN6%=tj# `-rn|eU.޸̱ b0*yZppuSJ]Z6 W9avv}*)E\Y S awef$Gгd`5 xR砷<#n$3OS3!ZT#%K|f4'Mt L>lr%:rOp5Q$tag{' cƑ 'S,äV/A %ٸ>Jҹ8ͥE q!^+PO 0SL1S0%:Tag.J(a #߳%%/|H;:-,E)V arLIss }"+H[,:4paG~Ojʙ+s EӠ\E G)!NyD *:ئVw8/&ȁp e}eŬR$!sHA'Mfn7H;Mng,$iCΐ$kH4ހ|gF#P6A ợޕ.t! r߉q0iÛW;!՛,S c PI,*H@0 =-@:Jyos;K҆׹,Ͻl=ÒaPFawKgkIp }^(Z*^t3w:IHBH0q}$!Ib:*@,Q<>/0*:!Ih5;_p]Ghd)st~3$2 @vIYURx*))8<ljCwCp%JTJ`1, -/KuI&I4J(\,uo?b)bj@ >yV85R :-5!#sf wXt 3I%Jak ~(+]Bݝc1 ` #.~B3I4~,FM1Q][?,+|iټ~7Y8qV$Budh 5Ӣuxf}tf($nVT 4NXB!w'h^(,f$Ф )`YPw0 JUW6!5^D)$RH zvHWIv\–LVCN/Y%?w G9Q\6^!efG}n!j0,-_e~LojRV"X$ϏTFNwPH1nsl)~sIed{gK;Cf5Wuэ @&D R/N+AzGX +0#$є)q2 @kx2L^{﫮$@1p;0JEiױ8y?K( QPX*Dl+ɹ zf>c:9;? ct=0kJT1ͰeݺBi-,ӓJ cƈvΜ+F6yŖmx̹{o]S; <<ؘ *Rg[)S&ضlFPZ/ a+OH1|unoR IDATTRY_wR/Ýj`8 Jfu&b~o-]ńtڣ ӶSDјz4F5-uKAD-PTL@;BYBa)YslbȡdlNNY>bvtvMdj (\NOY45-do`>PQ]Iu>EuJ!vWvI֢:H)EhX%f h-}X[Eq]2.JјWHFSB@Z|ϲy 6` ~!dt?Yʬ/6$O<ճ to  ]Yvnw N|$V&0CNI,6Ã]FcxH 9!Zf2H>3a%SOljlWт1 kb*K[c|c+ tas&".xDe8 OBD!g))N'<|n Fq`O@l| u.@ V>R AYiJ3\V,MY1W#MEGsjsʢa]k~ 2QXk߭׿ʍk٦*1Zx!{?+~WwUZʲ=ζPɱ%\4F)!X̋/ɔQ\z׿Ә`4_sD+0Ѻ%q.%?}f CJe [[s;S;qIZ=:5W?b̓Wȁҝb,v΍|0_xl USR)wI4?K!!$DyR P?#X> r|6g{k|~7yerW2í-ſk~+_e?ᥗɛoK)+oqywgloX̧շ'+K_%#n?w*jxp4+6BAI, _9[e:Cu۷.p)՘QՈyW/_<8n_罻C9;#A;ws>sseGD'kr$_ڣ]c\]F>$ll 3Ona"Ids]u$uYEĤQRͫuk4Jj}[,"Gm@3a"*OzV3 T(Et[LY":7FEs$bhIEy\k([|eQ\RL9p]Ew~J梧|'C[>d)@}^]Wtgn{VA"$YV}݆` 6`gO~l?*q! t7= 8 X,?&h ¢Ƭev`T@C (-](Ѹ& 8(DJPnb ,'loR}^U?IQdz?ׄ?1vAk*D"10P , D4a>2m^ihi;kyx\R(LjofȠ*z gsf OQh-<9[Đ$9Ix%J H bRbVcbF6@aY0TDq %UesvvhEhBd4P.qv U\ (C=b8.MkN5.(Ţ#B zPq`'_w?g8H`.CkF~uY#@q>iqaEuhI K!#z~H]aiCC26@tO(=s}䅽=2ܢ*o/۾gB1ID'0EE .bJ,UWՉ`F4`@IQ)ߥ_*Dl€ϓ~IH![d;!Fh(@`<[F^1\H>М jM<; =7@5.iReV%h[1/t) Mk8<3h9=kiϼ|y_17̃Glo󅗮Q5pu/j>*#>{1Gg1qicFloy|Yф_I HK 9|C๛x|||Q3=S7?}_79w>x̕+{62{{L-taF%72hAbk_>PsV1*=-%~9lNmĈUax4mh$Su)؋1V9g45e YJ$WZ9dL~-(6^ B&ۚ*67nQmRO )23}yTp9hz;K!БKt-V*_b۠bJ8)Ѓ!T#A .2㋂rXJ|NV! #h&/h3bY9 јXż[ȍZ)x1g2G?6]s_Vm(g ^f[{9VJk \$rt̏UeJf'g,>:+=bg=yll3 JOiɩ:)#ٕ{TV7Of|XQGZO>A0dyCْ4sCFcN|Sʊמs׋?kPAQ݊h ZHJI!bLQ2IJJ{7"hQ W l1/4i@ռ$TD3]0g Aǎ-W?i$jj偤 ! y) a>j)0E(g*Ni. _٢N?HpK _z~/ ) \88x]9@Qr _淙7矻òkܼ䵷cx=§_E3zQ[>i~%\cTD{欩,hS/l1mnݸkosٲLώyokrwxڢszrNI_Ӆ팲0<cÊ7x}q#>3hN`]6V(i܋W(h˻S JJٌދANA("7̣e T hd=%%=`"k8 Ꙡ %[!QkltBm(ZNʥXHPOJK :b$mRnmUl;>"Nsd@~ESx|sNҮoM2%եpH ]IplhQ"$G,F wQJܲffĶ%Yw5PbJR&)E!h6_2HYYkRmAIżAc#*-t=9TNkI)@V0F3f{Gyz[\3M Qnl6$]~tRųH!&(ODJ.@4B!߰+4R hcV kM/TBWGo%-)TY~W[.^)=*_;zĬ N8:<㥗.Q [.+eXp/|:^ |/gt΍nK.&zm(8<;=^>[gS/g#\;gTbbw{x4d6D3"$*#~yCDFqd! Q='TZqqQ|9<>ZB!(9uh 6%xU+1Li6'Ȋ@>E \@bo$Kk|VJĔV}RtD:b"He 2i=I" b8fKsvN;98{_|QUI ŠcR$gDɊq$iQC޷ΒG%TA0RToX-್Q&@U)#tM]"Դ'HY!4(#b4DL叔5Y)6L1?>[}&syE$Tբ#=ז#FSTh`85-:}:t}` 6`gᛷeͤHv6;+XӐ)\?i5K>]^eUX R$6-F)Tr j4== Q !& k )*w|@AT҂>iesQ̛ҵH -}MLd$)4&\N5߻נ:B4`2M3$E"')$A1*R2|umָOw14C2>ۼ<1.pД!l=9=>5s߻;+L&R(cFӞ0zZXp1C s(Et>»BRIW.6Z ]AD#EErdԷ%:i3Vb<Ž *RېRd8R%AN8 bD7 <|]xw>zGC<~rq-Y kƐe`j< igsX XhEo 6` 6x6!UK$ƚG*cW7~ln_ 27Uy) qBċv7?.Oj$e-D#ԾE.Ǥ&DBj#HcX”8e`vZF)A`mg{ m E"Q{Ph5St6-3u w1RdQBS/he G{ߧ^>̩ Gc,'䜮u{ZU m"_@@ "c"C!tA?5*JV"&剺1&璥Q6]mSj_#DrE[4SׯRm<:"I%2ݩU3t;{;>ck!b)F$<.( h*{gރ2l 9~L}|ċG)qN$EHLgxf&+i16~Ze"'tӜS3z)L(.KDe0qgr@Nqc72fs5!>0>L=r%G|* SD%k};N&i1% a:%4![RcDbY?:EЅeh|2eq>sL IDAT T$%Y.IH#$jc` 6`gEbY^7x'0xu3SRWC"]L 3 [r#ΏOq$](9V ~A2 q#>D|Qk(GhZ404d--B @-HEPLK @f^gQMOz6!߫11-P?cmD~!H jE|ox$!"Sd۠yDl)J J(S|hJL-ƖhcDIr4g1w@vkۻL `M&QiQvYDhKOޡAՠT(YGthZ)fM")V!.d uc(uY`"gIJ Qp>$iBRgu T$[V@)f}uz+9)3TY!{,7ɓadx91(y[kk!}ZXBӞMY6ZV" a鉠nBZ bj@s"@pJ1eVti1g_8 )Y"7 ]=(LɄiOK[hdb[R" Zı|Z'0ZHU/[0>!L: vn[??f᳽8_4:ҧi񷼶qY ӓDuCp8D ZŤ@VPj׍.*` 6`O6$Orb̗5?&Ke8aO>k!Lǧ(fJ [!>OS<8GxyP Kz LOH'p%|gybCOw"sϙ >BBR"8Z*< cʂrphI`s:"Z$s&v?/Oɤ[ҠGe&x>& u<-0Ԃ3Bk>\ "tYlS[a< %"R*UNĹZTpFCLP"%a6 !4)Yb4-R  sF$!!ZAc]#e,,Fus-IUbCqdzJPUI9&g!1ŜfwOPGO 2BEWb i]邳Ӧ@#|)J֌"g/CAb$Ѕ!JZ ̤jk b2%`޺e wP!Rm8sϾ:Krz7UW5@@aaEHًbe{N&t*w$P. ,QF3;9err/:5j?#汔2F l 6$O ?YƓuog6|4E҈bP()Nylʍnq)Ug'HUG@OX=qbLkJBν&gherSJXC2XH. i" Z#9v#7&`(<~*J?KGi3[d;ʎ  XNv,#dPY#T5_}-JD)fk rH J#ڠTbJ4JT-Pm1aJnTbh,̻xYI) O[2*FwdBYǞM[P*7ё8^@D+YeHths_]0mXk>jζ2N10eY^sSBGF>ш&HVrwt{y 7Y[dK>0l,t<5\A1Գ hDa Z竬JD5Wp B= +(rW!)JY"QA j4F%@)mnd!xbGHš5$6H@& H&&tUE@"qj<\#=Je1i$hSs{Rar~ BsјvX}:G''C GK/ >Z1JZȤ+VD1=z>P ]%|wP*bLNhf9x;R_te"`ll ~KH]Q'Je;@S2vX˼5 oі*w! s$*6-b{o\XK Qcm״ĺ͡z1c8K|V9A?q/ k%{IT{1j"LgqL"=Ɣ>{VHA%&vcW!=ʓWQ*+B@nRtFm0!4!R(h;%la9L4$Ph[Bi*S gh)1z~'JXQ(!`cǓ=jyHs!ƈ֖xxm[gۉh()!$rVùc4uݑ!(VY_RDc2  RJ~Rg|$RsyA Y,}]#h4 T}MBrRJbvrėu1jJpC\@b$ x,gMح!f0b@s#x<* !ń_oWK),Re oB TV]]-!9ݷ>=ᐽ=&١kvo! Q  9nж@ /_"Z )ҭԇGGLjGoիVjMe4'SBpDٚvez +EX$YAZ`66i'rXh ),U:}B~~ 6` 6 YOb=i{1O6q?C?g8p!LkX80AEԅPBz? {n\nzZϧY>f~Q#!s5;r  *lI]pS$1&T : IБB=t Hw-C|y?l'T2v+8:ԜxЖ6$un8҅EEIm$t$CJ"ǎI(L(  Xks jMW1$ cXcQƀV$[WJRl4MCJ)Tw"JhRUUWe|iQUV()[2#C:'2 V_`lXs9H" x aUaT-w!bDOb$<1c>Qkw>!в*+-1RN0DN؅_&(rl8|^(RH,MB&S~ZS>DHDǸz|W~xS0oZfP?6bך-SiClDǧ\nFdd[NK"e-v1#)ar=n8:9atjPƈǸI(hn@4jh2N&)wv`w(mptҋٜ1o۷)CTL'}5FW%RЬ@/ !,B>[Dk\]\R%N^Ot`[>A{ll dž '~qxo?k8yP 6!* RF_erp$AОϹ÷˷)D=cPiĜC&Jz"ָYT=(Qڀ,\@4߾ÍȄp-JnEQ ÊY.󥟨T u[ZVr?b}RH"Fk K/+<>÷rDĔ@"$cI)]K 'ƀKyH2= 2teu2܈@aKLODC"ǐ̞%68}S+3Dłf:9OКscF!j8锨5zgk-n&~cleF׈5NGtaIEF D3Rvw?=G# "j`@G[#ԓ y(K$HZ)G/hm+4?>/[0}wbCTruʤ\ }vaaKX L"#D+*[ =A1UJ(` 6` ~Zؐ@??-=?|O oD|g0WOi)Iɜӄ)[]1:Bi4qRZU]LXiB.BC&ܥQ\N)%Іr<lqDr-Y4Vph,ECj#҆lJh0D:AOYf[ieYN^ $zV0Uh1W>_>có))g i\KL>WWLVvZ\ߩ)[!<咤ZSb2Ӆ$kf[|%kj<ͪLTuc B75O(|BzO^jVL^{}wG'\v%dt\ܬUBg1%k( ϓjˊst*<zPib9Ar|: I։!LnZ-K-Ņ.BFHgs\H8gOPBG,v)Fcƣ-2[k G#2 1dAZ:{fߞ:?&pѦta0#\5ŷ-|[ ֠ƘXZRYd+p@qRo`T7`f89{Kp$x~{X8<75NiںA !{W/ۆXb6Hm7iC#B(B |)ΒDj^k$tAنz8dllSÆ [V¤fco\q& sNN'9k}DyUqu뚢pՖzInH۶$fϒ\,v@RDǣxሙ#Q~`;<֌5( I"!X{orZ3l~8'v7JE>{QnUV;pxԤv$ E G-c>Ae/o:SB8pÚdÆ F%!cVQ!3|cQ  GG{4 / ǰNo&}:\PH|p $EfO@.e:: +r??=ㆅ'BJ2THpqd-IĐe zA)%ǂ&Y"-_[_3xg:bSH"),g9>'@UtID @M=Bt\~ BZVK eYmQm[;'4DOg(+[OGCZ ާiH(U[1MA 7住MJZ9{"3 Z(`%xGHo{A*Pт!PLw=JEQPJ1-}Je042::cⅴčT5tw!ʂb4->J*8損Q ]DF+RިII'c 4pH+wtJ6\8 `_{=q6Y-J+E GBN !1{skY,@ϔ簋SՉH h{tqHKTvPXlcr5+J"MklUj[c5Xc5 I/ιzb_?M>a9qFW8ZjVo v El]xP~Ft։OHWpB[fduϐfזK\L2$r,x.hv(dA4A{K,YQBU}Ǩn0S!0v4cޓH=lH2ll֧<o@-"i㩚 {l FL <o<+WO?_g<8n@ WKe*5$kTx*^kU Sk!:/QIBC]EId!2) U([d): YV3>DRK(h%KvCH4Iwֵf2G1\Ɖj}*D/z޻D4xs.K|vrX}ۘcYsT=Ie^xSc JpHahL v._`T-DR%.m%wymO{ .f G#ZrZ fb,UKV9BB8@; [Zh_LowShu!/RN1*H⤅0*)J R('i046"t3_x!f5yL6m' 77!2YeH㤥qXe:}]r(a*t&X$I<ᖙ@-6B sGS6YBTQy 6n޺הn<#CRk$vX}˛!P=gI]D u?kI:D%@UӍ{zɧDhC͑Y,;3KOh_Y|KHvB Cj AxBl;t6`~pH5ư\k| IKX\A+89β>>-x#UgQ56Py g={\8=tv__}?/oVHН'rDh *qȤ >uR's}ܘ:U{[qo$L$HM^WI:=EY5b>bMTɭ;tH J+"hxJgZc5XcXX@_u8}uƵdPEA>qLyt.Y#75Eg-]p\m6!4s4ֱwx:D8i5^p%RHᴲzO|q)2&Zg[h: IDAT ^tYE{L $8* i-~ѠCdg Jj_r\Kt8&ՐHD6Eǻ<? 7(ipW@u4hgn*ЂOܿ Wvt̙3;8]͗/_,i in S-*uk !Tdy,Cd)]%#$+"<+ܘl+&1!{)'5*[.$11$ۛ1v2;,#K DO{̳B=A $<LI23vM6h/jq- /Dhxĉ=ͥBgnj&\`80/h&I!;#.W9#Voh1[ɭ[c5Xc5I/dgDJcYmyy+3+>^&zx-o(_1=DyXhL'._c(%w`-UU{)$fuTрQ.`>ތko`;GE, N̨# A41Q\a8{vӧ*~MWh|+yGD:#o"ާU òGZx<#W>t-f`s_}(=q&?k)_V ιq}^ΤjNTQSqxt`ׯ?oqdQ*G" cFT1Ct"oZqbyK|D(3RI5ݭ.s511 ]XsEh]uzK !Zg:M9D*NZ|X@`=ł,;JʉT`EEQ0Q̔or{ Yshz#r|K.{y{v0\=慒/ ( 1َnm8] $l_i2u:eM4uxG$Px!!k%ScwKꭖ.$J@2YIAǼ,RqCS78!}DHIiV=v46DwZKְ5Xc5X,h܃_Çt|*H@D޸b\g4BRTOYp+/p:wSm9[Yε)lTk=7:W_@1(MDYBڠwj)*Ȳ>ޔ`uíM;4uVᚚ񌰱3C?20Oڍ Ί?o=mpbb A :+CH\(X,<}$]{;^'}ʤXRizEzC$Qm+',(*~Tgj%3V"'A 6VAǚ|J;!f{BJu*dqB$RH6Xb;FeFOX\Zzd2hd4 i(hl6cXMQrcu( FWz5Ώ_qY.m0R >82Տ]A y3ڦa6< R`ddX8ۀカ7^dCWx3j*kTh_ \QC=%*1H\<]qA8l] #0y=a2@g,KJ*hp.9"PxD$T*ڞ<و -2 !NpҒݍh+H9Aъ .xs8/0E8Q*-^+4HyB q)hr%k֒`JEGK"%OnBd@z6tY$abQ6)$!~f%RfB2cޓ' H?S$9l`-!3N>E/x5Xc5cM} 4kXܭDR-E> GlƧxDi`>]JRVI <<7g~`QUL5 )~rp' K>8j>ac2h87!X-^oor|OoB12yh<xdek> 6-pH& &>drQEƩӧ5u<8/rÒ(u^4\z~2gn^C|kj$1怬:*&{9CcP2C6s.Hpɭh0uC4}5L y3s?%ךesYsaT:dJ&`BgRSp`ZQ9U]'uI@@?X.W5s+kY"ٽBRlIQ:pΞ+lv{tbXhQYY,'$L+qbلmĆ2]&Hh%V}'R}w2_mI)G.lDҘbEKHFx #%Iv*c/^FhmkNׇ:_Ik"5{)"A4mI*$kk<+X@_B<-H;S_K uUaloBs Ͽ|{Mp_1MhL,˗+ ޱ!ѤY[XntsW 9uq^/'Κ-7Q!wݿ|h8)!GhX@~zDvv) f DŽ ˡ7x036 >mr`6h@/w$di{%l)$?t32bB}l˂(!2Cɂ?w8385()Gԓ9a߿w^65>sь>~Cf4 $"i#"mW޴*;Ley>:uјJ@cf Co{mk,_`),TK|$`h#@1R>{(%NH/7\c<|q`,%;2ٽ E)&p4H$HV9RHeGc̼n,5nbMcpٶK>9mu .Ɏ*RYpg,^ nmۯWoW`qpb:K cm*Ĉs3ϕ0Ն̨!,IbW$svR!LQKIV,[{ZR&V]{1+fL)hK础kB>Y|7ٲ]9|:"! quqXc5Xcgk跌 “ꏎZ׼s"%[ؿ 2z%Jlψ6 @Iʝ>o~^H(ׯa]͟|'Lʟnhj q`JO3ϟ[.]@c_"8Lq6wnj0p|G0x_+Uuh0c>}G  ?30͌ Nl#zz)Oi _n8 ! ɦ7߯8p>pn|zF)0 Fs6F\({<yo^?w|xUdR'⧵MnDq'ylwV'GSik!Z`iT&}x׾\ /d7 l W0\zw.w1U DoUDA!EIcM5g-[ \8cۤj܀lfOS|gAiZ9Umʃ񬢧=)kFBf5e>bVn?LkNohҠ\`4͍3;\ o|Fskwǎcf<06HYAB.i: 8x e 3 >xʺ_|,Jv)2@uX].zU)'b`r`Pu|0>r<2ss4,8O<`h$g' ;/k<'+x%EV +e+^I5Sf) C(8ߣ yާ{J05Ӧk. ;m 0Bʥo_pu1stȧg,km8",!]J&*ѩUDj &LV,@\pt c)JMӐ9ywd"gB//O$HDGh溓*tf9;£%!I˼\ (9DȃJ\I!@RNW:IIiBSd\kHA!DŔIYzrIH!b )8Z WO! JF%th#1\nzc ֹxwUs>{zh?V kkL`My-`jWgaI5?l/oƩc cCxq9ҋ4)G414) ^AT@h Na|4I%#C&5&W^gCkMH[ OW<)i܆? R l2׈P F@J6' Abxd6̆b'P U]66?DYY͎:*sUh8,8n2t<ф!;v>5䡤3AfG1/mɄqw<2qޡʜ*L0t9<į a{݊N"S*`UuJO*Dd"ZXj3:4>D 6 +J9Fi}8R'bG3LQfB,9Ѻ}R#'D@U,h!bj)fE:0.^ R"J&ApG$o!XcpTP9@5-UR=&ܓM-&Xc5X{ӈ_gy׮ ~;ck.X?ofV샀"-\>K^!! eӻt,yT*x% D)M,[|cSϭ0W78s4y/C+Xj,txn|to`4ؤvɔyk`]d9Ēa\s3u\@ƈּ\{E~/G]OӘgYEhf46ZB|p8IE7&2xEqѓ"ccVyl\35損l\l_[A%3'On13LgHcNR58|Y>8!Ba* 5*ˠsn"I$UWUQEZ ΍ yU 9㪦TԍEfDƼ1*˘Oym}lq)bs4ui,eYlyC7l ڍ../=MO vѭOC_qf{S/?0ܻ? oGν;H.esgOYh΀h)sA[C~gVUg#Ib#]+{ ֙2i}8 A&b{JDI8 aV4)A+a$ҊYsmwhq":K VC}C3?[(%8}go}jpKd1GS9jTӣ!g=2,ă:%SrRpɐظ \gZ=_ENGȤ$2'[Bf04MIO6_{ IDATp)sGFgwn/-d Z'R)rj-Oum"K!"HRDAR)EO+Ff#kMOk$QYSHLm~.R17BM;@PHEUBvAFJ !!qR#toV3mxtߧjI620Oױ5Xc5xf&ZĺyLx|we9Ӛ(A׹pL:g5Uc QW^ 28X, J͵53q<*8&#({cdO#UhXf<o} ϝh {\q?#5zZ|l?*q1q 6X3扅X\R~TE%;0(1| |@ +dq!rd$MXNSP Q:G 2*!q`fZBOkϾI9 J739f>1l_ڡ5F%GQـS 9sf o/νCmhgnOv8y dYFڢ VRR5= 2 [퀖`ƙ@o8`iǫk *\Euo1sm3y樤sLcsyI-4&5Af[Jkkƚz!>n.eq*v6܀@gfx1<y}>|Ho4m\84aƞ \(wXxJm峜;sg(76| pBb2slٱ$K.bO䉫S%|S<({%բb:t6!˲dav rN` R*2H*%!TZ,zf"**OۜZLu黌v\Ir>0a}@@)Yi'y'uQt*@⤀HMG2*&8ZdZ>/^y,XT%xcc\)/VBxZ;X T+fRkk<X@%<5 DXqEI2IJtwl1d6׿!45wn7i={/xfoJ9*WfW期P,kcR #dsk׾6%?vql+^- )*.^wq.g Ӕ`3?ާW…@5[p=f (˜{x6fz`mO R`D>*ml֓&Hj/0! ܸQ#A+GsxUvN}Dxou!JF+I);!(m0scC Oc f&U`f=2rs[}N 2z%'je8FYP.0Mxt8n߼͂= =UƈuG||>Zv6cfw1"A:'T@HC /h4R#iƉ\ I $N/q\.Q!P #6/ (JMpsBpxgY9].ˌùp6ܹKcwn_Cdn,Bj \&qԊE-4s0KmG=CF?GoM޼֎KW0eɱ昣*1x4D@ P ggsX{7v{%Nmֆ}(E+%jY5}=G2G u]4 hK33X6 J(#qmËDO׬ Ħjv_R+C,L'@%^?tocUP{ /#!' 8BbCf$ B +Gb{ 7՚"C>NV:_E6. ][aVA)ٷeI@zt$Mðb צk$o 'f"`"(Ƶ3x|8wn>_k/H_gq8u'4_2}x&5;~o6?<{1Gw~r4f>g{d<=⥋L')^x"?/oX4` >\9z:;䭷||[ɽ,PBј`]KƣbΨëJ:K%d!"Gg[_{k}۵hiչd>e^Pj2\~a_Ҍ*fX&&noث%s##Ϡ`k/&<}ќ3G((eo|}Io%K"DB2G-2uTHAp&Գ9^I8(D@Er0.P5Z%/rkcT(E,q>QD1 Hp B]sG$չk)2dbO Z pB`KzL\Mkψ9q6 k(K^׆IJ6xZVM")ӊ20-9NeF9k *'&V2u5Xc5I1N^7w?%\.gOǐϲ/g&C^tǗE#í`{&d:&y7^|+'%X5_}z,3r5^H1eҋo7]gz2JgUS` GGc;; >}fuMc~,(L+!>p߸' ?ݩ16H pdh7C[g~$3ƥH^nZ4Ȁm`f0 ~1nm1d@f7wXkqU&)=\U7~-T]ackr{ʃl{5o?)suٞݵ"Z'jsxf̵3)!@Q97d7-J3(|`PlRL&X,11u LH6mɝ8xŶLe@W51H@1X+iZO%ɄQ.981u9IYIí7>MYٸU~O"D}`m/UT-53۵?sdV%y12ZCV-@(R˚x.!HDDI]PU5#gg3*(1UUR}᭣q| B#m>,9'%)@y10k1`{ڕsTR1ș^" Iyu!13{9!R|ʏES;*uV.b| 12U[ ( !|R @kEaLnË蠓r +Ia*[)VXaVXs )ࣔ>i+?X$+]5n5G!-U?ul4^?>ͧwo/RUV# .PF5k;hѡUjDeJ_g芢QR"J9Hrƃeװ1JZ TCI&D Ӓs)c'h7g:Yc11S 6Gu7~ ŅG[_O~Q/.z`/) c2Yئ,ѷ(Q3 FeS8#5/zwݓ#tSyP4j `EfY© Z1g4DO?0]3~.6ۛ][>Y@\PPQKżeIIIQt]d2j )yFňj6jG%1k12~.:'袠g'B>(ku쨒w|g~f*02m2dRFrWRPxo9F|ffL!xU=OqoNk4gV6x9IB ӕZ#|-1ў`0>WeHt#ϕC]v#5윘d_\n^:g9'h&Wܩ财i4UUaH$zURJ\taG>*:Ks\@:>KR?e2#LLY:^HHJ G'VVHmĈ=&"',4!G@K&iR%C3aYQ@Li큨a!KsB-e#LTp2mN<]VXaVXˎ c75$i_{i6c;#u/2HB?<_OR|"vx ^-61Yd(T]HyR=14$ށ"#2CXNEBZBJ5܌yO!FF%voh{/1XKQ|l2u#} 5 JzDUoٞ-ۛԣutyApYRSqN8hא㊈bHNg4ʚMh m#~AÆw4#泎ӆ; j4(SO{D1p BɄ2Y___Aã)&8䌎W_).o2VY!3fB[Bbb@xҲ1?=4;[1>s~9@V#$8OߴY!hdM_)^CYJNq֣`JnNyc6⸗4-DO="ZBF )5JP9nQim˯fY]v>p~ܖAiH)E1QLVc(K閡;$Jk ^2{TI)PP5F;)EYZф(;o<&#Džu-.@˿.fC,_q3LuI-Q1fR.в PHEJ ft114r'oR(i=BxGD-JK!$EpD)3 e*B;XP/X–7("VXaVXዅ bR*)P<=\"YU  D"U)_|zK#TD8_V.@=\g8 uʧҚ,(2@ETimx~/sbDlNGL&b xkzO =C#"8(j ؈RHO' 2-##dJ |RfU&#QB-jh%v>"ċr#HMDJP1 s@`׳Ld)ΦDP)*kۥRB{AQ8y6O,2y8I0R +—+gzιOCx# mV6g q;-E5}Ns0YLTËnC渜I2Y@()R]k[B/ZI.oLgEHS^}m:sFk|y m4,G"R*:kiـA&=Ǔ&J El 7)lY R}ej>fiy! qi[:2`Yc|Z&OrS=L ďBPY!IAH:੔˜:)!!@ IDATA(qvt>h'5Jd˜&{)%B)DԡT^\$2 D*$1 + _ HC%՚s-T$Gr3<}h"W'78<9;^pmpft"DK0 @GZ@QMO/"B8X[ZLSFat{K/LYږ!>Goӽ]fԄ4V)i]y Vp. !w=טl.x~,y\4@;u4ppRLꊽ~}7b|g12[fQ#b˲, zD" qԱֹFc@#}DF#H8!:p[}Wif>'>RTJHPKO]F+,.z1Bsc#`*5.vNvH= JS|d6opޣAHCig{n]P5E ?;3֬ ͜x{ Z1*$_omrnܹۧsSYk=xt^{A#}|Clz|D\{hF"+d$I!FrNs.ib!8G ;WJbrHol,sRZQ(,30J&;XY"$(Uʀ[ڎ.|2xb{͛\|{wzo}*T #}"H | 5ZsW*6\=!2|7]>8$;|wTu|p3>ŭ?vq{oGZD-% S'ώ1ь}y1N9bfE,JC3>L o ]5;fj굔sR+[F˓¯OxNN0 {F'OJZis#~יb̾*{@npJbDĔ6 R*8q=bι go۶, TV i%Q2RhB.Fopm CC9 G(<.٘ؼ͢o99TBpekt4%XI8 ~ߺ֑Q0;;lR(zEe;N?^c%]5$╪dENӜ0vEsw{g̻u/@,l1-# .Z8ok7ȆR}kP,ɐk1F1m*FŔvx|:6O[;$e >vQJQU%OPB=2h>eԄt}`(-U)^P 4q\j 1+DV0XDz*CA^9WŊbĆd;!%r(u DDxK1b2I0B.3LU|9!{4u,>ZQϏx>VXaVXa/V$/?ϓn?"O[+> \ J9>:5?s}X"9TziOeB"fK}؅ݟf?mtܻ{na焧mG*P<8ePRXdE@qHU{%a 0FR}G=da^+Ƶ>vzb<_o?;}@=A*ygZƻln(51*|-rߴ7_ܠ#K^9FoЄR11##"4=M;r` \Մdž}A{!JF%^x iJ+Oi~y nTơ©{”(c֦*e:0zb4Ѵ hJYH5ŸF:lG,cO[[?Q W7Ţõ @S,sL!D[k/buI3k0 u)jmg<|zYT1!@"!Ln 7xbQX}`8kY=[kZ\oig]2j1&Z(U"׿X čG ATdGܦF(4ZUUM!}Oh)W5U5փgm[.-U&JJh!}ނNJ *oORˆN$fs]3ؙ"&R{$ H$P*@I4a!Hj J޸L y LבBmy]$K uEX=1g b@& (]G/}&+uDT4{9rJ_/5iVXaLX@_2xoR _amT4'|̛9=eO<?D'cM䭟'ȕ1\t +uT3 iZ]7 O!'@S̥QC)H36Aq(xzmɭ?F1 R@Qs_巷]nBᤡy_ޯ˿[Tej d̍3|4`'芡>fRyp=: ,VD>rI>XQq`- AJNhJ>4hqa#Jsv)\FJ3-SS8<:laF}RڕuIfvoF3_K.Z)[NANꍫغz#83 p`Ns 2e8RQnPR|)1F'yؙ@*(rN 2U@ЅA4EUR(ri/Ƀڕ]vF5E{Gg4L7p&M85J)ʺbm2.KmH!1Y얙}5zx,3lrD1ejHĘ/ɲTsCo20 1(j5sbi 2-&BEJfZ@G`SSFt!}(9'HISIa%} !MXsn6BD?nƁ5m.s,e+ ++sOa)Ņ"]oE;N"r[,n7- W7 >x_{OWϷiQ?Huv<ŗDK ldT3_8D;`xaoV;rc wm7y)[[] ΣEfkkxH:fO_>կPZy):*O |_Bzl!i~ $#{=*k{!3 Wɏ 1\@:FőH3hNboq $OjT<|A)$l"\s#D*?)RjHZE Dyz!KR4p![RkF: y{6 c4e) EKvq5c>!显C ݂oʥĔ#6Shws5[O]§ v0a鋄rm>%4< I!5w=eY'EjMqӇIk-5]##rJsI~d>޿GFivYg˥3~1wt&T LQNQUղ ` ycWs0<Z/*Kʢ@k̭@`:JRtFp=hD5 x$6$NA !SP^$kUz BZc&Zc,Ո׿c!&\F.:6Y!%9k}e.m;)!' R5^l̺ãwqϺGȊeυ`ߟzIfAERwBk =E!h{BtlnwR%&{6&U2LhRsVJ~}n=\I-UYEX#2Rt @$%22Dƹr 1"+j"Qʜ! $U"i։%֒M묯/K@3\ cMpB(TK_}ֈ9=hdxg-2 ]TVV0z9`vf{=5ш8=1/$EQcDM.swpߤ 3{pyӻ#?ڋ1! n8%^<= \ި Cl2ogH" >;}ąHgW0X Ƴe-!RT!bGDc}g黎;8ѹՄ#e>s#$xOQNJ4(-Kq#'B&.>\ bX*4H$輎5,)N=qZtL?/e7k`cF"|@n-Ph!SA)H52$wqm<*g!ʳwBÐDL GrnP̶8BZ?C'lVXaVX 9?v@/Z m!O_{/|KyۼO !: 216w߼#\zU EI5W/ ._~w~1o~w_2o'&ٿl]JLQtWn̎=|fv[Xu9RPJI2"YT0sL@Yې6O޶4IaÀ"Z/2 Zh9F+ 똲f6;mZ6!9}dI%!&TI̕Q|p硸~ ӳ7'Z() 0Ug3[|p 896!%bG/gڇeZsA!$D"r S*a?XF2UÇ>̜% ߴsfGGE+3E<yocIU#G)M:f8P4Ex<, ) xKb(9[RSw^?hObCf9Pqvy#"i(:d%s>3.:b 9sIvQs<$dT-b:m !(ʒhB]! .[:SXt-LQ $*L$MWyuhPe{!u%|DE,rHʅlq§pOgLP6,*8C< .@xD]jsN)bR"FJJ!0"Y*%P8;RP$1; iR*};1dKMI?94{Xg ):IGO!!>B + HO5vF~Ud_?w1|ktHu.-NNڼ:!:!%n(OLy)DRs73\vi(ŨYOPH$H,77Uh<y9!M{VI~Ɗ,98$^eK(s2C b?2F7Lu& ܼwYo!jDp8o9=9kFh1xO$}{HU@c-h)pm;;;̱%JLv'"ZLQ"}DCDk;AE8KHD&4J%rHlm['ۈw$"]K/850qX["Z\cNЗӮ@+F>Kijo3Z"IMRb-шd!P7sg,=d1MڄgwW[O>[xNgخADr8xnrU9#1b (!Y|_vO1>B\yÓD*T`ٔ S!$UQ}Oo-Ne-6&bECBdA4Nʼ pbYrk*c| >eo"tJL~Dibsr=*̡2~eNPi[@HTb&rm|Eb&ĈTX! P!M̄&%bpZF6ԣJ¼ mȹaՠ! I)2n EL bdQ8dh?g?\aVXa>X@ >|{#Y9frrA0 7o~IC0Zrz|?8EJOS̨ !Z8sBvL7?|CXF@ko"\!&*lx'?d#9{==hi{ DJ' qѱukUh!|{o*&S}BbQb3B`9e \HhZgy~ȯ>FGr4>}nQp"iL"2Z6 >a->йFϹZ2 GDc.PJ#FbC$8IQt' IDATS5yvO u,Nr58ؐxI)0.>h=*Q^ F"gH%IdT9% gITk"725#qBQ(S6i-! f8#<%LB]0g-}J)֧SX8v17t?3Fn|=nj<(3?9V}^<;$) T#bA<, PiI%UQ0҂K|EI%k II" "km2OJIĸK.ld۫FI %( FR{hӶSY7hmYU2k>g(A[HOy_aVXa~qX@s@Dx23>Zwjp}X.Ni^/v55aHe9cmñ4Z_:D&G쓖bHfxwha))x.!6q3$GL&\})ַ"]orvԵ v6wBq3LO%YGv6,efE`Tpg5B1e&$+7H6 J'Y<>6Y5 .# S|nE½3d H/l*){ҲιVZ<RQI]cJCݶlgw΢u;clBp#uO$s$V&BWlW 9amMUHmPVkPO j0% ɆZe6dr[.dd'gaQ@h2 d &8tYb=Xoo1y%Ί*Pn#Ƥ@zTw3u4]wڤJh<q,nGMV--8-G&z)w- X󒗋) F1 (ߣLjH]*6z1;k%}V(Ub")s@IJ-۫B̍\8 f(ER AjX !Y\t=8TPeE'w(+_9RJmuڰ6cBص4Mx'][2_ϓB,ۿM\/03o2aO>UڝG$,簔.gb)v',-[3Js³a |4ACHyB1&L0!(B\ },JHi%BqBizO.F CO^!>F 9'oVXaVX዁ cYZzoW;<3q'G39fmRK;<?npSF+{gI;KfvЍF ZH%gFCLa~'B1[35Dխ%ᜬH"Ԛn7nU̬|wyZA/haas{w;o­~e? /|&kxxsT#K۴tטlWh8~gcoo⯿DD1?b}cū|-&:F>bҢ+7x-NaAdOfr䓡oX@3_v]`uJbkVAQ@p.cE]]d5-)5D=6 DFS7 1m{w[x h%㱥rp|.҄hLs\o1% QbjG$coPiɭ?~rGpN&G(}85,< vlF{V-jGahP!;ow_*ڃ'w5(%t ` KӴy&bSj;W 3}<:P5[;%n>?y߻dι(nʵ: Q cN:p-w@N'byƟ!bz}!/=| Āo, 6^4MR/j|x/pm3# G4р6 m9/[kړ?$]ARWH zR۲$e U Rҿciѽ$ JDү1.8'UZA W)Ұ3"ptXv ,-(bNu`(LR|:FLsdɞ?s^l|2lHk=9'@ί4${2'JS nb\^C9|kij^~q4_a5P9[$fH>z@QyAme`v~e폰_osULX}ay?6l/wiy oivs7R݄nPή╗x=?-q^m~rUIjOyP ۑχV*uR>D J+,Q9J́ B풦R/~yܸ>(ɔ=ˆXFUE[=Ʊp5Jû" aCCcJSXxnx992vya [N*2x|:bLs_')GD0Z_8wz5PO&.9d11QBh;hDlaA D2, \rty&  /Z)B`9d<>|};Y)LW´;x _I&eqȞ =^U]K1BQd dʕdZm5)ibOQK (RS7"Xݠ!DD*&v[S 1 >U wX`$@Ȋ0Αq?~E 6` 6ņ$~멁̢P1Ίွנ>s(pp˰ԋ>e՛}TaӼ5! I8k*vS\Py60Yl*<3q ]H^]z˿yd+g/3XҶqC$"J<#{%7qstVݢI=j*(KCN >G+@aXFNt9՜-;NNsB8w"E^p>eG+\5sev*ʠfT=]Ppy=֜>l!ZKGt/rt& <-.]@!0܈343lВsTDu.z$L3.ᬦYl_1|٣m=ԺHvhb #jIu4m"rbԝ1->bʭK[x4vo[tѳli"yzs!!ɲgX] {l_RK(BT5,,/{"շ "zD6&P ~W0Di}GZ@YIJQahw"0 1R/֭lv+5E@ر{'C6` 6`pؐ@ ί\{ތ$#Wrt?~aԾBնWDUPdvCHI {+T`-jJua5O1£c7deЅ.CmZ*)lF)5\9.?GTj1zUXd {p>/<|m#f'K4&A${Q \2Fpsޭ !prrB4I b+Gf"9-|KA"K4( NS褈ѣР cPDD"J? yv!QUǓeBjsb/WʚD2{)mU(1YG֤ʨU4Y~z`야O}N*?*"/\Tt;+5QξO ꯹!szr&QOㅃ/+Ru {*)i"8GbP CԶ..; (iK VV)M] +ɤEEZi}>N^ˍ6` 6`SOY-VJ?Dzb`':U>v ߲܇D[]f2.; ab FCͰN91(msV1Y8P3:(^rrIᣡÚi˥Bb3 jwDa{gvegk!FlQţuW\=`T]!AR?bT+ݔH|9Sqe!?m+ܫ&pJYsiBsQNcd-mx0]ԾC!Xx`y዗-[CKJ}[oOyXӴ;@YV]:xg.;p=1dIg|s8Q\ý{<.!W{m §ΝRF~e(Q 5 g}CZm A BYMu*7Q26vwhG tCqvrȕubpLY+H49+.]Te CEiC?ouɡQ:y|{Mdc쟣>v3]5lAb&(.kϙ:J!g<'3@ ")I%w,k2d!SIDV5 O EQ2|wgXeJCXYy-,S97` 6`{lH_ۏ?I8|s4-b`m4妒u+|FX.[m5 &L>Z b=(J!dKVD%ռ% ܽsRo}g =8a{gLQ\RRPd&%ra3Ohb{*9!:"[R=?!z n͹s$5|]q4Oa]gt uݱ"Mj\IK0)$X̌}a|qx~y4x "'pQT\et:gz6";$ B2PT`T/pk<{;L>M>lIΞsybˠ>eq61zHha _E (1ALJ#|%~^KHu;=^}óڗC"Q6|jl3C DCkEUUۆ8e}`&ifٴ4jLwJ5DEWzNmеi;E -I #%(Yc]|pP[uچZѸ1?;K# $b -arCʢ@ERy>ҫ!bdX116^ ìd}SXݿnD63zUPM`"URDBW %{a};\N$ǂOdo?6C-gNM}Ea0"*e-X.kB19hb4-s{IӒ(tY{}=?VzUOHmH 6` 6xf!~8 m+0!\'ޯFRg`0|v=?Z镑l51WW|ϓ S7Εg[* ARu܀e*jULlض߹}9[&Ux,[Gy̿Q=GKT) W$}Q> τ?52AV3蚆BRk(5, K _ bRuMea!d-@ pBT\Mh,/׹/Gc6UdZBqrrŸ~M'OC+xc#*8Yt̖5 "zbڶMV+&V `ydVsi}PFb 1X*`P8d~x ]μe*1EeARZE=;D"hІ]Yڟ +N IrI'5EiږV$Q)wF`ɄG#0qUdTHT81$[wu^1ɂ:hmZ=O~O$Pwv|bvToGj ! =FRHܒLHLV:8Ga F X=b~(hT?V( 1V8h8"Dn!6έ{ ĵ-?g%t~V1llWES4 .ҏg鉈TfWzg_T=Dhb"f-z[|̵-Dh#~|0Z(t1Ҷ-MA}M9~;EQ9nvhWꏋH;'|/iy;2">R&TddPqy W,'K7s!CyM79^&S~7aU$('A@ RD%Lay\B*F4 6l2}-B)$DPk;1pPh:YLG)E׵Y.D nJQ1q'GcMDG ]9͙p`ƜN8}>F >Ǟ2<lsן`b\ryk\qhƢmrDAmJv,&>ĔK:✅*$b/pMH%k'Fs^|]ɝFTE' *'2Z0,>no!"S#BP*ٌTc bW)ܙ mtX9[v#3(vv},!҇(yk"GD%uc ˊD^T>ǞF|<_[e|1|y IDATv~gs@a&+KU\)ڶ( M׬}ZE(  jecVbk-"Z~&ImcV9K)ύO _"kAgH}llW_F|nBsbDk;/UNIM?K~T>cTh-X<)cd>QɎR)5JiP"&z 4MKUUI2ֈ :@/IaQ|>OOpc0 yk ڦMʷkZam1R# cd!MHa0?YaeU\rpzzʋ/p0hSؚ0W?*Hdxr0\m1{y|=hJ;Gvkc"|IMTt FrK$xf-*wE"ݢdLys,fwyx/|W^~wƻ4A5Uf[yB==t|T.(/ӶVI=ySX5cPQ{nad%}p\°)P(W霧*51[BCX599">8ޣvWnܕ+9 2 fs5T4*xJ`3|AEӵƹej^) 1Mub5,)|GQI\olW8:;;GQe D5)9c{g  x>ʦ:ӳ9mQzDrzLa ZtQR '@b( i.je1ѹȸo6)0: P8)Cڎmѐjveƭ킩,[!ΰlU!fïtc#[6;,>W1& qRhA^!z:P R2c}+'\zm/+aE<"23 |xs!ҶM}L"n%؊/IxS2&*]EɊ`MwK*9B͹lIyELD2yaM|҂ĬPL k;EDT4MV5hbY1]KNfg,e1_wܢ1.Bm]Q%$>dݙ@Hz|ll iZ{Vj6L}׈OlGN>c[Fy:2}o4~ DiQ,9[Zs0lq3BI5>*!'ĎBiDS.4dHd%[{Ųe{R3*ig)P6*B۠!exȲnX'u0-W^^~ƥkc Ù!#щ)TU58@Zl6{'׮½:v}mMp vxFw5v9y|2ZȕrW}JX[vbj1qB5@g C& MRXcPJC@R- hkesE6;(Tn)%HlV꜕BG2!Ak<1O(C|&ԅ`Zݗ[]K%7aŐy԰F =vyC@U9^^IJ"XL$Y,TC/1(¢֪Uc`tՠ5f^;rV?q>)V֫׆RSR[yT:N=? (;.:mC/Xll!~0kѳsBi{s'F݉= EɽŜzXq&B8Rʰl[t)tmM-uԌ*mQ].5-%K_# #l](MndѓpsZH@HeGޓ $HkK*U8>Yp9~DV' TA)(՗TEAiE >.=/5>&Hʘ&' Wp׆2ƣrZz@E LlX=`<;q R=kpU:1tuDS◁XqE)rW Hs߹o-E9G۶Wd5ӓ40Tlm4X6g͒su퟽݇3c G(=Y6hc!,3"]H֜iY,b@Ϙfyۈ(ƣq"l\jFFGhe "A4k1Jcj4?;ܾ/^6_ͯ/}otzꇏ92U^?g&o6qrC"{3OPzUcRZt'X-'H ԪXAд mۢ(Mt~eך@JDy$+1/) V6>4QJmE9W*U>S,s. A+,Jr1A "CkZ3,uh"u0_(&![jdѴЫn^<}Cjg+lAY, DpyG`&cޖ˜UsX)D4JֈVDull )Ng׭'D TDlZ-'bP<}?{[3;TQ+]n1@.FU)H7\*шu-:jM`A x:9kTbC]^GxKΕlcAדJ48^x7N΃'x(&j@$Ml]´g]&#$XOdI=ކ4(Y]L*z`>[ᔷ?死'Tk+删?G\Y6<tw!́FrVI |D";DZ3uu \DA9 2 ok"#1BAí=כ+M~QZ],S`q:{i\ls}bϘm b]')0SN'g6KvZNiMlk:`{\`\?CI -h0cG3r%SH=gvQ,5ZH*00`nÃ]^r;E-/3NΖUg &啗;l<" j!@p)'ۣ4[b"kihl^xLYZDb '!5Ŝ?:R:L, +`WÓk+W6x u~$Q!VVJK$&Ɛb>ײ8&D\rb!q]gWemhO$ EӰC5hiuV$뺎j4b4u]8( h51:Y;I 0=΢OBg­'sM!*8)uNl<+ؐ@pqYh;o=?›"W hD F"(VB" 81MG ]wƒ BpeQQcrS&0"EW__ Z (J~"~]HoQa k/_ģX8V! ܷ4]T49_Atu!u7)T?~`}zg!M j4ƙ1e{83o4g-Uh &m1h65xrثʓr=eiDET訧-':5Fv!m|9ę%ֽk[9'0Ѣ:5:^1[jF<{[?;q\G%ɐxL׶Mg,stвCfgS6yϵJ)j:sNy|ܡ%FOi"*NOx}f%Zi'[Hj]ߙPwnU #3 Q >JC X&wҖU.QqY7\h~`eqMK\2K^ؙPI䭩k!o<ˠ+f=X.lShIEuB;l@ZfBQ%5:2"շGM3E-ʪyNrI-eLg 8 neC3*eICU"#:-kk2"I&>l9J_Hto|-NBsJ?ӫ$QkmSbd!N1 X# m08ﺴ"^ FkIuJ+L9P"Ew極GN ֤ms){9ll_6$ЧP@kmxWX^UǵT}`S>9)鏾"6F}n`ri %/ ;_o>뭰;J16JpÂv> !U``6jKBPX"]²icPi g: E"(Xgox W\30TإDK!Цc$̱5O(xHYJɃ@"$ :lK !4ޭX\xR4?/"JYXTaU[8圖0z@(ewJtS6..-̼>0]ҤS*DGb*,L&bGh!+ڶM+JP$F36]-ܹ5g[{4L#xWLdMU2LP:2qcK8}>˺ ,[\X,<:>e0(mXvcz|`P TN!m<ԭû*] ; G[4=tCJ)b[3\;G}ٔB].yX_SD<-_I6a%ɟk믷R<(s~R-#WIDZu Qh5M$/hw ꦥn: y!x\m-ڦcDZAԈJ RfޙuӚBT$T!]z 6` 6x!>>O >^>PG$ 6/i@yx<&6eܚLRb>#DUG-MSE ,9<.(3Pi<.,Xh]-,Σs`f?(>CYύ/\k7.nA5))d D$+VV:% rٰX0`XP*Ub#ty59H&%\*dz/y^͛ү~`\z  jX:h.1m<3xQ (eCqbzBpZ3TB&*p* .8"Fy5xG !8W4I&R ׷NJ]s|'ﲈMeA1ceXcU0r\W RP#=kS 5i;>ҴG' Քv>azMX-V+F5mK,=PG&e6ElH!$K[k<|~k ܦC<AX![ncã#vWF (4!I'ÎT  {Qx:lO?Lh%6(sNC;R}=\шz܊SVLm`6}82&+kzt- L}gllw +z#y>]AlQb~h(xxxO_ ;cyڧk,M)^+@A`GSiy8_jG?z`)ch4FВWtI,gM;g6')+f5#/5xwe@JWK}rhcC0"q)@ (p1ٶIiy:: >D|d=t \o8K? ~92ydX91z:סT>hD/ΙP)oY\ T:2)=Rb#fa\ݞPE|8bq vCp]A)XaUZ<0c|*oyOۏɲoȱ檞nG%  ;[ pZ{ie2))L8@wPCf;ŹevQ$̗/{@&\V#mi;OQ L-oPD t!P>]Xu=!v8M !eŝ;1ݶ]{BLuE:vO><ʫDmIJ&{d`x-^=D*Ǩ0]˓ܽ1׹QuUDCpo&BB2Պ}UDYrdY+r@^hsz)^A(r1"굔 7mDYNQQFR%NY,DBj5c(2kI(H謕W])%d ׊6uXA"z͔l3ux6jxFkK!ky&qY+/ײ!J !`mP:K;DN4MF5>'MeñsJd&0(Qي$:[RJt]9ƙ IDAT8YJC8(3 T3fsm$SZge΁z6e[l[l[d諹ߩ ;ykZ!ь7~,f?} hq.Bx-C&_=̓!Lj75gœHyQ)a 4]*ZCBk&.]`>[ܽOQh* ݃ =RX&|:/~ן#!x7]} W󋎩3T*K͂ ޺Ť8_)wndw2Τ >sn'JglŃ?:f ;z ǖ#lQej -RmRn0˞prg2-!EVim α%K] .|r^JDPU-`0ւ(`3hP֠ LLO|5%i;_ϛ|LMyX)FF@Sc2M(J(]~6zn ~{א=a) Gy"!ж J4(E}Ӌ91>$h}`\9br-+0"(t1+HBJ%}+оÄ&{w?Gg+@Rqj |1Ǭ.f޺΍1E]n޸$ 7LK_)ޛ;8%i"_Zr'[ $WrYΓy3$+l7 Vl4h;H"XmPV(%h9 !d>A ŀ2c [J+ 1ݷ#?"ʤ= d%Luomr¥kԑKFD ]f MQV%b!%!kg"JW;”?@fQ)o5y) %Q( *n1 X^`Dhڞp4MKJ9H.yk{z" 2&ksb-$+cVIî.g׎89 e1D"QA#GSl5!Ж,Q2<<{E\7% w@i섊7-+ncDkD[BJ*)*PP4{.,)vحF͖,S`!9#v7 頻!7w&X%UD[lIw*+ȀRLTý>xОanݢOO/!cn:ɕW26IsňzMϪ/шxm_I] D!5x ,)Fu I'Ol76=wF BJʝ aAxrIY̽{SM>r<@kJ",H){=oH^u^I[H$:o7c (D疫CNu9Ycd J3(|2y{O[ϴ:lx}.mb1j{RdulPrŐڼdc @yIyIwjՆ`,5ͽ8e%IRWzh֠\6L)1F4kkpڨ꡺DRBU{lF#}3Ahol~eTXzdP2]沶529ohHfb-b->ؒ@'\]{W?&0փ`3꿗 sxd+%%bp1QCR_Lv#fӔ`%q}G t}6 :kqE3u _ٟ˃R!FBi;r{M*EIccBqX &P%r}Z,:f7/ J h-Xv4<j-_g |2I()SiNLU`:FxJؽިp0RLm.޹AU{㓆y^_| #*[4)LrMeU~oKtspL1|7?/H!hEQ0k.ѩV'"#5 Ks>rq7[5 't}?LeS%ZB. ͤ۞>D/꺤+qph7ϴr8 `E_:R&y6!7&dOKCI_Bv\,`5["]"aiUuЂ~mb!yr0cm8L&#@" c,FL6OWI PX0q+V,B2VG|NJ[3d9(m%G,Q.+D=IkBa1",&U(, mZ+i4ߛE$vX.?8: g0Lh/PkDQ 6lt i* L$.+s9@1U Ƽ%h{b-$>R[A Z R?Cȥp%F\U> UR8SafoTsDaqXF(%IGL+}Sl)3 àЕj?x͸DE2B=^XufA5)o ׹_S1_bg2,93vcK@к@YM{-f]O(ƍ{L(C (ɓ άYaBTOznNrgQ{@!pFeɲiy!UY#E@Wo/"ErNY=ILbHܙZ4ynIVMKv$fX4}5:>uӀ:l3 h "X'Z(chRyʠV[{{.n[_ùU䤳%#+seDTf1 hk>Tb1ZWp]N>fմ!jZ. ɓoܞ\8K]XݱszibP# -+MCp -ŧ1'$]}΅u=łfT}گ1ONsVP(,4+$KQVn !ᴣ-R3OZ+c_]?eS:7Ϡx1(h4g|=wɧWgo7[xD+sV(.׷)C'A;W:E=Z3pzrsH:4 :)"$'.%*c =vR;b2LG{-ܺK Ԥq^;n$EL~|=^[+1%kUuq@孞2xbhgVh<c4KG1a!iEJ"X^yl vb#Q(I~ :jq tH"v=fEJwF}(?s:g+CntkD.>bb5m3Gocbg_˝k#Bp`9 QWhr/ OWL `c]Be$&np_k֔UMRV}^fRAT&r|h4B,/0&?~&QІFo1!s*nktI:F$_EIk$QDIT8`֠&O!DH1gp庻&G:vaetaTW4] !alrŞ8j2*}#x C ߇~Zce\9GEzո, [C8+JsDҒ'Gླ[lU%~}'X+; ">"h%uPA%\)fdԓzkau`^EXà 愪P8|PC@FhD0!ധWE>n@p(F|cuqoszbX5){.)uh[;C֢r%%;;jˍ뻄IG} >ѥ@ߵM@`-3$|`z5H]6ĤR֎юMШ*쓆Q:| ԥA'D&/,g:>.FR ÄF0 qJVc3;|Vͭqń:̳z:L4*nT5{G=t2 })5O]LQI6*${s$R :bG±/-vqN;hwci|y┡v\ZRJַRHb&$Ǩ^6aEBw#( *6PYb`\eK^ @D3QdrbP[iwXkZ4+uq5D{@VJ- +D,q) :u$[%[l[|R%~p)YW~7r^s(*_nICV<4 cZl FjX+%4VQ8buĵ["qvݝ[x[PʗtaaFІs~nL*: S|$I as_|QsŠC mQ+fg 'KM[JtDOQ&Te ˮcޓ=/,6i;cJF8O9|> &f0# aW'Et"xQM5Q:[0Y (?oyS:orWkj)uDEqo=锦/ܜhH_gO8>}u^~YrsUO\vIwi&1EdH h Wke&V8gdX g'kEj!G͊N`+Ϣ,/x!B`ZLV4!y?|Xx: 4I"ItV{hD&ҥyb-B>DR`10AZc 5+}S$t S1Ç >8ix8A]Djp'0C⃯H#g $nbbq170K٨>JhF 1Q6Wȳad3ӥHZ=Q)U5}Q Zuӝ)uYmYhgeg¨M&֤6:TkēbO0zJ%-b&V%`uy$1D$NYe$Y` ӲQ@|Ҧ%iFkbh]ShǪi֒D}r%|!iLhc"5NR1x d*,qEBahL f U-J+re=2:M̘c-b-ĖK67W땢#?8Y/$+lj'  oC>ARC뉺r.qAUu Z9"JA9XaTׄ?x*2i$4h}EJX~띞ww&%' ϓUOVu47t}Ľ\վ<aB$ƪMGWN/JN>b|&Jҋ!x!)OٲR(=LB7n :)iMk>w*o.X6+hȲY,W} IDAT~3l4+iHj.[IyC$ )b$5 {^bc9gQ2j8=c5{Sc$ Ӓp`]nkV+oR'Xk۝,VpEç`݄{DUUIF$ߥkй%̸cL*h|Z,ɰ?4m[l?ؒ@g\m؟'W۽"i-X%}t0 g'u~ "9Cg mdiXDQٮE$w/<(˿_҄ku Wٗ/wMܻW?w8=am wܝq"L'q|%ant~q~U;W-}I>PN'|sGz\jv SыyR, :*+ug2xCI&r`Hb\[>ulIyf9SmȬM,fKfyl-fӊa"@ +U "x!ReVA$rF=D;BD1Ĕ)bZhÙ-i]9Iǭkט!Q7OXZpfL1Aձ\U}3s>?#Nr*l=AS(]XQ%FiD(T8)"2 t]!GR,Tu3}%Ja%hEYc<W8֣YS**J 3 O&+dɷ|7fUϺKҰ0&<:/!jk5F(1@ J[xVhB%͛7XzBL4MK 4aPYNQ6D-Q&;S9ל{ʲ{ DJ[H_oTe '& F?~D;[l[lW[M~H_i7M1jW=xj!Oa6 !WEЧĺR6V%IHrd$GJ͗ eqU5 ՠP87ŰruR'w̫_xl6&,\H:bVx¡§)g>b&ՁxuSٳ?씟}吺?Aj 鸸;bJhmqE=mb8g" OzyH: 11XkhGE!<OJ gFĮ " !R#MKÏg*2[-4K"ZR߹ǻ'Ks\!*{Y eijQڂ YE!1ۺ|>D|>OI$X!ZbB 4]OkuFSZ*1PbL\`I'\z/Y/v@ݾ߮nQ1fErPg`"¥#gDye Z(Q-{[nI1lJ$ [d60tCO|/~e6ۗmm#uמu5c VV|EsyIjHLwj~o4?s?׿Ƀ"&P؊z%^%tiY,-ǏNi+ ~kVgAP+wS\}ߩ1쓊M輣q"euCTmJE|bԑò~ewrFkLTH hG16]v,'{[4_ƷXXOc1eTkD"ZƆ/~R'^{~N&NΈhRngwɊEwYgi@YOfkq=O޻ āHQX-#DpֳܼywMR !$>;bYE{B$CCK==͹.n&d됤1QEH]ގA J9@=a<ݥÝ.'@"*E|-Ir{SPgo͟yي~Uޯ)]LJM3Ydx|J9X8iNZ{xCMcrI1#vfR>>vm[UUBk!oF!rUԣW8B F}&6?!L bP| OI."B6@ Ͽ&vxni T5ZL~ը"8NF*c<1baX2_ux[ج6Q%,u !$a<]ʒ(b+ ʺYe(M[6֛eVxNO=Ƕ"~-b->9ؒ@?|'(<ʏʊ=SX`H)"r9QF<m kEKJ Q9AM"F>Ͽio\09H,6cm_USN蜭2@dA.aZ1"6K*Yn]nVJfN, o) kFWD^hfUUڀʄGEpb.hڞOP)95 AƢ55TͻO8:h]>s^yA-0~dI%+&*Q'H ]OZvbbT9.@1}"JP*"l)=ӛta[#4J!fGRnbJ)D r>IGspp e ztE)CYUt]OWfy(smMҒCt` =zzRF|!m5ΓnI(i({ߢ[%OTspn}&SV`IJ3$[!,F ) Ak3ChWbˊ>WAa.64v2B+twA!l7QX.2Miۖ*{E 9,K{\0>@B&~lK1RVAb-b->9ؒ@ $pey+T^•'S6+ʐO|ko|Gw W D,\J'za>Xc >%2c@+5^a.Gf/F#0 !S1סO)6!dd]~s2ԕG^9~jMة![-4{b+U)jume%SruVH\Pq'nP8d8z?ޘVw7..8@(dx4ºhWqDQt'=AFkҡ{|IԊOXcJ^sK%/;J~Hk$zI{%KNGCչYvbG168V)F I_ 7Lv9"~PL+N'0>p~vA+Jшtґ%D@iIPbx3?uΏHS#}EQYy|{_IļwnR==3=!)n!l$E7!X AlH0)Q fY{ުg9!a~{޼'"#|[\ Y\cuI![D=>aUBo#Z 2j d;^ %iC1Fi=.$R jG(UD4͢X籶evRc p8iOg8"b%jI]()%Vo]1'pY#1(Z>YTnÔlrbR^Lrt:"?Ǭk;ZHdԵ5)4^ **nݾKQU{%W( zeUp4|z|˦iJm6!KpAںƳ+(D>f`!R`|p}RC;;z_({\=Rݱumn=lWmlGֺd [*–H[ 9AF!Zt1$?kmI(@Db#D%/ܺ? {:7dRZnBz<<~?f|/(mvRfS7 uۤHUp͌S&Q juWq~G}>].y-U%1d 5*`9*%WF\@c211Uz\ k+L&]y GŊ')3FIE5c9>…hźዴ0|gf%f8G>u^[? (3x\&\"7oڕ<)n>z-<gQ*9%G 5CHOxuL}TY!_|cyՀ7޾%޹u!%'K?(8=y@xlD>'GkH9]JOzfnj8ܯxag=+{~~/~<9\)]XRDAM/MRCUѥgѣ;S&W!BIc1GAуBFRqN+dŊQ5$bIXbsI,QAQA"⭥-bLJbA=[<^i&8t:E,$Pǵdu.b3 sOY@.B f"hk֖tA=~{A"b^X)N"~_}\8p4fX:ϼ^FMo4D=JF|;^6 =J6:Ù?upu"*(Hvavxl#<U9h"@|+vG=ɞϽIJҳ>|Υ9*]4*.YդMxw6{1E+E| kwm~:FiMMs넿?L=~?OԏQG&?rL߃$zf;/ Tܻ{t4!r&BExFphwWxe>e,#H ~쉟-T1Gd0Rsm&5l+>4BK&#&cBRFr#/}2 > n_}; `cLZjeiDRt!yeD(,Hg -%%˸ZV9os1ϼȕ =]Ͽ7}Us5l[O]y5eϽٔDP f>?FWB:1M}NԮF A!%7yapPrph+ _`TJ.,?=;ǔ1ף4ZaiN42O(^[T)wG\!z9MW]I-0CRm[؎ava;}&ߊ罘nS⏾߅L᥯[PiŴV ,]g҆U"H(Z>mֽcl|r}XqpS 4"B"~Ea qrrf)D%RrQsIYCs]>WOr\:C .`q; zlo}'"g!Im*pϤ,+lmW`~?DaT%Tqr{]clr4F UB#Ba6 3fy-(ЪAwO-J- F*S14:^{00, = BpX"$<>7|)&BD @H0=1pcoρ#"#2ܒ$R+o%@5:6-)YTR>tVD@G(ё)fKIư-WQG);%v!MƘ{!7c}C8LdD'7p!wU[ּ 6j!6HSR&Ek^r-?FR!5"Z"02BI!Za!ѤTHA VREk*(E#72WX⻈B" 7avaHؑ@.V{m#_q=tuaGݗD.;?,gs.Jm[snO;X&z%Ԍo}g=b]5)*D, nݾC8Ɠ!yri93VwQY,ܽ^GUUh{ӟ= ~˗(t^ICXwl븟6x4 h)F G?"ngliV zk }g8ЊO\ bL xZA"l~x_p2" Y  CBctoc[%_z{ L!M&ς@"Kdn rKjeY B0!%J P M7{XE+Y5eoH T W`W8FER&?Xl s=s_:W|GT();, zgp7U[[w-s\S ǝs&%P4kZST @[ GLoZ@0* "XY\p)8%bny^9OU\~ȸ/sN-#B)*@Vt. S0KHdFLQ"D Bl[=1n;F+ i("E!*Fw8ȜOMQ1ߺ$JZ-]댞;hȄJL$SgHSSt(AZMb@2|dή,~Mht􎐕>}!BJImIZ\.س&։b+(u߅]Bb HLR#%Fd&#'3-Ņ-ڌmMPvb~X,wav/v$mtyM(H8Wb8T֡dh9ggg|tHS=,ڤɰm޳ .2<܄/}+j+OMI}p*5Bk!1FfZ?>!EJ)Z<8K/iů8k((Lׯd&Ms !7DcH}4<͘(SaLŠO9<q̫wyΔ6*xJDB!P % + Z K>ƢQ(P%O$R3 }n. e`at! \>>(9F8`dω4!R$zUIUTZShѶ7Obl3}.]F̛EG*;pMVs:5LWx3y$}JPZ#F2YVH-1wxY*r5 X+\tt@+%csz| i|p2u "=( `3"2DTH^`Dy*1FD9A}ʪBȠG/SѲ`z>m-xR^GZ񄳓cD9Z"m*[޺q_g7_G5䷚J 1z[ Cc FQ !^ȳNγjRd2W!L?(]Q(7+A-a/ 臞' #==‰2* e)nR/;0eJcLn9J̖UEի(TZ XpE͊_0P8ϢYW>ϛ/Y=e2-+j&-q-ԒgyɘJ+L M=_P>`QqgN*3jyRࣅX@0jڛETeZ3] D.+BĐ1 ڦmHPTGcH zB%oZRBkH]DS>4,s|FK }8WanX7Mr  FPu.4v lα,-Npn] xu.DZ9> QŬImnB@qEdeTHRe{gnf:;XzOH;jCe$6ܔJǽ1fCpE֏/eR/*!J`:H$5bޫt?@!&8ĸV/1xMхFGvava;ْ?/bi)z}\ G|16M&F"]0 !zMZ`򧵢nfEdZҶ 1||?a_`[o?wDZq&\+6M s^LJs1g0(?t7^oqzȭq8[Db^IބIJc<&}]%Iy!EDFϵK|gx'ye&%~s ]#ZiE ^ " zQdk]EA]&NZIaUVo8S#0gJD \6cF qr& -ַ2й v2, ȵ F J78)P*GYQ9z{ICEk-2 35)'@) '(4!;2C1"b )LY!}QOߖEhmK)T*H epQ=kZ+gYL2vё6k2BQEF@m+q;=->92'>}l̜Q7kJDPT;Z*OG RS) ξ&TjBP3[ETB$#I:qg 6)Ea7avaӱ#|{U1JFW?tRQTJՑ,{M$ziv]OdQJXҴ-!UKm Rڔ+/۶;G*^G~SU&_k)?"nvW%eb^MKI) Fzd~К E2[+~?Ũ_!$[}SAd7.JB4yL+)0cfonVccO.n=OhdLy(th|3>1o>MPbG EJABJbL+tv%b HHJVEVK5)id1YL墤:F{ܱߺEklTB!ME5hfnC"1FZbf0![=;'`Ԛ9QDVgsB|K_^Y559wާiw9EZ# s._SHӤ_!D(Y/;SԀDg@D&%i*[KcbT^)*r}CIDغ2%1DZoӱezr+|ᓂ*Rw!w$Px簶MRkfL^}SD"&{"D"҆ȼqYCepg4Xk({KuWK#}~~ĽF0>?GĘ3hr0Ăfd9ziZu&ZRKY]Tg!}@ O)dJd>Om\"@ב0JY7+ bn\52)@T $^HLJB]/q|?ϘTJekY~ LH"XJ1G*GBThN ,v()9 9t>ޙ0%$ID"n {YY<>Bt\H,"b^HqT!'wQ^avas#qSh#__7nޡΗH)(8Y=~vU59vzE%" ( F&\ӻضF]>B Pmo!$ŪMpV,I99ſ@z$Ys4!9CD4AAP[x[wG~{Ce|oe3 X7u+ﵿ3E$۷S Mypt!N-7*z_H!AtlZ!.),5Fd(Qze%$ymۢF1x &ِBPF!-Mɪ6 xQh)82T<ɏb TRT4 :T,{h LuRn5ןLU8nGGLzCDiT61> UlJkB(銥,v)·I0~AFνg9oY45pU2U ~QEKV%0"rarY KI8Fep~pI>"+;NDWֶ'RNxE BLmy 9'SP[$LGgEDi1"pXH^v*rɧ8~?ۼ5೚'0]UmUYatdz|DqݘׯST2S`}Gt7dڄ@d$%2+tf>҂bCu!]6x]Ѳ/L>/5XKc**5ѕۯ%tvavƎzI^B\/|KϒA)CY XgDںE(E٨mSe !5x!Ri GiTH ZTQQRՂfWxۤ_*e$k@;Hjuz!QcK:5)0d!q>q1os7~W/ CBo."~='5"t ["!AI Iu~~F+ZZFb_aH]ȏKRD4JSP *.`sC!7yEv|Z*¤ǖ V>ֻd(Uw͗o7N_/\CatTCdf-(Vȥ1MZ|jr\ygŃ M!em-u J}A]+fAI?`+U+Kݬis٢fo`c򐈨v&!dQmI$*D4|].]=uN IDATWA1]rABxZVu@FydNQ27 vo߶"(Am숣| [ |V-k/c w!`su)Bl{&8H5Ďava ;ۄmE$7G<&ƛ'Wڦmjz>ҤvcRETYѶ-Ɣ"-%/,V TJa%&{{&[(eЦ jw-^"0EAaJN3Y'XK۴)Z6@doonXU+(j(ˊ@D+T ޤ|˼_3\Vl}_C nkQ_tJh%BWץJ!HYNYߦ]'^ft Us3H&[ƕDiEm39fLX1H-mS^G][n Lk"DHP&&!DZq!EkWr2o"$h 2J x:S*FT(qAZh[RS_HƕbXi9د887\4{{g E5D- arڤ>xvv1Xrmˠ^H(SP^8 3ܟ)4tCp]+z}9Så!cl&+,ʰ#f+XdnaENEu9>1*IT%G+b& "2F|cSȶKM!WgEŰ.\N!}pMߧ5*t$!p N߹7P25^>|e"'yzZp}2;k֭NmI|XGкnuTf 9gB8n&ƈU@6|gtᱻ[mPGE!b;)ivavx#g<*}|W%i@ly |ۤ\wFTEzrB+9R'2Ϧ G-eYL!QUXRІss9!{=!xj"eMQxܽw}^O*,sST@k҆r{o6_T$ACѺͪ~ RubÏ7-Huk")|ʱl#F.ak%V٫UIyҐO,]9˯˷Θk)+2RTmS%|u!Ru9V`hѴ9l:lTG>a Ub6RB hmq`] K1%} |Qb$dRP&D22o= $Ub0P^$d[zp qBc& 0JX6e(Ah\ǞB\ u>{Y#2e(1d cQ"W1X¤&p!x,xsrkvƕQS#s8880pLڐb񞴮)Egu\+cgV/ڦ 1ە7e#ё}uD\m#R rPw k"䨳-kL<52Wh-DZQyrYǴ101_nbh$,9;;ݟ}fѵk|o3!b-l5AAڒ4 k{1|}Q䒆|W]R -rdAmI[Gĥ-'m[IE ~Muۊ>6davaHRvGﰹX#Q[7W^aQ7+]ZYҶ Ul'eH W-=F+VB11GҔ tJ/) Z2[t1|*8#il^'JE;X\[Bksӆ2_}U|'>hEۏ[QꚇqmPJ%oPLM< DRAs\uP=H"GJ`U"HUPFȣi>B9%e'Ɔ= G8w;Osu[z)3% Ts]HEHYJd[LSR Z7iZ;n_ sNrHR|-i'D M 5>h\8/S )W+A ɪO)i,BF'=( xr0-1h-RE8ȶ78+0̙W!g#~05rW?]UrZ! 6ejMs<Ĉ%,$+`gq[f+,.-HO7[qHd}!1qK~!:LC)2CV")\bHDHV$I@7M [Ā.`YhyGlL6l.tͤDX+mX.(Dd(ư= Y ʪhNiW-wpi2xtEɝUM V[cJSpzrp8dor@HHr2+r2Hʜ%BN|H&")~oAܐe/^tCeLY_af%{L;TݚY$Rj mCp0obo?~15%)--XígqO1!saIE"f޹bmu8!.fpս޹-UFJs>ᦱFL}% me=-C,%>_̭2l(~Uw1W{EtKu@qFhCh@rX'2yafynN= آb83iJ w9{0@Gh㵘e%ƠZ'Y7 DF+Rd& RL9y, f˚^`>8"1XᚄE(: &ڹBy_8h)5`4yъ 9 Y1{S>|)rKŮzվ~s /㷸w  Mb"tS/xq8vC^{<53P*|^sYqi˻K`R`e)i>?'kϻDYlꡫZZ κVy'x޹v]].T& Vʓagbw+bnXR/n%ifYHҔţbwR6 *.rww UhX1)5a:#lk\!Y .֏QS!I{|$nh .ZDВ>>X̻{uoՅyongm[ۿb-$Ч®#H |^|{\Z\ t$ڑilsPXpVSe4"a#2a4+ƥ 8`ӲƉh!Ӂdh 32QmէuI>L30 Ǭ`hI<zzrL[θ!I[;J:/D{_'UzbY'6U?\:VTkgrK'oUn6Z`LRt6(udQd ^ n3eyà~oDg$i|{gyl1D"DߍszT,e)L9rHBXzBR]`gLgLWse6h$SVB7:mADPM:<7uun[W۽qNTšdb-b->ؒ@n"~6_:7m@jɤd'edzE}3Ёi e* ^xJ.&FF1$ ci/XZΗ%VF)zFWppkr|vɭl:H) (*E(ypIu(no}̀GoG+HZkBl_my^#5|0B"QWfuk1&z8, C(n}VY,NP&t2١2c=zg7 y!+ h|A'=vRWs) !$&\/N$ Gإn c! ݦȯAmn+Glpsvn'nf熓~\Do x3{0e.uGr$hI;͜#cSaAfz|IdYQQ'` ,1S8^o~RS-#)m(m",wZ j*c^.5ٔc]4hBP Qmi8jl|I XC(GPSxZ.9H}09ȆGIॗ_g9;%j3yM` Um%M8zg3ysyοW~x{MN<u~k_߹{O 9BhmR 'ǏZa^wo} njo㕉ʭv\/$ TM,=ȮOmst]rѩ~=6UV^hB]:icN 6UDÔRϩ_ן_0WJQ4C,x^}kaQ{)61=:QQUK.OIzfKmb嬸Aqc6lam]J~ܹbkCݏU儶XN`,wk=ʺ~ܯlRi}b-b->ؒ@N\%bI͐ur4ϙ>*w :M`Y$chP!b& O5Pn@e4hB վb/fBFT\@| AHä:ejOJQ$KrD2K9.K.htYrk39١H K P3J_}Wi z{ܾs R}p )/|,(%.XflJT. r7ʰd3G1_2[yg*Ζ5ϧdY<:JJSF1/V)W1Z!Vp-Բ]|*@5 Qo)-a."Wiby-z1b mzԦO,MZ҂{T̶; []6VŚh ͪιki7ȬH(⾈H -iVPj]#|*X-%br"ȅΩpSc] v+b}-Ď,:ZK5[l[l- )T?7@$Ph{WJC cK/ptx4M]<= d87As\kw/T5_fqNxnjB6tzi_OWik'|1ԝ?(mSOb-b-ΰ%~D:CY3U0HzܿuD}v 8gh XkG)ic[9{p IDAT^&W$=M Ngfk|3'#2_y A[ W!+8!3Hr ޛHxʆ:xT ^%HB I|(kXEp֢}0 9w8TaP;wBpI,9->ԄP|IkA!V3Q7HS b@  \ ONh$=[#JL`0诪siå(,CLO-_?rzyη>EA7`&pW-'ӅcQ:YkM*(1&ɳpxޞlZk;&-m^sn#oOK*tɕ[X[9uD‡HxhyOr wH, 鏡g3fg0l!*mlM#cmu!7Gk;Vg SJ|$eU ZՔ8/9hI" & k~u|K9M6Ø<-b-[Sߦ<ٳC{|ke?`·GUڱFiaiiq'&<п5cj/y|>SU ]X >row/wH'"Q': L[݀5^@,CᲰ<\l3FԪ&$:9)9{".;zL(fEIC>k_r6 Y $DՏs5^ٿ5ibq!)Md %_zRA,C%A]揩ĊyАRe/Z+ߋaDRg C!MzhMp] Zl@U@b 4PJtJ,HTzgo+%+qMIjR#q4Ղ UF>М>~MU<8AZ] qcC' :,Y_?db|H]/"h'swvyGS.P:ZՁŴ9M@ ILJۙ@I S=(StK ^ZkybGRlflw];lAnV$Z'YWrjt"F+z7dyB9xVva$@#aw03Jqյ׏kPιV5DVTQOUh+󛮞 n[ZXhcv*1Vߪ>I-b-??$Ч볯;4ߜ=Rʺsyyi ;wrҬ:8*$ѡp04ap,U>csh,j <( 2/a>1?uyݨ :xK6HJn c9%ވnr;0!|O<6Ha%)r,Hz9+CI |5f-;r@wHTuM m8kU`ddr! }M!ͳ;ϱ|։CHcPaNDL,OI ̽f⒊ h)E#ޣߛVyauRmY6!Ah۹U+5纝x^{^aa_;bkڢT3H &8`Ӕ!vd1TK1{Jl*M9{7eJNkp֦is_6#6 J AcbJAh :+B;k$\U%P7RFHXBTqі?[l[l–TCXu6f]XP8k9<{?I5n0@(dž@pj)9J kEKrz@ aoE15.φ̒*7<^hbjEؑ\j܂I ޑK o9`xpEȘzl(kY-5dJEMfVX RSe>|eu`2vV'% !u]B *%t ³eno@".yRo^m`e1A)WqЦh6obd.dTvyPT"59C2,ec)CB2*`{XF Yvٹw_<.0'Q*Ʋ>B,,FxW3)%:XhQ(P*0V3xO i y0 IG_#MwHIHIO.jE&͖kމPUU;pl3H\*/y!gTÓӂ?>97; {|3k m nMKrhY,-(8S%fʈ&EkǼj/_TkUSp+֤#R@wgZYJb^ UU*pjS]l*Tnj᱊z.Khyhs73ZMk+(-7w+iI֊;wQg[.i W7xkQ"fQ$S 8Sp 5yOtk$ْgKrV})g)P:Ny2zOV;nv4s.z"mU«~̿νli_EJ,xc Z?ӑ\jvU}/~!<<(0O 'P!HɈe|3O?@B hIR}7$CD`H"E&vEYaI3 ¼M U)\ ~PTi즎{Zg'I]F% DQ~P,EA<gJ)hR5.Bz<`@4M̽G|D=F*P`mi<\x]Rsc+ߠġqr-s xqo<\bV Ъ*EgGcz&@ G;os=YC]+zŔզTP`t56iUX[AUQ1dy۷L<:9oqW/}o{ K \FUva)$A&ޓ*7RzEY Cp`}_)mlZ֢z eVA$S#؆ZUCJƷMj"(X,Hշ*gDGXf iL&q_ }8#bAG e/Ky79{e3<#l\&~MgKqq_1e)@!]J-9n*`׏+!J>\j`N$&'+wwq $[l[|V%>\^!Q~eB*q7Y38h|;PKrlv^`xA~QBCF`Δ\I SIJJU8V /n'21=-\#~sv28Uwo3U1g|OٌfA3&_fn ~~} = +ejwuv$h&V6VU"lUF!մm"ߪ|~oZj '²(M1=V,Fsr6`8rJeo]Pg W"|Y7^h+KJb+ŏ5b9km_m@$]GnKS[l[l [S' ?齍%-{|y46C GI@pkv+pB?Cw Kփm%8c)%asHo%t'/ nRB9;J 9['<>psY>f XY[s :cg`!e޸9K{I)$ ePV!þ' ΀ F Ɠ& >YAIPn uqFtYGP' >hbisH(6%(8MX, YVKj!ՎD aNJ@c5yW+BXlTsA38z[/d A[Q` QuuBVn{m,΢Z'@wGa/X}h=qw6EÎf䤉A,jСց(X\PiJBiuI`gY 3./\Ncww̃eQ6̦wxz $|a $iTҧJ..hj~ aIQ|Nͅ)asaYgZlD{M(\Ɍ!]Zh*jm`g2nheEd( "~?{r:Wu{cH,z4qa:ovzQѤZ]9Ao\Y_i5brd |(ؒ@>I|'NV-s~#܄'6}Dw|%)&g0|[GC-C t3! CO:_' /V*GftwM(V \V[OPf$P`D:ErN]ތ}(W ’ Sg )-S3D29S5LlGjnT 5g_o>m?hD2PܹQD%$&7Qn=A4JDŒbeϔ욀 o 8JR^i&$$p0$r{<`XUònhFp(bnq@pQB!U={Ѳ! y";{ƠcޑH@T@Hbg3eҠ4 Q|YE]th=:Q &1 F?&KbqdZ [71YVѠIJY3& B$#^w'R0BPsz9~__c\-wƆ{7mnTc|jdfbYpv>ex=riQ2ޏtp=fMPC2|zQjb,re:+SUi wYz-auVA 'v!5~FSESxI|rNS.7qAmHOy o"yp>KIulћp-q6ϛj`ύ9C+ܤ0Yr7*źeT㨮@ʫ"=J-b-`K`9%mn@4SS*]ӤW="Z#bqX^8Bw?yi4&%oKpM\)\cv+$!K M\Wb^t]mŪ]PDx,'|{6Q)ur:bdƕFO@F9Zu[l[l- )jWt3MX]͟<{?x"u(ѱJ]lC)V O٩wQ͘"y=^]Nj._Mʡ\v#=g__JPyݬk.Nt}n;Y[$ˊoo}1Rp&̯G$6 `Qpz!=SXI87Oyz`)h\ `:_R {DWSjMgIQAI}W\m /!6t;75 DO-LQ JV҄,ئ$P3١7n!2ˆ%hrӋ B=G&M0faAVZL;fE+Mf|u{(-Q *'\*:ICm&u@VMZO:(ƴʡo1fϻ^)'DGsʻ~ZS!I9MCM IDATY𖪮ֵĂƘߔxIȲ)%$ϙ,kLuק*gLi:A6X.-!w.~tK΃Ǐ]s,KXߖ 2d,ݘ $zBElYWggg:η=19H}H@ٓ-}ɥw APj.)*̰d9E~#a=op؎ЋzPF ) $@+1 0}ַ׳VUfYuNŀD>UNVVU7/ _%Y$BR{UsG)'K}Ꜻ" )И`*P@,('6\3&wN'נQxf3HL,6U VMս7mZIKL]8Zu2T0AgR~sDOwT!֩C;RQj[h tY@ǣּuu5Xc5x`M2dlyū|2C5:W`U̠1]sjdnj^{lap&Cn^ m`QB[Kb?3>*18^9J˷:PyHh">81C Jy%iTdQ1ynd%sJOQfGuh|\kl -ܳfA&T;I*YUhʭbg 3lǛGzj)-fsf͔ټ:cz6_`gDb B8oe&@ZxXv~W띧/P&ɰ\`5 9:%PThVpA)EZvk5hi:bf-< ȤУh,*TfSwH;Mb2EEL;0Cy(9ק?7~kJL9CшP7F#ύ|"X'.f_rMGJ!iЭL:Wx:69 Z7_#8 N3Y*0ʠu 0peXR8{Ҙ&.r5͑*flK$o83RV K{ >UPnqsMU:#w"qRj/mrZ+ޯK Ȳ8dZCr*2 G?שlR=T~;oӓse@di Hqi3!-B@)O9-u^BIG&w :s}S9!' vY\ <5%q{Os6˗9H*gR=>E({VmN.[,5~ڙe&j[P#";u$[T9iʠngV{T>k%kk_&#mv+^k|s_L|\MI{q |&yދ wQ C1=UIʰo{&9e% -B~vV9o%n T0EIQAGce`:Q9 ʽ=F(F9&fA[s{2?^ܰdd"uY h4c~ƁmG[VwX0?2NUqmU l-Cy:ƷXPiy")l:XpYET@IQijw  1^9'JZEŹ dj*t1@sW<b1Ң(#CFM(htyѭ T- =, t}_cMY}h*zY|M*g@EQ䠈H zfo89 Jm&9A}orco'6N1ozi(1VCI ~~;cjKG.٬.vΫCa[Q"]m*9_\)uNV1-T-?R*A1sp|tLu6e6!Zm`vw)jQQH★3[o;`[`8esy%M׆.Ymˬ1εeuNͷl7}uo@[kڃ;Wl@(hs8ˋ N05 kIDŽUnLuɄ&?pEePɓ)H +X {@JA)^aE&s&՜5*#̫́uIj,Ve{ݛ !a#?[|z6/ >`fj]F4!C9|{֗8W[DjKK>'T*޻x!АV˯=|y,3qIDGOI$MCK8IB"٥q9uxXdU *A>OH[C8&sg:cv7˒zf8\0ѧ)k٦Kգ۠%WZ_@iI^:^s9${I^2ͬ>~4zLVb`t?铊 %Sk&YM;WxpB\~YciŸ~b)w3"o`lNkTGn4{?[Q * ﻒ e~Gd"#J$![G|/#JM UQ:+Ɇ8;E+qiHx9' .dl*HY{ hsv]zgwz1\"ǸYs[9 mGZOP4 p5;gof<_{3>h8FlFogz59h3TJcU,'YhAI0XT;BZ햴.6Z2kvLRݴ,YwZGm,G)Ah= / vi씢ߧ֕[4&J4aOO\}h 66SՊ'}sf>CdQTMB/Kšk$ׁA3agsg2* n]d1&H=B6b{^ocgcsKH9*x]Yp|J{ć۷W3NS塧_z\2i7wR ?g;jIGA(UVHVy%Qw'c{][~_"x E4G\@JNYdyNE`S,p8D|Zi(5kDZ3kȫB㧮^3!}sKolV|땿R:*TAGhr~8`Y.+!*񼐂k{ʧv_٦V-8%]bs{Z_H29BZc5Xc5X@8! WGÒ&M^+or䒂j[CB*L ?< 6x!3C"8A)TxQ} c>IcerXq`9]iO,)U*a!NWVyW£4:oαsخ:B~Ĭ6?;O]$R5Xc5X?$cC?3nӯ=l LHJS^Fe1efB\:#3ٟ&V\Ӊ[@N3_p+?ʥmr*/R" ßWO1|-wCQjK KtHK)}TX,5 V 3i֓7٧dlr6G͜L2m(j]a-At"XJ-9w{/V9N~Ƞ'_wdy4/+}s6B3;yY1OńdhцxLlT^QjgUAglKQWqiR l[ZT`shi( u+yA m'a1?賷ϠG[ Q9 ߼W5i|!V ,8",MX4uTAFY67:`:騆Z#dW4Α5{ѱtU2wLϴ*hM>"æ0oGgTgc2QM7*e,C#53hUl(22hpfS '0R{MX J (qA5Ji&rD ZPFw*qZ@fάm1҂GP`C (n@zIZGX-s1&~UWRƼ{K2>SOC*#H{g!Vu J٣, 39ccS~ Oxeڰp>>yWuTo/|+}'8+D:'s^}6//|Ɍӳ1z6"a#+k;H*3;W'sz=YhǕ˗ʕK\~k/Qd!V+s(SN)TvBˊMm!TzĀ|=.(>֖S/Y05qjE,pi> %ҧ>b#NRs)6dS>c^`{|ʎ2̷˰Mmb:ǴV$1Lqeڐёdi-aJk ɲ 7I!}S9yYb^ɠ75fy.|v2oʷQ=8O8ꗹ{k4umEa1䩏L_kXETW2( @WZk 2Z81}N6E5g0|HO̥$9hMTٽ[o0qa"/8h}2Az%uXݠBCd]仔eIUԳk?H^D9*AƯ?^F8)Q]^ubIH^9T; !pAŒ6DNɌ*PRZ^)Z1 F>P(lTD$9TDQd9"78|ǧ4Js*'cfw {w% f,ѱm\;mX`l{9 eKܒ!d 4v/E:Q%lUԞ !Z̒i\\ <~&kƏ$cP g׾Ƨ[6P*T4C IDATb 1ƨjmX ]]ɹ2 6K~#ӑDIxs ,l'jj&oܹWFwxɟi;N@ "6`seIR=I|<0Fqu.[?cܺu u@O:d"tYu@&El.xJeSkKCS͌=3Z =\ 7ȇOZmqNcycqF3QQ2s88:ռ /9#EI^0_hZL@r;dDX xQ!ø~" k4r!'8B̰nF8a3R35MY՘3Z)y3т xmPx\04 e^{fg"k`їaC/V ő ˼1e?-"HD!дrQӾ.$Z̐JqS;겪R"mYuΆ8( *%-F&Zt:(vQx 1 P'{ľ+ yR Z0ĭ[>u~KWȤ­4/oZT`I#T+?dgթZOKXc5Xo$〴rHCֆlgS|ĝ2='Hez乍rnk!6{` X&~`+yW\v 6CZP\4V$E/|_}<m ('?9ݝ Cͳ_OW^BL@pWct,-Yhhj?/essc0OPc{\oѪ{=aӴd1[=miЬYf2r^B_?Ǎռ Y ~ԈGf&#p-s<,-A,Fa3RRː28K9>[‡>:fg~g;wy19_Ybպn'Yw5|\u st->MrYr*6/9Y`m) [RWo@9"#3U@x;'Ms:}tټ,1+1káu&"4MC].лtqfxm(6G,bq6#|QB.mcVM c%]0^. osp?*m0Z**C0\Jqpvwhhy#A)ИsBDا|3V/`ILS9D V$18}U% Uu!-| q@B@|,uFug4qq!{DNWׄd#}{ Z F N cicxmꪦ2g g 5%Ԏ D:?PZ=RV1i?i"h4=PR{:"5!,ajٸ}dj =~%O6[c5Xc5X@!U>/|OYҐ隫{}U4 <d9VYʤI+{aV 2~k̭$GubeQIvE~vzƝo1DEd[ &T51~`:Z]{ ھs0A6QgrBt)qb Kև>;eQibY<ϺhM$fZ`:Bdڲ6y$ٿvlZq1*!h\C :dFx)eysB˨wH`Sa88TFr0Q{ާ'BI-"Qm ʀt^1 6s9?Zu{FB"C$:D2()YDCϼ2c >ӺIF\M>D(MuC!XqBU593<:by9 x+Ow:.mUą}NQypY(hUMu J8 sEy$]0t1g$QD̵9?* kk7k1@iA/~o[|B`QY C*CZEC[|)g\}'{{[dڤj^Q/m-.ZH'HPL\Cp5Q`3b+ox~W^}yj&殘5@"JMU쳵5駟l1RVҝE`ߣȥM? U >6g6qzCz,ʌifXÃY$(BJRv% wP,l_E~23^8\sO^eop\khA!@f1d66DNofQʢ+^-xm*4loM6F[.qΑ^9 9:><Ļ8=3*etE0a*fTpetɆ`{g7|^Eu7, n$%؈AϐNy:UI JIEPkIǀ|씗"_x 8fJe`W|P 0&*~Ygo&/;'Y y|E&q =bάQ!hn!_ӟILde"bU#'EM><|gy*^sUTZ݀ܧ.[5S?x|֭6 39ceCoD_ZDeBu0 1Q Wdoy|νC@1iF cӢSNPD5 Tc+2?c] ^{eF^vsU!'5*% 2*x}LN! ׹lq1Jjf6*\k}Cd2?G8fq^w i+9I@к#Ec)7KA6gҔJ~%uJPZḆIG{R]$  ,H, B$.pnQid0ox@uvQBf Ya(?4h&-d(>d|O|s?gn] E -Wj Y. `9Q*+vk,qlXo2sFLAf1h60o>˃y]KL VH VT[-HjeUyj? E sS&wI>8`~8ڳ n)q^ f{h/jN„ó{ӑиH $ڿB$Qt QWjԯR? !`IZMw$z)_.Y"QkYJvЪ푪&+K6L8I)sG2ZZGŸ4i|}@EHzjK`[<_~I8s<;eL{;eP vNٲǟi5BTIGyK(i k\Z NQX%Z{YDR)(G-!ڒ4 oVnkk&<`4B1k@e,qH DِR>7hVs>=>a8襉{d+DV̪8;X"7>7AA X|piKVh~AVdhnpeggOx2h+tu^s$͹WvQ쬮>.=FkEУ5Je UOLc 7?Brє~A>! f ynn {pHQ!woc|v79zg)<xZ8pᛆbI*Σ3KE pONzbuSTI#bFo< `}bV2$aW"!A[z ΒԲ٩ZS Jz[Q@'h(emX+ƤHBKєG=5:yA1||e2g2h[dٸ ;W$K:E.CVL嘏uHiUjiEv--?0?Gh~ yUȆpṀU)؜( *:Pd$V1-u)T/`&$o,Tf`&9\CB0,1Q44se{oR̂B@gv k/Sa):"'Zr%Z$]Qԫꡕgj۞۷R]en8Z3K$tʣ1R>>UBT[c5Xc5cM=N3$bL e,O%u'3Z{{fzza'HH$AB0i4I~Bf0ÊO¶MѤ,Y0% @h`g{k{۽73!w_uu AN SUᄏ2OsT ؙRmlG5>cU@5:{ -k).1tW&(7׸p~s>|#OYHYM8S𮠚i7毒|m1Q)Img;d$5N%cDCWF_+rEY% o)|Y/f ù&#!UX:D(,-#5ih*&I3H=$1܄|srR;sr(P;dEGIP1\A6dbQ-CQ^'YaAVE =V8q 3l?d8Y&Z4#TSE] :*E7a`6&cwЯ|W>΅Gb~$SÛlQ 7_2fHHFm10-Gj*kT+N6O@'j%߃=,$+UYсˊJ.$(&AXK v\13y! :|J+n!7T>1D!l)oT?P5qq!캙|cx.?JG\*Z~6?";MC@Ѿ*}e ޵"krV@+ +p`E 8WSs^ʨ'S5c+MVPB`$}[H.f5[~_'>`jgѝqL_Yw$henouhN$`H礉Ap(z?募La9tHJ((ssǷ{g7[ؽ<3 v0*u^ۗ<1D銳I1"mM.C\t.TSM$Q)(ac-gWpqp|@9'wsp7g%)E} Vlm0h"*YeiIhV&hE ',`MSΧ`0j(S=x( 0F(j3B ܺLmϾ.X(-c YUْ7vQ>sΜ9C!R17f=nV\=V8U-Z 9x[xr'xYߺ@Z~}"+LG;\Utއg{H^poȘsQВL'Hoĵcc&[u٨ǢT`_Hz>LZM |[*\J@*H0W~VڍRKā`$.W(ütLvwEBq!LZPyX$*7 F+rA IDATŊyl6 .&u@?^>''ZZhuGݪ}wV$H W$ + +7X@j⼥;|NtR=zޱ0Z0ʒhgǞ:E W当uЗ/'o~8N5iISvBk_Ԍ9_ɟIVYSjH Z%smHR.9:i1b})b 5!C)D,ڍ@i딬cl(Fd*szu ruُʥ^0eZ$Z$AAO xkIMBJ-,` vyq0BywjnisLAJ|9Ɍy1Z) %oN#ƺvt4&+Vz=D<)bTyxQTSU MsX#W'}~ {CdMd:!a Yhm{ 0,"ͤ!w$(AC/]VEfk+ML1λۭ@;y6*G/*">i2k/+QdE1I\cPʻJXPrɘXzXi~ 4ocWiШpd5!d4@$Zli͟hF!9?T t<=KV$ U &{VXaV/"HNٟxkp kfQXHtB?80Y֖'{/8f0.ڮ4p~;(0@h"g{ׯNPX&۽i).f17ABR«(ÏO}͍5,i(J+oz!w:p%,ˢ߮#u7Lp;Mʐf͎.~r9} R*W%Eaώ8> gllPw$ 8 }GVfL|J ^p([Ś ֏r^a+3CuƕbR[Zʭ [m_"A9ީ H(KJlm AcE0xe^{joYO4`+׈W&qg{%b _ g>s:|p6jstRh)rxJ؇J0Q*/˒&(,Ib_1*h%PB}E%UW G$p#ݿXIOOC@N11nSK &uT)d078t7UNom TcR6)soxcküf^C:g^:rgsM8[W:מa0 :FdI²DPل{$S L> $@(9qh*qFCjҖnoyX ?މ\ e cƓu*6[5PP8L$1^p+ADa#!1Dϛ܌s/7_d\@{W҈w-1;%kec 0Wd%Zz-Yie]ʅ=+*-iױnX B=U aNċP%xWEq1y$ DCoz1t%A:UQPzB*߹xiE:**d }fKV{=YhC׌@ w^L,oVsll>{w + +Z0O9^6Fkf4a"gՌ _3_"3M(پ h(s/ /JB28ܺG53t!,!刭5~?BC ǠN6]y23^d{*&lm G$o8JC+ijR3dz2`zq?M5MT7IRv|zVŁئtiGÌ{ଣ)zy ZED%4hQX/ 66S[P"ZF)ڄhU_L AϊpqS5òb a.-@dYʀVF݀H1 J|e}$$&>iBVфE۪b-nݸl: q`XLu3E*vc8*~W_.Z 2Ex2HPM5⑸Q.T ܔҋXML$ H{ 4BDO ~7\Pk%ZG"I#ٍx՝1GB h1yQ=c|]ET8 iJst[.NgP%ޯ]a\[IUis.6:aj œ$nN_d單f˛`Ltr5U" + |H{"pSMg>Uh}@Oȴ`8n}O|Tَή5M'.S-:+ي~×-k&JMjH># z⬯GeWӾDR;wgvD2Egv!~He™s!IJm FVkzo_3&YuKCT!̪I4Y Jy.+qޢĄRN<%l۾TԑI$gC%@ٸb6Aeֺh\my*܃mQa,@\H&VUFME dPXKtmiqh:/EP&IڱxVEhիW^c'ϋ[W&h1IJU"U <˵7õ Ů,V@4;֚ IvvG?Kt UV**]\+$(Z|,P X=p=&@c,bL6 QFRaҾbmpꨳB^^W [B VXaVXȵh6"/& $C$NjÌ{×)zأ;rqi}ةf| g$&T"P묐 "L2#3|᳟ qf{k88E~܁yFj]UJe;mo_øfO!ꔟ` Z1;j[;\ӌGr ŸP&5I}jWI=T q|p+=$ckX\Ǫ[ gT֐ ux|VQRб+XŁ簳K-a_K5umk|> /BXp֒Pݵ>X@Z[[#Qѡh'PeŘ@!Bs1,hX?px~8jjT*>p~^8k1FC4 b$$v=mj۲Z3DxU= &WC;#NTTD()"plq?AcE v6#Mg *kuU1/gԶGBDՈw@ Kg@-{XTK/??&˖Jwкcf zADZBǥR1 "n}A5 D$Zۖ@s"j" ˗KȸYލŵbP3!aqʢkZ4*@,fH!GZMi6(kA$ZG)M%|e kٽqɌ-k#&vUlsENӔgoztj>J7cQ5T1) QѢ:Ƒ8JLc[9|>Ri)lXt @#u!bA7Jų.[RuJ1\YE@C \l0%Ti߹(%di.2r ;!,\gᘵZV$=z`k}YIrMXTAqR b<-MOpR5Pҷ#jkUǤv`~_S~!|fjdv¶o֫Hw6Ȼ>Hwaz7Nm̿`# %ĕ7E+g5o2dXR*I"#<ǦcDΪ(olO:82I~ʈff_d)1I$ Q-J&{Rh3U$K`  0XĹ&ÂЈ!G\$|(P&5Vrn;cc#T3/2+= ̘ʝ*Z$ n{Y I{xW^z~/e~f(I@Du],˸GC{vwn2-*SNPFi !X_\ {}%HyFpA9cv"Ҧ%D֞dYdAu݅!:dDEa$TRD)\4ksdmA۟UlLT1閼RZ).ֲM(\փu$IJ)FCt/l T+n1?<ϙ6QΦlwBvDy:6qly71qֆn>d!5@r"ՅU!j"- FXl6F)%>ЖNo񹧚&BP$~7;Tz⨻4hB:Mx)[hJhM/+H4PZ>I dIPvsf60=SΦ6?kr|`2ǟ@stDe}PP鯩N8ՉF͒Ag@u]$;DuY]fc+ + tUfC{E/|ӟo[ɾo溙%X'"~ZEd?ye$($FC/}.t$ 5 *C'wQT#ޟfo!$I`E6hcB{ھMGv}ڬfeQ54}>6_ IDATo;Sa4?`k7_Dvb**X$"15SIgG?i.=&TuEYޓg8Z y#Jc%X{$F1zLg"e *n4^s& }<&1~OM'uM"%YT̪Ear/,e:-|@v,y*pUeIUUx A!TF'B=8؝0>>ٗ[{X]lqfz+Rcx$IҪA`A4bc(6ls3|W CWCe}8ho,8HFi%.?0/]B.jxjCJ d%9J$.@)6m &4Z@|UCdPo:VlhZNFEeZ&MT%M(n>ge2Sz<\w=xNp%}]bލn*5!-łVeiZ.T|\TA=]U';!6X\X !Ƿ6E$hѸ*V k 0]"%CM1}5g78apjdW7{iM$ђհ9{E5w3nߒB!T|+eVXaVXa+.~#]0 HؼEtZgnojU@ٌ_[YA+Gz~O~I^ɻ{gU N97ukL\xz\}U 1W_{/fr[;vHF:m4 ׿/M-ZjS31W` .qKlݠ [x fP{xmڙm% `d&|i1aIj /0EFjgmod--t9E<, gsMYU8zHPy^FOj( B$ , jzYP Y(ֶ6Gv&Ύ(I.sB4$BƎ&d 醀B"vՎ*VD*Sy1'W\|!*Q 'ؐ$BI⡇ _ϿX(]!R%sQhkk&78 ݝd/Y UT ݞsd6U,׼ skq hc0c[\?,UiV)*d+爵XɄ[{l{?"N }k1*@yoqtpH]MI^I]Iz9J\wi]i5N9<ӰV#g]URTT>s WXaVXa\H{3#>}0:(jS-{D̫C%#iҬBkK~ F>})9uYYQ9Fks9^$1dyw,G-Pp<9f^9w<^߾|^bes<+Hc :9yz0Ja[J xϛIo'T^QIBEBM%T3zԐ*;s>mIqM\Ѣ֊<O&8gՠzgmBixHĂ._̯Q*7̦ OR)eY#hc0h!f$Q{=}żȟtZ(N ʎ4UQWP#hQI¨3+g]/^x}ʪW(RM]f!9IHLA@LE+N4ʌ=$7d8.>L9=x&W_y5O}LiJ@Õ+f?Ny\DBKC_۩ ,~N,wgidu7|% ߡa|Td"\ђ V  DXo\wC5 2΂uC@j-KD$Tsb-'ssQe*rF#ʺ+]n;Lܩ8|73ONVvN^ !KZf;n + V$=/K<0(ngΚ%O-qOGf%?x4R"3||c&۲+ !~/ۈl=G?Q;ǹ+Wȳ Mo8o0 !llmြQ5;7o֛o->OP9;7wv7wn$ zC\yֆp1ݽ}{5ݝ+tHuKL\B- KU s fjL.p×*TY](HSpУ,ˠw>ńY}2Vt aX?*xj\]GXkd6gV:jk!s [zO5 !Xմ`N9a$bOQ|d2GSy? lNsT̴$&MI$Mc(R! [+>Д1 ѭ!Xo)s㪊] zlml0)HJ!M/g}?f}}YqJJ۶_JSO:]|n%uاYofOJ5$P3 |^к-MÅ#5ݒMAN.{r=CXtgsfv%C0X2j *2fjT`8=W$+5ކkCV4MoE gxp>7N gI,^B1 x}ksƯIjkdԪJgP;rμc^הSN$ @+`g‹Ͱף(RʪdVx d+9Gk$hC, 3TP ,GS~=laR7{>s\dISncIbҔ(Ȳ&Y t\`VK]CRXޠ&рĤ|6!Hjss z=lmKXKO3o|[U+рϺPM~g$N4,?RNyu 9B[K6+:ޗl"#D'G B4 EO BP|2E밬]GUd-YQ y.;wD[yFe 9{ULٌZg7yMr'B4ƭ}$Ld$&Ø$d2Z6D L%jmc4"g*E9/\jJ#bJiΜy#;`'9PWZz!66+W)*F ">$|YmFmP.B, i@'-wRYƅ$*duF4j`,+ b-%J Sw y}|%kgG̮[Yt"P `RQ I<YGcRriJRwΦԑ96iQ]g8N8<%iee J-!O4oL}h۪Qu_ڑr>L>,)^Q, }Z 9+ +7 +^v:Hu3/>W2J_x2&KSx~W?hI}h;s=Dol9i.Cb i0LF֘ǜ{Ν?Oz9;;7Ϧ%{7 ߾Ɋp>$GgЅ/|o~/8>ֈ!$A`A#/Q]r"tzT5)Ǭ9c^^g;zQEp|xHm=Ap@QWSilY^[;3ޡ殞 Hn`$-䐅M';ؖBv &„D覻;)=k Fiyﲷ7[P ƹ_$|% Q*B}c%/>yфhz_/Q5&;?>|ܾ#z,̜A5jJ}op`,*Wao bx7ʙp`ꆱ: &e4\~sa HJ kMQ$QhmII6BV8ˀI 25I,)9xj*MVT$հ-'JQug ! Y )M+31Zq|޸ Jchnz5ׯ`6ϖFU(fx ˜AK߈B@HYyZ8M.p(Heش֗Zm*rc!"hFA*ly~k?I3kw%,Y(Y.4ֲ i%ԣiht&xc8M0BM y*V-R A#ԍFNTNqqvU9=@UՈVcC:NU5<580YcyhD9<Ǡ9{8;cu !Wݚ qv+iTgQ䏼ccjIͺQi (Xʻ{wM;?ؑ@v]}|KD@>w$TL4MM]Wh ]Qx(Fstrrz1 'y駙y ޣb2MV 1Zs /'@ Qp||rŷm$IO~i8;;Z˗'xo {yD}|!( '=a]c㛇^W4RZ.RУKl׮0Vs`-:UMoYV֢ڌcJY%GbՎ㧮s0b5q% 2)$W3-<]PTNbr6J\5XkrƏQdK~D(-GR! 8gX.;Gw;<<!Pg5Ⱥ xE m+9<8f0]c5hc6Y.ڜQd-ZM^kr69;6~y"e9 ,G9Sf>|'!?֭VKBQ)|܇GǑ5"\!.oyVHS##$Е<.49Ui]ZK!B R 0 DsKY_\p~U<ԵLr.K>|:ɿٟqr_G>֌V{|K:) ) 1_?t\,Yu-} }dծw\X.g-ѥe+r͡Hu2k2fer򬙠Ue1֠Mh:oxT@P^$w6w-AU{=6Q &gv IDATc \A :e;B`+杢0TMm)BS׈ݒ#aiZ5u~?|;:lCKՎl?F2y3.XT[ӕ̚b\ ڎ;I(͘i#h;*h*@2Dac:n<ٔ<8' > $W ||SϢgڸ9U&Ib~Mwz `;l l>d[i2 QmG鄠4QuUoYlÊ?&oӟ! $nC+mv``Չﹺ=dG;Ó ȟ2@ &HB>'~$Faᩧ%@U99r<̳\~k\]p nT~9s~&{y? 黎Z*0U!oY?;s6w7O _y A(l *JHh RJg=Z#J[SB (H-B 0a@RdZ =C˼v4> 5WSh;O=ZH Dt$((:\\y ;/FgzSn&a\|/[[tU69AH2D{F7ۣ,UV֤q ! Z%[\ӤQ& $29m9sTA~rikp!0cϹ@p[q-u,:DOdϤBYF1M0CDF9sn"B z]>)<צ=e?%}N7?i0)%]lZ$ЄBcHP!b {h/]a*WKrW+ѹ5'EHHDŽV g2#1gnM={|Cc)U.ңdP AKijBoL%;@9Bh a\V($bcQ&nLfS6Y\<Hc,꒑Tf$2Y{r6;rr0 UU}:X#U?3f5<}z0Q h0)GRPLN *T +ۓ%k.%]{J|S %e)Ze/{ePɖ} )V?dvcl)Y!&)XhS!)'aQp4 9 YrĨVnnHQ!&ڶgunVEyuKt>qGO?C;y V+ؿv3Yxٛ< nkt^0cmCw(IA.[q1b΍&R Q|-2QDvCy5: !!1bqyBT/vavavHUn7g{ŶP>%#[b]bɿΝ;Mg2i*G4s|z+{ok1SH O _W)F+)yvfiۖv@(+>?ZQ:[}Kc$D4\&c RehIlAҮdhD^B'"5ڹ|#(Q I0:7G)I,T [@cR b!=gJ)`eOo@ dBUWheaү7?ctRM49>\`f9ZkXG׈ ft^wb_2Ͻ 143Rh~^=%-! ,>m0~L^~kgI7rRl /֍Mo$TQi*mevbQ@ ƙB$ŘI? (Oz ;;haG}eyd4OmDFB=|yT(0^ϿM&cJ6Dg&L'O{bCbnoO)//ޜo0pzvXi*mo~__'/a۪p%C,?q{}k~eὧ-Gὧ+IDJWÍYCrL>rsR =gl?.!̩ $ IgETRa x )2E}R$%2̦i)a6B1)$ a"0I !aj⬥n&L I$ -UiK062#)Z6 \H4ZE.Ce71XX~N%4WM+f:%؄Fa=Da *;DVg{SB(QO6 DP)68%8 HF9(BגDSBu7L98 ۴e?)IїXS9ΖDm0Ja DRD(HMb +%@9*3%f9(*VHZ| )Y&Grkl? MoL's0s!gq=1ϙۚdJ*^ַx[ߡLpu c lBD&1v⨫)P@smHo]ҫ&ĘϓPZo (rS&{cJ*7 f[><lbVjk0 |cDg% qw|;;`G-97;6[GzǼһrzG\l ep<1E~S~Gqܾuަ=?7SIC"$䬐m^wZz&ɜ7xʫ8gY//׮C~C9|lH3D&^]A 9cFB!T3Z@yG4tȠ7ּ=|59' r˞$5GAڐ@)$QN<Y" ɍxBQ|d %',|QIV )\з>fT)U==fׯspxHk!y]CہDrfѵ8gIgx/^'C]ϐ""gDI89{p~<73*_{Lrs1TV52y$)9MRV#ɚw A~DR rLVcZ2k$"|!]MM;S;Hvavxb#~@xƯwSm[~y%'* $(M\U_Z/~'4f\fk_*o\3)CUC'N\ۿM۷|s_৾NaXv])|bKS_/}?Q7u?c2ª̨z>S ۣܫ,Y>+mh~*Af<@&b\ءV#9LE C>eQ["9)zR(2NpFX5(茡rRUm5>$ºCh4N/B^,O'1$Oጢ{Do~?x>飧k|ǝgt>0M؛NyF%jgC4˖h1J'Lhj5Asz2DmJ$ 5!HP`5=1іܥpu/vMۮi(Ⱥ1d֤I^{|Јn6!xLcRJ˿##81DֈPd CɆdJ1(q* >̶(Y!3a !zNBVsjE@Pb*J/ŦIN' Ls=I)bT#FP[C}ɠr0d5Qsq߻[o;*{{VTihOVk%{st]iF>?#-}߻1] N>ˍgú_ŽF\pqLs02?ܝvm@Ne8l}2*(ְ<$PhdTUh|GZ 7 4,ˀ>r;;D`wy?ՈM\H.3r[KaC2l]olfy q8-9d2W(0t-3fTc:+J)'^|#MS\8;=778<<2Dې2 յqQdZ6mkM}eOG^`$ۊqhk1FSٜd)<*̥F?N`NmGܿwejµ׏c,GǜtR0FhpSiw !2MiljI uۉH!_*k轧&-HDr=]2g VuU>N)^/i3Ӂu#!_3~:EeUAD|mR5cXHJQ Rc(qn ꞔٔI Z-"Tb:Q5"Yb&+6I' =)YL5Ta x7y?g?Y\3ehgXێrܿw77r~~p < n~E=Ѷ2~]3cqz{)8=; GGݸt^..}ha錄Ї|(R'U=r"X|@њgj:cP!_)əh I%#m`h}Q)$B$ߡҐf!!ߏ?}-;; Cq z+$wT|{}Ar͎m~@HӓSVfVYxl0 [e{e^ +#zW9:<ېW]r]el/ Q#.2Ad'0PcJ2k;ΉBLnIiW+aIQ%PJe̤ǔX,VZXWXD1 t5p4̈́D3G<l=%{Cd899e^kt}۬:=[-ݭ< i w>@p*pqu;ж:)]2UK8X0tEy=l*^{OqtǺ:R;`\Sb Œz:c2\_^,-2#ys;`g3t F$,IJ0AvD! eruQ4FGA>`͊mXi9ԑBucGZYbJ8BD:R"HpAܰ;;<ؑ@?~dvF^~>:?gX{8?;oD4Xk7*TzEF![Db ޗV![l,M4!~?a\>b/?}$xm II!L NdjD&F=c3 L3W23bJId> c,1 DaնCO)lѵ05wNgUu.=S5 qdͽ B /-b o)[t (͝'ysR(m z3;1 9EE˩3hg9<< Y jnϊDH)>` ᪌Ic]7)$PJ$Bi 3*;[:ÅL4l )J1l2Y-lQ:?!Y$#&:pLT}*90Z2Kym-NHs8wR$S\jJ֔w6PUfR B KseҨE95^% AI`vplVٞ"MtCdR]dNъTˍ\` ,USbdpDd2߃zB5G5R߻êDݻdX]fRL ZeQ;o<=C5tX>dbܾbe"Ǎ%,Ζ6b@43 8k"uS GiP.+/cJʁGTmU!CH3RG ϩvavŽヒ;nc#2n5fnJ!XfÐ e5GcԨ jۖW_yH+~fs_Ȳw_f@g}<~RQqQ$QlEac믽+A|*+[2^?Xj1Ы!;%lIbA$QH Ü'=1cl]ƺjSRη\RF1P/¹ m,V%>D&&br]>hXwHHT(̚z %4 EH䁴1EL$*ºR,9)`!&|L8]PkYJwYAdrH!&AY2ber BWI"mr(,sP%[!7v1UGJU%2,<Kf,Âi5!>vuL|y}nKS:A9+K"V*D"*9ƒdbHJCB>׿+Hٞ3|@(`dH ]C!|"}"1l2H urƚ IDAT|!ҶlCt)f5 $EtgV+VXku:! j}HL݌0$w-CL nu?˶E C7"LN͛J1ZRU9Urq0NOY=|_Q~6B@Q Z)IRVH3!|Y-ƀC U]JSM'fXf'BCSc0Zb@=;;(aG}$؞6,giaG(-Si7npqqN*\Lf޹rU7nޠ>ODLP⠙W_!)s^ju5Z"I=kPSՎ|O)&΢ej9$pvW ׯٌ޳\g>ͼܼq*jжo\C8;ߤr5{ՈG׏,K89ML&4늮K֢FPK`+{6׏ou]-l6 rcr /jbDR&;DUdhexݑ4SeE zjيD 9K"J$U|?A Nu k6xNg9!sRdm$l[2h  }z`X +q|Z[t%*%lL>Y稌A* U]c&@Zӭr J@j[șf-WnRĔoESѹ3,$S W9BdS;; @<.!Yd0H\uyh~1 Gz .pC.6l>?c~~{or˯| 6ήs6f|\,y& 16 i;ֿ̡)]]AlT;ilz*;[!wտ** ]a|ȍ4) 1Iic sCQWcrq5 Z*躎E4ɭ5!EڶtVqv~BL󇹭Xxϧi52]ׂ ]Ǿpag><8Ǽu4rt4RDpՂH*{Jkrdś!ZЅ(UYlye"9&E0I#JaYc-R]0C}&U~<{j)f5gT 󤲊eX/k]9mtJ' i_yt1CUOX ł!~[9B?d^OeX\\ jG g.RUq &O ߮1uoۜT,h]]c^UM9+I ʵ EՊ$td2!yOa(M E֊Xlu]gYYb?P&ʌAXS7'""uE߶e>߳CCQU~G;Ó ƦZ7D#UX-XNNN\5}fnI!dUBX>vAVcF+&ˍcg[Y90軖)6bu|5JH%r1 PzF9{TDX "bDlB朶T4Z㌜Ed\V I˷&f(}&Bn}p-z:I!֩1bGrA^aK'`Zzr /~ǘ|xaZ0)r~67&ۛ#ǯ8 JϤ;E ;h s~**@wqB)al-Xﳾ@€1y;ʨ) 8 PɄtJ$?+$x@H:{ťpU5մ*vNM0 'O3wO߭i.ꠦj4(-ү=]bĺ U;]l6KKl@*g$s#1}r6!2e/H* :l>gg}247nP"%{o/s||>u]cᕗ_f(3R2Y@C!Ri2?|59,6e/-hwba$\Ys>BĥkL 7,TFv)n2{qXiZ(RRX,D] J#FmTtՄ(L3bL B| kpנE:S}"JĺX^ !dŃW(m1>atJ8p{rמ(њ0@s/Ia%IuXU΍C&ۯ@ Vy9s]qTGD cp}r(t,ucg2od@CNɫq"YhVvSO4RF/&JBBD[DK)"ƀ.Jc*jCe\n@DmUԓ9cFBUJNL{*~*a@P7kՒЮQIuBJ+9U s\VK>`%uKD%!bqNY.HmV킪!p~r57ow[wH.MbʀHQ*N]%Ac-Q"Z6SDkR? 0l !`!Ŭޓb@heP1>=eX-Q$N5׮ 9qB$N|ߒR"}Ͳ*Eb/H 3!eke qc+tв:;O vwE$$2RftG&̸1n~CQ9HcKأPZW-#!RS5dCn~/ǹ~:JCo~o>C'Zo`EWc2b~s[oҖUz,A9~'v=1`Dc"цH1alV$h)&MIM1bLuXdȃR@]À|?FC, dᔕ$h(g{$IҔ{ko# PB)@!! D$*ĐBE qp30w;gڔO:fUw㞙S=3岲2`3ҒD`BFWdmq6J6uG8oqQmjRCQp2IѴ-ȴ"S m麆<7(: brV)9$9: K6 1*Dbxo)';rJKMyl=֢( Akݵ"uR E")[;)sfNÒZtj>%FY(B_3އj˔#=WEA!$P1eE 988H3C*2 ZKH$0^m:Py1a=]׵()Z"| Βi3 mQ:G10>[{.>EpȤ.JŶ-H!t,}B =}̝{Ȧt(xp6.:fgMKuŀw5|Ht2CeԥDbݗHЁ2D@ }fi lIc*Q) mu1b0 DG2Dl| #ڦ6;Bb&9G4]MP9d2mq-ζ mrc|]̟?g~_mPJQPJgepĶ%b{žRW H>).ɁmU"hg55\'s^R"m3!!7WVl fRF)H)~W_uCt6HW]%ww]yul?+D! 3vԵ EQ❥j\3N٬WtCQR9]q6dkj(m|1͚iO&t]K '#"I۵d&c2m;pr7rxpij 8:ߦm+x~2)uljǦ Qr4*}|ȳ){(%X7`295>~w2IYdMh0-Ȳ}bbYd4#={Jf eY2Fqtkʓ'&1͆,8::d>?3آ + V%,2t1kR-u)岱KKq =2Lr9d0a9:釒.x8;; !j&{_S|g!>Cdےtѝccg:"e'y$!rW'HDC>umEe%aS"Ĥ&)Ȣb0a vDĈRd@ YmX⻖]Rϳ͚{GI5q)NJqk3,QYRuUCs>GY`zxd)>;xQh41mST>-f t] C aCTnmdz'hetBݵvY@6mGv,KZsÂH-Uuh2 RkblAO6;wxt#=e<*")#ۿ#xKS״6nsil˃[cn#)Z.ȳ1oqN2GdFQohMa\S&uKkj۪SO`JUq΢bvqVmpmɲ=] )9Pm*NJSV3@Z! 9!xB_:鈦iPZSWɒGXRXtxۖ^'R|| #)@NMQT x[#eI6Atn . 1Fx)>ʖ0zѮun韛BP' v9/ZK+ !\ݹ\UjR}ng{j^$e߄J2羺O$cĥ3#^B -~#n갹bx) +:BWkwyf!٠ɒN ;YxJ6!49胙s횞8 ӆHY  0)*Đ*GC$AEhm@iMt%_>J"MP%BR%cKNGkQ-(Vukɍ}RhJu?^|"q.}U&'ڮ{P"N;ZSd&lʅ! bDI\pR%˓waIu->ZbH#!T")PIvY|Ty(J ۥznP >$hRc}G1b&rHR8R)'GHBR"eqzJ=_b"ppV IDATb"ih9;hY,"уB1NiNN*UCڎ)6Џw)%R@ed|0%+rT ֶ Ɣ1sE}V[` b@g4,NNf3(E[ K'fbpv~)5j!ohW zM=Y)#рPfWWxo ouc=c=^ I/7] /6z6p߫@?UşDt_Li!+su.\%y^$o^R3A |EAOSQ}Q|qpy}u6@BD!MF "1viNFh#BTF͆dBu19ϟ?'xh4JdFL-rmڠO@GEYDZi[V5r2u1UUӶ%]#dRb&òhEvvvA1&כjӐFGȣ[ $K.I~rD[5ʀC{69Ōrey2|İNJg8̐YRؔƷ-B)C9hc8c\[#b@HE o =yT|@1,g3s<+߶4M"R:>+z$3u$nlz`3@ Uk͆ɌtPn64%vf4.L9qHDgp| !$ya!'3BS$ N#}(Ϩ3\UIi[i0w{$Okjk+_!^&3nj!H ]lfͯYM*^)=>6x9|pF EQ"H)rh4i[5eiMJd+ dr>s!1F{ƓeQp1; 0 H<0 WdJr|0328t6TlSOOh|[SIB0G#~ps&e9`X]2a<=yc:ON |1]Sᝣ,a7}ٳcRNvWH!α^/dYF]U@{A3}[4);7l!"&3yж5!t=D0*)DVEl6GEgL'Ô1Ե:<`:Y7^k1^k | HOUW`hJCeQ6u*'LIp"lݠWq)ti.)B1 '^8>`Hч%Y(AJ;#C$˲-UQDE!ɦ)qezF1Pd9! LQpW~'ϸX/qA18#hÏ6rƃV4IOA GR>.T~qD!(#j|w)i-|N5pMCsdg l!mR[_3}#kO</xvRfCސGz6Utr, J㝣DQhe(`=c=ؓ@?Iě8On&[ⵧߔtUu1c" t_TqCg\Kl9Ǯ&+/׫6 viYI'f ~kBzkP64V|1TCdSՄ /ry,aMդg)6P7-ĈG!DMj9[P-UPmbAtc#dS AQ7-R 3яɋn[0m͆:F6%mqm|NW_ IMg!D9K۵% u]IUR#e$r~zJ[W#C "òʲk2!D쭧k;k 4mW(vNħ^VMjAP-릵 @$[OyM_uui9R)FNDOӶ_sM}@$E$@;!}a#@96IEʬj;<Xf(!@k  U,Gxg+TђMP=۬ /Hj ],E@VO]Aշ|<ͯC#upK_ͻ<{#ON8|>d1?-nݢ,D!hg ed9So}vSc'9pI$sxK&}i Zi@OV kaNU-ڀSs1 bQ 2YMgk,#CxJn2֫% XZa41Xf .e]@ca βY,g;(c=cόS*!DHE.l-4u@ F>V@$P2C( BԜeZ%NK'>)QR"e$:ߗrxKa2SbEk-r}X4"'H4c S{"bܞ~#n+ rn99:7B?:z%OBu23P=Y>6#-e(~_?cD[>'elyD6k"9燀Ba%*3DR&YBD**rш,{5U2HҊbHˇC۴n*ٮW2Ee lNp]:&@z1N*2S:K|Fw?A{_`=~nYU#MϛEYUdM*-r}O_zf{;ٿ¥g]#WB\Yv|iH bj{B}R"TMxΈA%! 87!RcXܒ?1!BGI '"9}1D":RF X D؍*ǐY e[}=qOAB"΂LUEfܠ}ߴeµm ه_F5D̟<1{AƘ~_~R R\T;]"dRudAcDD߻8ud_ [קF0)|m`BCة_WĦ,҈BDZ|2@tƄTH!="Hh!NY/mב9YFf9Zkp.@-bk B73X)5Z)|/T& quOOΟ hcnFG'Olǀ`~xC">d=ƀh%B#$QR!-oD Itf259QR`C@ vW$}//zkGL9nrb# 3B FL!U_ߵel6C){nÇ$/J<}{9e2zˉdEỹȋF5uU%EtJV(Fc gшsf2g9?}~IC"eODE"R{7Ib`xƈI D 9 H˭bL ! jƽO,KY RI6,ARm9mpqwxתǴ !Z#2Lk krDnHIjf1Vkh;b 8+B`m_. OjpIa !윳 )=~ƶ|@J'oE"BbTlfs򼀢dptr1?{{|!I#|RNEʚO5/nau^ x)|zLiEIQ|,s2H*!m4gv1cS]Ge{ z| >#D m$Ʉ(ؾMo\F|^/xCR"$Bz@^Q *ADψy61nZ*D}4JdL(-,Cn߻`;ڶ;I "fRvNZFQL|5]ILk=RDHI\osX)II#JZ3Bҵ-ZDc}@iM^xAFR n!§q!w!y),"DX"oa{#3Bh"CL6Y>\)!S6YT.)lIM.ASZ+  }E{{.ؓ@?1lU7/LrBk?]\,d[l\'y7!^Rٴ>}= 9y^]>|xBQ GCضA:f3Lۖ`Z RWk~_'7drģ'WZ&Y/,#2VY!_/yY$VTZI%Hh0hg'ܽ}Y$( R>6ܻi]jAʋò[':L'yϪ&W _T qo«ٗI\/-SΌRI[O\ɁCy<%;S҉lcyK(ފCɢu&ŵDTH ε=> HBp1_H* 2~E4$2)BH\V)GI!ЉRJmd;xgw*j1Zk|M%LͺmK.eIr6K)/[;s|ۑJ{ bRDJ㴧}% t:CY:9T-%AgD aĞ?7|C5=GD!z~ߧ:sRV%%9pc|[#ͣ Ef\Idpttx<ꯐޡb!oNNPSrBp;oq81H!)ʂ"گ}k;9ɇt-m] a b1( {|HDrk2e5^FZxZ+ݽ/%7ɻ|wܻw?aQ`Rԃvu|Gr8RIY4pnO|~Z3>G::bX_O{K_}ŜϾo}JeDpm猇1r#ik8/%FH5ܽwHk ] "J ]PɈ` Hzc=c=>+$WJBO>sk@{ټӀRwyt]) dckZeHk}q!е-) #f-lת{"(I7@{M6l"\WJ A޹!F iy)JhKŘtJ>6:Rqͦcz_"޻DX&JRDܨ1=|+q,ܩ$Pn|L$bH 1FbE(tFtIczpWJU9sRzsLsPTQzjwu14 y}XOHׄt~* S9/5'IU1'BC-CBdłX ccP!t-'!Z.x䄺i٬6>;ϖK늓+>zEQXQdX=kֳ9&.&g'TdܰZS L'S> ͆>/ IDATRk6UųsVUp "8V2s GC5U Ҁss%U O\n m%Kkɋ [Zkil)"֫%>Ɣ,5uq~>nBtz~A͆1G_̰cUX8;p2D{b]՚o K%3f0ӵuͣGIEش-l5V\hZf>3/ CG|6윶k!zۊf}DS+[SaB.L{{_Ÿܛ|m+?[)u&UTW_ ~1'kYA+dELH!M:!eb1bA*v&ׂT-IxdnjPcɟ:UVo'LR$d@Oun4I]"v*<'ļ"D2eKM?)G7>:on`o=z($>B2ei`ZsvhuqcHjqgWJHdzT1lhZ%PH1+!&¶W=1^ %{M3z]RՅdyZ%ZR}9#Jvm|}__^'AK%bĮAlmL,~ʪ`ĥ],lJʭJ}qj뉪ȟ3L~%DdQg\3REɍF jנ&n;A$ )_-FIe' AYPEI@d);EʔsGg9?FE (! -;ˠP"zN ˜c|"RI'kږ 3,yb,b19K߭JX@0lc# TSHq1ZFHƠİB#V|>T m4mO_R6$Mx|A$K ].}v o|mwnGB9kwꚮm׾~Roe4MCeH)Xk/ x1MS1e&G*}5R)ÂwSb-h׿ϭк~m 1&d[mK (v*bWArdϋW3vOr{([Iᯗa1(ROGEN,7Kq^ GXSr P#N0k*H=:_:\! Hd\s <'By0kIJH%љ&2,JO`vc,Y$)1UÇW >%y)/faf D0}̜ڡ)Rp+1Cy4eiqZFߧ97GE3@0i4j`llnp4@HZ`v;w0ZR-̷hi6#vvh\<=?ϥt&BܹC4M|;w6*P,/-4 |y!Bsy9{ ^=~8'MSFY*;MSd0ns]8::XY]۬q-Z6+wۥ͕e0{Xkk7dssV /i?Fnu)+BIpR+ʬPyȫIP:P" C\Jo)V!UY psY~vDVPqQvt4! q kKDa^|]sML9diqkˀ`ok>/~,K㐻s}^ q@{.ATqo$|R Pϩ%q= 30 3<@*!?LqzxpETL(0=͡$y0^3i6}E.gZյy3lRըjd{{Zs5&yv;q(h6t]:z8B0PYk-a)GCRJ_6 Pql69s fN/%/^lE)řM^S( &q\ŋH)X[_gaaq(TM֢^eV(Qm\I(oPÀ9:FvE9"hZu! N]b)('QR`G~w9?Hc&2Ǔ9=M4"[HAHZlnnpcoŨ(“"Fg^TIBtv~R#*'}K`SX=SP!rU #@x)dAXA5VW#ӆo};|7|0F-biip@ЦlQ\ciidP]U(ϾS/e Q}V|FNTϐ鐵et GÀf68XÙ3H!5h\rsnPo4x^|!,ׯ]gn zeQ@դѨT5K gyϐ$ #';{c{]W.^DaH%4 679aqp /%#z]/r-Z/^`ywVřׯ]G I٠=WRq21'Dk_2@L; ,Zr-j&R DdqM(;f57Y/esyp=d?sfaf_%H9IIyם5ILs#V9w2n.W' #1=wdJ7pSڜ V˓Vd+$"llSn9-B++dYN.L_8W?RSN)2.#3H! Àzs?,//O:ZK/yDzW_}a#ǂ _2t8y'S*qK/\K q̫aAѓ˜*I,kG9keqy釟?@6>p8f9)6M\*wq{[[Zs(f%5!IwtDբ~p[0 8>!YD1R9[xAa$" vz b.t4M#Ncz=>bmmZ@p]oiyОosUZo`yi7oꫯ& CYY]CbeeoT,3h3W9֟[ﺶFNݦ3E* u4ebJ T,಑/?OOsb0FDQGkW)O(F}l`HH郓/B0 /yJ \X\k֫Z|--Y6yv叻M_ m,AI֫y&º*i=+uAYU}HfJoX^-) Csuג[k-hOʼ50bi)%Msz>>|֘wq5g1dZ!q\j+ߧ3 \ഔ\| 8<y%^&Ph!pϹ:|G\dcueZh}l1k r.mW>"KY}" !i6\^DŽa=}.?uՕEB;q[,-.2jRװ7nޢO IDAT_`$cYΝ;y&/E.?1CG#0@1gQmTW_0 30 3@NW"k/7.Coײᰏe\<#Sm#yT YVyp g6en4UL* C(LH!DQDVV8*,# Ie ՛uVQ>+n-뜖uq{e9>>" CaYTTDK=Il6]El6Z܋,8DZ^5XLޠhGdSA>r v, €zư/mv*-K:\nV⎓UK(Aj0 Aiԧxe~5uFhc * )oO)lgmQs*0Sc u7r&nhnLGWIzD$:sdE$ﳿZ{>TJ)u:]f'([>}BG!D߻֬56+@j|P7G2Nq.H=ǹUOک]e-=}=Wh5k#v,/sfs3g /"s91?sq`a~ls9Bܼu7XXXG,..pEjq\5~m>#:!`4rttD@gեΝ ;wﱱ˗HB\cu29Kn""4԰=\Z^"$g<567V}Csus#QV!vmk,,ek5m3W988$CdݻwX_gem?>{GSk0^ȉLxBW<:6 30 3lbF}8fOX___2V)_BϾ4);򝵚TiS9%ĴlRVzC'A9sLi$*AЕfz:QDUiQTxyl,}~(!h),:s'?~c!IqI2SVu'$/u} ֚֕۸l%DCSkk]3!$BJ$+ER0$MSW Ð8]o[I -ӤrILFOr0t $>u2=(Fs]PncKzOS纨tƓ e|HI CNJmQXZSTԛ5;| ^KR!ȣ3օK)$ʌ*J2X(}80SI8GA3WI!kq=So4֕wjlW7 ΜB)H2LRRhVO#Q֣'E OLL;rJQB("m%:7ff3 K"RJA+=)`I32ӨEg cZS9Ԃ"o*92QJ"$YF`# X8MT E=E^ 8m-%r t Ć 1zwD~|ܨm4D``%YH0:RjP #rMDqDHThɻ `e;)!IpQ"AZ UA Gynȵ!0%RIؘCZ KY{R֮j޾)>+%;e]30 3a =OR C曶n't:2 8F8: w-J#%؃@l6ybpJvvvِV֘O )iK KKK|Gloo3??? ~憎Y3O?2x5M{2 X__G)A077G%2&i(*7nY^^f<e̵Z?w {.^fzdY\ usZx8M\xׯce8btN5R^xE.{dYFq̕Wz%u\#j5ǩNoV{_]* U1rXA.:L, Uઃy^'*oŲ9QtťיWRr'-/qrZ#gTn?[BUSU iO{eNAJUJUBrƙk#Gađ^kqTTU\%1w 0 30 Of$'btZc%>>NϢߣhreΜ9õkhXkyWunKU0nիW988 3P .fpDcwnaggZSO=7}9>cv\t1<`iih [[Ǯx<.;Q9op677un .GqE988IxLF#ih9>>Ѩjv:!ZsIB$OX׾RT ,YYW%zu:U^$ҬGþ+{s4RᰴUa wԫgt V>Y(Ҋc3!#+EG5 UT5̴qb^gue`Ln%FTܺ{=~}XK~˻߿ѰB/H\P ֗/)p ii5 +. Ew׎HE$XD$SPV< d0 30 ?@šyL8 r& BZyWEH_Ej68+&CTZMPg}L"67=J+f)%ZDN.Ƹ)UE5\}*4 8s,E0rdumzNjK)KMZK,..* Nx[~~<etѯcJq!|g)Vھ*lr>o ֫PĄ4Y/ *bB1rBa cJƅ&)~O.vfswG }Z6.^Lks$F$4uI YX\dg`>`4Qo48"wnegd>C,'ds %$Y,CecqJIYm.WJ!xԕI "Bp`bCg%c10BHA6;"(ןfaf4/Ö{*kRDCgԨ: @NZ:jeZC~@\*.^"՗ )/B{!OĞ0&LB:.S uhg\U_VK6NX.Nye'fyi( ')H!G!fzLLfipDsIƌFC\ c!0hJFh, 4˩8n| 1ljQa6 30 O f$'A8i8MTsݣ<Щ.N("{rYUG~ЏRM1xmHֈ+| 1 -?SM4Eg:beLFzmeSbvhz498rrXFR葵`&|30ç"wՠu6/%}(VH`M޲:VR^S!ʞ}S'\?BLnJn HwdMEGIoAdbs &Y<,CX%S$6rPث|fIPTeX]kmlS3Ul^Zk)ٷu=zo:ZDI}0*+ycxhs$Ą'T9&"~q8 30 3`F}8Uu!W :Ɉh0 Ey5cd.~ou2Red0U"aZ$IQX&,o–U~ @oayVGo}X2mBD؂G%gy>&D# ˔#8Bb(x&Zl2!f'-)OQAeDR ݷvAe=k ȫ|-m*}'a%CT}U>%qUNǓo~LD0 IDAT]M`lvzFȍ"y&ZL^gyyz*aJ,ݻcz?{M^{5vw&r_p;ǜ?!i`gM@ǬQ[ƣ7>OV<#InݺEE4׿N* 5g4ڬ.}.s6Z $q:ǝchkaDs->C\oA9|:"~ypf k'!I[+DTpDV K;hC՚JRƭU1WJ'sZGT,T^cibu[k0_-K j*joQ*rS T?!#*Q"P(uAԖ҂WYpe6b穖zN'*"NL?y̦9HogKTԻ`$ϑuJI677z*t/AVQBd4y˖!StNFx`'MSݮc(- #d{{4Mt;()0P7X[_矧^M_ui Bi6˫+z}<$K1!$6_wQ wQU$0 h@ "FGёG@ >q+*83g *sD2hQAddKNUu%՝-$i]*"FZZF"}Y.7h NPSXe$$@d9 P*| E`yo -K{p8 >0~$Q׀ZtѻH--Ep@r&jlYփCЃKł$hTHQ$[^h`㯹ߊzJ6-WQZ%3! HAdY+X xn궷yK捵kt/'Gyփ>RjM !K9UU!6]ڇ?b@%=gu֩/--E^bȐ!8|03!ty9ڤ"11iiڵ3NFqI:t$I~Y+(sN8t|^/EӦM!ڇ3g~Fbb"22vt(']L}(HJtm۶~^defܹܹ3N< Y&))8ڵkgB}p8n\.u,"ڵkUUѱ*IE6mP]]D-#Je*p9?3DAt\~BfVT2?э":u m "S .^?UAB0iQ &8jWȊVXJZU˼U'HtA`jٙe@ҺojΗ}>-P%8rA$(_yQɨ_ҲmT@t8g>/T^ԂQNիBP}e"A2TAҺ ZHPu3TE"?.^Z!8 h݄ Z (eKU/mmJtƻE B g |edMQoEJn߿jf5OQ\jp۵o*)ڼ.#Z-OxFq,aɾ*^w ~Ӣ)7XT_L+,APq"vڅGG0`].}9L57?YRX7 >k Fo)Ek>ԣ惮 ~k`5JE{m^G(ȖD1:)Ͱ]FQS,imRjk=q#9RHpչ- eʕ_Xp!&iGUU|>\.Wp[EEE(--ERRGyݺuÚ5ka9riii9r$~aGIIg̘)Smo[B^^z!tԩ &Σ/K +_[yI\*$2TH NcUV>]8 K&,/@놦/PQ +!DU0U(zR"3H@OePܕDIԼQSUTe(=$dvQ%JZP\PUmd1,P %@rh_ȲUQ :ERxCmS;)UAr_)U!ELMQ( z lds=7I>xʲ UFSUц ETEBCq`8V3cRUۇ z;粎ZQjKCٰa?ov̟?G?`;IJe I @kwŋq/^`Aa̘1~àA¶vcXd ?}ׯǤIcǎ;IIIٳ'z쉤wq;p/$U&H :$(*Se>/|UP-a%i@ԊC;t&"DHHN$I !?RU~|z*Z(55~|t_5(^|P<m*UEkP<>BP@*U1>)*{PdBt#Ђo x VUBv简R Zwd=0o5WDsD4aU~YQ` #w >jՀq6 uճ+> e>jOVcFMEQk} 7U@%He{a[GY *lFmDQ4Őem0`֭[. :u*ۇn@1j(ڱw}s﷽ǏcƍoۇѣGc޼yp:PUK.Ųe˰`{p:?zE˗/ofh}rs1X a`( *I$|Zab> dY]KS!- "Y ĄD8SR9^rCPͶz横*f$Z-#cG]J%AU޳?BʊLjk@+| -z,c.UQ׹1+buQS޿E`?Ъ^tZ`w" I^G;U~.uu fͤ3EQgF]NW!"" P$(ސQCXJ!6ղ=}J |Ăo{ H]HHiƍ8<6mڄo2n/Ɩ-[[n+Wĉ1m4@ee%^uĬYбcGsGFrr2x0n8L>H۶mþ}ew}7Ν;[raҤI;vHٍ7ވ;;vK/e˖a(//Gff& t<p:X~=-b _OF1}t >lc3{V+" HHItCD$g7<နW@>` >_Ĵt@KF7*#qRջ_AՇע2QjrAѺ)BE@Q!%ׂ_M% -zIWTUTͬQ`FQ2z ` *EѻZ!g=p,jq)0  j,=CGP.]>ߒ=QJ:y񟺍5a-"""j*# AJp G[Yf;֑ì~M,`cL>>3kgPo;/X}A> !֍20n_,/y`Rk ~gV<mܸ)))4hY (Ks=Bdee[nx7PYYܹsf#GDII fϞW7oF.]p9,[/@a1uԠm.))… 1a8p3f0'VnHIIAUWW?7 @+oEyy򥥥z+Vk__=ȑ#+V`Ϟ=8p ʰ`Gu>#,]IIIEbb"n݊]`ժUfO4q…Xd Z8pf®] {#}r/Y- J7jVkGdmXsPe?E\Uus2kD` !=U/E3pH "DQ˭1 VF"d |YU*A֊R EV*ۚj}SDj]qhþCѲ{F CM.EBVCQ#3#Sг$I҂l ]\U ѻC֣zZ x=ӌM쓡hj1Z^F\f5'!QJ>U}"Fخ>q*UoLjŮ+JX;Vf1gXN z02x,m hz캦Y28C}.m~g9ԪadW"(9.HrQ:tG!"O@;v 7oFvv6/_Á9s`ӦMv̛7k֬ȑ#:gK,Ʊ'0~xH_77r5_DD6ZIllI>X %$m qF3DQ_*3%??5f Џ?/1tP}\p|av۷/ܹsQ?C^[o?LL86֬Y?~_l׮-xb̙3.h.] !A+Pod =z@,11V@f߾}Xz5vލ .@UU?޶]PC5GƋ/Ç-7Ѓ!zOe5uqZ$XJPz;J)B, Ty,hc uh{uA(9!9RLDBb9rGA}v>3Z)ضm<={գG###ݺu3ьe.^h;V&ؿ?{1TUUaΜ9PVk׮u]}(**5ro vdرcrss1l0sziiy,_~%W/NG]ٮ]PUUÇ#??c,Z#GĔ)S"EEE?>zl=zG(q1`EOn/oO<f̘Ioc޽HJJ*s/K}ZĊ+0i$dggcEwy'VZ+o4塤:u«jԩ91e8D޽qM7Eu q]wvc۶m۷/.]W^CU;DiB|uѲhym'"""փA((..u]y!-- a:ܹOY8/5!<3HOO(xǰc1DbڴiHMMߎ'O ;vlŕ㫯? YYYzm[E,_<$"""fAɲe˖!%%>Њ+~z>}ݻw1|pSO="̙3}7_Ũ1k,̕!""cx^9sz+뇥KS^y5 =z4QTTǃqa8Ԋ\.dffB$\vegbٲeؾ};ˑ*--Eee% ddd]n…Xd Z8pf®]G66lM[oִ.]`ܹXf z#Ggφ(v~(?6lQebҥ Ν;e˖a֭O[QQ6n܈)SSN5%&&b֭ڵ+ ( VZU+cᣏ>ҥK\ssp1\{8q,Xbs~$KO<~NwމQF!99/|s8{,.]wM'VX={`(++~j]򐔔{/?ȑ#&5(Caa!Э[7AQc&P;!@eeex7|xj* 8cƌݻfL6 }5ovAl۶ \s ^~e@UU6mڄǏ*]ڶo{=a̙3իWt7Ē%K_cĈO /?ĨQЩS'\.'NQRR~o%K`[oA$|GxvZ92d^޾};|>Gy-Cbb".]Ko#"'X\ O0o} -- }~_ge-f4.] !!@ujZ|X--Á 6`ѢE2fYH1csxDDDD ݻCE8pG-l˲lN ~u"2d|IyٸtR̙3/"&LcǎÆ 3[Np\.x]~-ɓ9s&1w\nn$RUUpSmmV{g?7nĦMl2\y啵k u'׷rjAa0l0~o~S+!M?@D-""""PRRƏEQ0o<͗e mٲPRRUUCaӣG###ݺu3N3P$IC=ӟEQ$fۣ^"ᓕصk0|p]/# L}yf8NرcQ|Am;v"|r8N={۶m{`VXX׋ݻw]ʤIgƝ8q"S0~;#%%B?{=a0`lA0iҤZ۷'DѵkWn8ppw-7߿?ك)SW^DDDD|0( )))X|9y\qf-뮻vm6K. Z9'x3f̀$Ixw^$%%AUՈ"f̘x7vÉ' 2y晨L1ק~:]w1e8D޽qM7Eqơk׮غu+:uꄗ_~ 0zz'|~(b֬Y~](É#J"""s`*"""5(>?п>|;vСCM#"""1DDDDa ֭CVV̜9EDDDDQ`M """""""juXZ$Z' TVT9%V$Iәd\) ֐j=Qƚ@uT6X'IޖΩjk MkZX@upϨ$egm Duj=QӒjx=^â:cGe~;Kq-O?E'/wddd_{ 5q+,W_Ë ^BImCDDD1(Bo|}_o{ѣGvۭͣuZ'777h,ūX_;~ _!CknUWnq{G6xCp O  64dx5_St^bbΝ;C$:u GvG v~]u6kgƌ1jHHdSee8u _6ŃƸnN8^2__~y/++qN""""PAS9,-?ݻ1p@Oh߾::uiQShkĘ_ nQSi}O:gg."""";XY1d\vY[Yߛ$D4|>6mƢE5dSF}+ѭkW<AF#%œvxPs kZr4^ "n@vw8뺓Yp:khH$!=-f)^35{"""j|>ͫ.ݶx j>" X)eee;;w<> t• TVT7؇sIt&"95ƵkZzCDDDEYYNX>`g\i i}=+V3τ7Bs"!"""+VlAA"֔.c72Aan0c0I8,?SϞ=;7%%K.mv> h#ɖ2j2 ,+H&TfP$A?:X}G ˪M%""""""HT>^ $Ba +m^ A^#3l 7|sk߾}pڻws 2[k 22}^uZơ4X(2EW4h7x+I?~|AD, CVS"=yF ,}+0gYwk65{}.''g55.`}G 4iIjDz8tvցk_A0xD'6QtR++h]D솉AzH@M](pP`uiB2ֺ@FK x8,$H;wn|pXvv>Gp DDDDDDDʽ^SNV2cxQ豎fv5_[ JUO!(TƏ5'0pI6,Ӂ2@幵ŧ`=֠P`';W, LSlmP<a=v@ &cԲ`,j+Q€#YY_[Y3|eFXY2v#zXe +؈`ٵIG3k&PuY@LW,ύl ƠQ( tEAXS&Pru \:-TPyDDDDDDDBe Y@,Wg T"ݶ]z@4k߁ f?kgw@ Q23m]בdN %dL .@Q| ׍+T xVP{mQ@RcD.a֬fnDDDDDDDTkۍ NGsPōpil`; II{aDR:pP;Y3d\l`Cf 6߮=DDDDDDD_y>A7  (ẋn\kQXt E+\Yh дQ| ֭ > hnN3@O.^""""""""c<$'ܼH zm P44d7/Z?v۱+ĠXC춡Y&TH="  ݲu YIşh3uBukPDS24F (}oZH I'ܶmh иhQl {t.4}>Ai,=DDDDDDDSPB2N No0`W _`AhXBM1܂@$S.dƼx8WDDDDDDDT[l`# "Tc*^ YEL4g"""""""H("Y.R8M>T<0"v<Qm 6ZTF]`ux;7DDDDDDDp얷{jlI[EOu\&ڠu=H>\<62d]6瑈%e0>B'nk>˺e 5l|0 U uQpt ^{9""""""""M,/F\@Ns8wDDDDDDD-QCZ!ԠS #VmmNLDDDDDDD 'VA[@#zQ}zf9Bص]Ms~4dۛy!"""""" 4%;Z"""""""jI3 ,?Ԉ65l6E*ZQjCKc#""""""b?V!PE -@ڎBkсiODDD _7IDATDDDڴO A|,6A<7{`p#xNb"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""j?&zU/IENDB`ticketbooth-1.1.1/data/appstream/2.png000066400000000000000000014231441475632104500176250ustar00rootroot00000000000000PNG  IHDR> sBIT|dtEXtSoftwaregnome-screenshot>.tEXtCreation TimeThu 21 Sep 2023 04:15:31 PM CEST> IDATx{-]]ݽ>\IÌ$F=0 2bb)`` "SvˤxACU)R 5@H3s?WѽW:^~ٽ~[B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B! qh.!,SB!B!dL`ˉB!B74@F!B!rq=z !B!ƕ5 ]5#U/!B!B2F` y$B!BH< t $9oB!Bt %-?B!B9, tY&su"B!B.s4QA\C>pʋB!BL8s A٨KŎB!B!dwH`s!Aб $B!B|(w B.h*}C!B!\]0dU6!B!Bvc4~3s1:5eG!B!\FB.C 3Sfm !c~C?]tB!B?}KB 4Ơl܈13@!B! =w]T9b 5#B!B<3b s4n5 5Lic9B!B!!F1Fz읹/n:;ߕʊB!B!cj 4C coB :.CN򰹕!B!Bژ{.b cPPOgPSB!B!~+\0B<~i4!B!rx|Cti As0`{"B!BK.+g칔960C]@B!BX pf+LW4=D!B!y2ƫ'$ҹP o XoIXײ$B!B!잡g9Waޕ8# (8̸q K!B!c.򅕞4\{ʰ1:v~04B!B!\2ؔ=a\~4w#P21㊓tċ$B!B!~Fog!(v'P1ko˳w^zLC~B!B!D߻ϧtW l8^ Asz>@f>iqB!B!õi~N6A>9gOFѮ8`߆|FХ^zXOB!B!D7uM.]q,249{LmRƟԈX?*.@B!Bȼ)5l[2zwtOu,ҽf@C^mtXX8ogEe)=pv$/͋c!Gu$ݕiw Zۯ R۩&)",TCXDP#bEoP+ewFA.{? ei]}dr_?Pja'&>' 쐾g ;y𺟫}en |G i=W&`1)W;%DrW]XJp4 g>ihZ1, H?gzo t/ {ʲD)%` h<4:D(V7q@ 04h|Z@fc 0F ̻O>%ˈF&>FP0ޔ)HHs?peaoe!\|07#iϻ@e`.3_.GDQKnN#p@T[:ʠȌI#Fm|<2\:T4ijtB#rHIν 2hJuo9.bdI+6R~'~ͦ`"2 yE#jþ`a<2MjbkLb:"yxVg`ULӷ͎15Af0M2ueY(׎w>>g22f o}?ӏ_9C !p&{IWBUc~X=gephW&RJEe#N*gS0 >`/^ /4蕪 ~ҋ>š 9E̪{_$1BynM< >9޴¡+C wR AR21ڧǏɇ|4ǙfiWmGY,-72FLشa  zyDm#b !MC7j͈8, Rۅ?#TwY{Y&FW6ޡ1'4y{0 CN8R@뿮^h a4ƸNG }kO=.%a^P\qf;*lLU}I'ޕ1?*/JzB!zIMxL^D`Ӯb_u=wƚZeǴH)Q%>?a, hLۂ^c`F ¸{c}-yn?޺x"BȅƭYxNvYeוaVQ%Pox?@vcl LDŭ**O{o|Iܺ[oٓG|YKp)v]hv~F QRJT6 ;`doUp}ɭ9tW&CeX5@.oե/+0(rGp7dMzNBu-חHOߖZpK[ [v(+ !VKx|l2w`5mskq5caF ko݊d \O'!r!O*}}LM_J׼"ЧBq12B3kޗF7Lv p8e2RJO@{aeѳbg5#PL[YFH7eCB@:v=zz 0aԏ&B;ƙ^?ChZ;1d"U>Ah׭Z?Hskh"kI^[vҙ01W#":՜'JAtBÙ5mc`cTshh!% acxbnB<$SyaJw=?x@oiCHZ9v_?ՋY^jNOmig)^lpr|rРNCv vأo3n׹YNnjiCpvv3g<;=EY8::TV`zҘ3C||cZ#<!}xM}r_Ǩ0yo*ROQRgC-z`{5G}8އ uDd=oCg&=fFeiW"V2wMp||WZiJ!!1v8oJ=~̂Å;Gŭ/Uzo7`F_lCV*í4nF3$Ij\68Z%{p0ҡ@C;_}wbXo=uTBe뉳9^p}cd0̜ut}izĤCgll=t aj Ɩn XOM!ݾbܘvK,Kܭ]==EeAWİ]. zowsx۾O?^/WBczog?96sވG}x|OO_孴~oc[vfs~]~s~oG5|,U~7?g7s_[q~v~wLq.ˑ:N^YC@<|~ٰn[gg%`2ONNbD1C#KYrxۿ O?^toWZ%B4HLp'Ƈto Mv`ÊW-z>\[Mܻ{[R}P{5)7~G7q|| ꣱X.ΠϾ|<>_ïm=KY!M/b:&9.{h~MM2lFjL.惵%4 c֏s B[Ҧ{XS)v$Jh&i'U9e XprXo6(ˮtb,1C{w[E?/7#B!W_1 9 =gnW8v /~GuB'~xk i~W~=Z|~nܺv\ޫj?}__ᡇ_ f d^2<B)kf Ŕ]^rеNc!fC[Gh_gb^t7׾mGB{z^=ïï|6_w~n-!{$z$07xvh_cՀt䀟- @CN~[LVJiJ 22poDIc7ũIRռś0?m5# osW?r6ۭsLmOv?>Տ?emw,'jX?WaX!6 >!)sH#=}x FJ 2'㧞;'{TU&eY͏"2տ%~VO9qɲi9#ghmHπ}Տ)BGvz,rKhl`FG&M4YVl nkez9kY1Vo;GiGk36iDZ'-ǩVVNͲ)]^}|Si;Rc;7Zy9۠qڎR]Mԭ96Ҕ@5nfe| )E.p> ?[(ܹ;w;({r5⁗ [MB!_:<_>~|gx/[mHY6g? 8>/~$COpO?˿"lLi#0{>e1*8#6Ӷ>}›߅'׷oW/ _f+<.\MMB8x+w^%\> W9ژZZ[{]H)WW>Ž{w ~a'W>-ݮ]^4q1w)X봝4MXlY!Ri:GE1 xrf9kp]'K!\%y6^^_û~4,W7/w7'~?bDx?ޏ}{=,_Iٟ_,R3iL-}î~+6_sË/wi !;+WQf;(|I<z ƛ~e"C sr'ލ:C9~_wK?~?7sZ-BL'W?#O>0!ʆTfeS44 ͽ[ Ms1e0O,Mw~5P'~h8WFrzG/} y/})nYGͬ 6/ ̥aBH |W;x_#7#⭭c|ΟI:zH />EIq-|GEQ/D&!58}=9љwS7F%*, y\'7?}^+xer2wJzD'KV?~_8_\&OKbfw< ~JwY (RC;g|:гqM|~5~Y8:B!d r=>|}v߿|~yttN@p&brpM!Qx'J`#G !:x*ʾ7{f tTƟtPf^F<^|"ch{,! 5=}D[^{>a;:SKS{U5'yΧs|{=˻l ޛt|].GlM7Ґ <7a9zto=6Z[n#[gp7IRW9#'H}? @W8 !BdK߸j|NuƄ}ӗ0ٷS뛱)?ƈJ!cP }Ѧ/rDYJ@jrdξ?ĪKO B!!hg! W h$nN@h"2OqFv! ]F-7eaF0Wl͒T,]oU Mr777ޥ9[eCeCex9B gDخ^|KHй? ۺo9Q2ѪOi:5c@JGoӮ%&V]8Ƭ%v n^z T*weWUo}9FMA qyZv{V{OFg U=іsv}Z1s)Rmɶ`GF/K2a4Z*\,ptt$IڅѪ {k1CF B!B. &2c$ y(Ƹ+ f)4j?d4B7=o@&!pӏ`J+5dD}`{;t}-Xlvz$ғ'ړHXm,R"B‘+u0ڦS)vƯ^:06jE7XnzB=mʭ4KÛ.aGjS]zK|\\ ؉Ev;lZgt8Hb8Y,o `k+֖i\p{%9 }=]p\@ʐ&b#>'Ppb{qsM[r_2$] XtWdblR{ԢBWo]2fB6gGnwic^w9\6'v[DH]ǶtCoL8_e}q 2-̥Es@d (Wj|;r6=(7="<}f|ݯr z_r"eE`dclp/5UsÀ72b ^8=N!\뭉EȞ0KV|Z$j]v>&oη{1bSKW8T~]u^sUd_},0ZJ7+]?ccr&U>FxUZveq9_.#cx>u?T1MjI[65$_}֯Efݹqޛvlo}r>lϓVe۶}Cx,W0ԶlvӨjM6CsPÈ#i.#y?luGC#P'<1^a?TۢCьU߱`ԾZTulS`zy*n'f?P%l]~hp7=v'M.lߒRg4K+f0<ӓof[?h\pC+@!B!Bv=ie&dtz .{kKv֫J+vɅ Q};f]qbij(R1#DD^D0wE_ҫNVa|~{lm ̒6K*ݬ\9O[mrlv"E-*v',g-%Nݝ=Zㄞf`W!:IeTAN2:5u^]568pwtJB!zZ;Wӑ`ޡc=;cӝAB 7un(k:z9n\mF8 6Ġ-!Lgu+%dM*jfGk{tam<t@ +3f P4gP?x[g5qs7w:膮C6ı7n s1eVeS|Rn=b;%Ir%7C Zю`~UmdBB(#~S'R )~+SVXhe)T<uBf7SNr;ʰ`v!`}mزNOL#M7uԆcfddV9P9;⻵lۼn o s,Afe`4/ih2TCA B#!Bْ BfAD_ fmշ%;i.;-څٞ1fH=o=.W ȕ~7w`B{k!?.d2rWea/^WXoh18~L&y|]e#jSO9 3SAvs8M}cůiW[: 7xfуٴdw Z[hMy6)`t#u~t՛aM|.:dT!3z}Ryk,F!{ G`Ƃ0sigoڤ5<'D+C0/gP;ʨ.vvmuЯr6YûD!ŕO,B&Sc'V<ݹLVwaS7mї=C ,D>v1E$Ǯ3t޹u;9DZJQ1ȝ,^.gtC)`בvѯl BŠRtdsu)*r1;~czTmKuIϋsϾ5DԺ膄'79.[CƔ(FVHZmvO_кv D>bUBJ)ʘ@)yajv`ƪ]d:BDjϩ%vieqǵtu[o)F' ~x6!^)Z;^1gOVP}Oη\yhKk]-雋oӕz4۰=+7v(= [uw| I]lh{uXAʮ[mdj`RJ}ܜ:alK{¹d D!' JZmieþgBsg:0RAϱǶ'/}"xEDo 2Cà'!2'6G|Bȅcab '‰#F3]n[ӪޯE ;R}LR_M`}iǔ8iC#!u \lC7bA]>BwlI/REU:«-E%Fܓen-s!B G}LUI&,~䲰(s6#onISѷG8nmW.Ov\QHRJyLWPaz鿽3ʢĦ,QgE̐fRFnPFy2ijeyĬ LIXeO|tԍ@.ٺ)EQ4m(XRFbS76 Y-Gb%gX4c](ucD<}K,d^9@Z"61rI5lkeVZT%PY[cuϊ D>{ˋ&?4~iXQq V!㡖qԛbFž ) _}"۴-0XFfĀsj-"jhWq{iZr,) عdG3d GԽqK<؛>5Y Պnyz_EG簐tI8{qǏy' Qprr#7i=7|B&u,$HHH{(''XBHH'g7nU_jO,eѽYP8o k]CAB ,Ϡ$Ip|t!΁ G9+YӇAH!ӃLotR,+pg 6Hې"ERd(!BR!,Kl6QU~0i, #P~$u9^$ g @71ʘӛ+ ft bU>Q_}T{l7^OP/Еi@#%`N̿P^jb0U 1ɗ /#if"$"%p I@P/p3'#h!Hy(Y, WXÌ{P,{fLzqU9{)P&X.e,Q rHPʭiXJORtK{#jD~vG% q//9P6B#'>tR }YX$uWa Yvx_2yG D=](b AN2.:S-) 1 ^,}I >\+/K/-]ONˣĠ3e̔Sml_,%bEQ4F8a*9 TD)K\< RƽF/! @6,79 D[?Lp|-A)J!*OZGݐ#De$=2myR9sK/s~U_28,$kYE'zUOzezXߏZ1}Yl ->̌.qߋ_ŪӇV㵈A%."dCܞ%'Tp1:u9R0ڵTw bRauZ'\f_SY7ۗXY7&n:ºM+0GS#tYэ(B,KH)^!{#2D, ϟB'XV(5J~@YaXXHt||lۧkIXm AK #P.PfcfT,8mMM^yR^ccWK~-HR@fPQH EMqtDb7^uz 2 hziBBz\q>cD\n9_ L{ 'ls!Sͱ:9<; =>i[ 81 C^b[؝Dz ŐcՁF LO߼w44w8{g EH ݹ"/B(àc@#½OB!/cj['2ߠIղZ kl6HH$R&B}iVˣ THPE $9I2gNR2I O?d}rdBˑ$h_ $b6&6\B4mTv_>$-ztl g | mOAf+͟T=ݨy~""w l.#[*);fiJ "&kCB4IOT_jrd'/ euM! 8>^!ID]&dZ*STR{csyR0צďOmܭ5mA׫v $ Xf8+==ʢ,K@3XTT^AW̬='e)D)Z$(PهeE"(, $';*IdzYge)Π*F) T{vjsm!@Ufk,twGu6.GaC:..Am8^R|6zO RlD !(~3qSjպ?Dy=EC0yxk9Pq>nF8i\3?@Ǒ:r^9^?r۾aO˾ ա_-WP@O7Cl1!=4dR %Gɡ>}y֡z.v< 4]d1ͧ7/y[VuH)qED,\ 69\n65;bojzXhyVq&Ǿ؏z2<6eYkϪ+65Ɛz YKaJYg%_״ }m0/a,!' 7k]Cqv IXg I"2IL /׀Hvof4b<߮%s_^!E JGY/?iȾt0ńBHie[Fмnil!14TɲQ ieFۯvAlJ<=\ɵ#@է%ʃY}mL*SF}_2z[u#Z,/iCjj=q( T/Ztȷ7$AY9$)JY)7HylLw'P@e(3T9Y^f$ti WQj#QMV{3vn^2&ja{Gy%|mH?y>k`[GTLُR#39?S >%קYKוuUWͬ=7ѫfg+l׳x;r+~l{]CeDQ_R?b=!|? HJP>ipP&Qw߿uZF?VIRRB@V+@,wU~H:?$qyهn`(Y(zVk}q۠&k}rjZ,!6~42_̥'L1ؘS:?"v3$`_m-Bte7 tKG7RH)y3R1kRZƳ]ZHv7n\VX=((ʰɫ <ϱ\.')_ ]6FP9}w|>t,\ۚbA*&/PJ $IeX,J0uYg]>i՛lKDRVOܜǫc<ٳH%bM~ -*U[R{ n:k ՚q)!E,ͰjY")%RYe^mMLcM2=?vt?.E_Yy7vHV^Hk:1_J6 5,F D}iZGߓmcD,7qoB( 9G)TΨ),En7Tqֿ<,s$"EX."fS /J^*m7U:T7"A)De`(sޗ+MRR$)<)pt2ŦX+,ۍuì26 !#R$2AdDo,')pr|v"r7DDѰI2K!G![ AL] %vsXE#dLAv(}~ԄZ- ˲ f>\{\z>zDu'ECin-[!9_|niRopsۖ͝]cf_ܦYՌsf Msn犗.cs|aw8::rXCoSQʓA. 6sܺ~ׯ!MH"WS-86ΔyT@ MZ~ް@&@)em۾N/l,[眮f9?j-Ugs/~}FG"]'%JY{@ [,p@He}-jꂄ,sE1u,<-վQeQ"y#H֛s%J!Q@X,vgY e )ryu*q$$O$ɰ>YbBI8[VrAK$(qzHȄZ77,dUe$({^~m(3O!/ςdri{IszOܸCfE]f[o3FÑG.- = y\Fcd\EhV+yxr3, lM{u@YJ@ $@Qlp VX@an꫼xԒ˲O8qu}($E#, %p'P"] EʒX֛'G+D`]RE(e NVX.6D)Kܻ,?M˧D^9d˲KUeDHdID9OIURHʋyL/G O<2R͋-:Oaؗea7a6ԌLu-"kHZ$y)VT#f{MCx?A]4"|M81g3;-Nk=K5W;cVFE'<}c 1l# 8vl2b.F L$vLHm0҆> QDE&pNWX !!e)KHxF=;=M]{TLL%/6X5[g@ e Xu8bxH fs,Ipmկïxnݺ| '?!O4:/q\Ueվ7E,;==EQ~z;H$irD`83ܻ kX\_LJR2tR"Ae uQ-T7EQy@e*6dG7B~,ӻ(QLpe2/<}j>` OddwZ쇗=\=ӯ!3.X_4B2A#f`X`X>+CEe( GGGx IDAT8??oM. *CkQ7n\Íj.Zj)ءpse}>~B1v5)4F +aLTw,P)H\.g(K^Bj%ѼB(KQkx a\}߇"7~'" BD$ҁ(pzzl<'!J2Kp1nEr7n\(b>u9BH(,%H(% 2 2Q,q~z̑-2 l/40Rp`oHy7Dh +# _R0AANQ!ʖ4LL5Ut-" 9FU{Wڍ!dR 2 hƿ>ƅnm-$ wqE {N[@SH)ZU$I!h!4*yC{qdYkfS  jd쮮F>;;;;;UUwuIHRpw`&82nnfnnع& iWTĎh2H fÔ>J( '{m~:,$*s0!MS )Ӥ0ORI;{Id)ϢV vn'<1m[?gaHe::,uF(c@#o{n IA I/EGq %=s< t:\[ȋ`!R9}=l1$M7P1)!:V#XpIKYV@P@-zIJ/5dX` GQg> 6kew7K<w_Nz'Jb,5?o/,;-HNU\T59ؼ UhW + A"p8;֞Ҩ"UcGkXZ zm-W*3Z{ʗ0sɚETW9$iW0)DԵuR<EN-RIgS$2_k|DGٗRohQ}E` 3OF$͛/7{6llbPq؛pk8݃C?ѓ j,C SDzQ4o/ QR/mh)Mdq)`( +ӂ^MӠ۵DZAޒe9y!WZw8O/rDzŴ{ 6` \CpVqW%+{X!x psOxz.>K,fٹ̉,.AV~{p}C]mH2UEQU)ƘyɺFWP:ge9J EPX4&[[] *ԝy-YfɖE>i*3-l'霝?|F/; :gT6˚mJ3HS/<yFQF#$G?on}֔^A֫|Žȳ#WGp89(55 #y ) đn*HJ k#Hk8u[\vHlpOiI!5qBP+Ƭ^ ydpZ%Rb>Vn׫E8TͱǓyٴ ϲe`s;:3l.c,v]1DOjL9?q3VbL}ug]xiK. +ɲxHULa "E$V1j[4RUƘ.CM'Ս֚uCxi4/T?Wq/"0^Huj]- 9kee' 4 EY^j~Cn5"r#sJSH#k7ݼAfD#0 ssh%1Z^Q [bPdlu;)x:2:zt0kŀQm5qvmtl#|Po,AE`A*e7` 6` NDz\|_p\'aqe7YkJ4ͱZe0k }s Jg-啛7pQ3eOs:V'},8 u*}?0V[y>ڙ"hBZ;6UltBn> 3f$l:bLS6=- O>zW_4ߣ)WFTߑ5 BP31AebUFK&s O@KJT G$픟g.jSqNh,w!x`-H<}?߻)/$@xHuF[Qh@Ģq:Bp8A5-}5i#9ixuNC쐼GHj F!`}GPZKQ7 ^8c_1xy8k2_.۱<s>w3InypOut$QՂ eA,(Bj !Nl@6ĥaZ< &6-3bS8}E;Ầu|,":g1+Tl,"=/q^9lfċ4Y!4MIt8Q>4Ip"&=z6XS&EtΝ5S,!Scʩ+zi38/Qjة_㼆I}/"LeztO$ 9:!sʮzT/$c҉gCWծJ_I,%mxxpV&͂Rv"%cZmnw}{"Xki4&Ȅ@Ѡױ2K8笟iYtԂ4=ϙ';d=}v Rw=q9^ՆskΦ˸h\'_}^et>lHꪁL:l9Ѩ(K.t:Mfy-v*9)婈X:CW0FNu612R%$r[wqT{y# IS5 DZIc*c Ƶƾ|KeRV̘HZI+`ko{LJ"nBt<Ȩx>ǨmRpo֎8$^| M<&i q4N GVjq֡Pi!"l e㸚jW=c*t_+\pYyXLO0}pd?+ҳgr&IJy8QjZ}4̶qE$- оІ*h{h4BUql6GIb,@ 債>"M,8gER]Sߵ1:{nUOTc:VڱIjY򄌫^֜F̋7w (T$*r[ w="`E)CCEDTKLsz*':%Fr nޢL9:|?y4 JeM+A:yAo.ͽ`MR/Y#-m+rI cm >ݻw8 F5Blѳ/"8>>&5&|Q`$:fm!gIAcknS?/@  08 %E$e`֫Ms3WDLh^b=/Ɉv0"pANq)G17onsmC !FGE(11cm}eEIAAb-j 6X.~ΨuQ\M\ugI_\_suuVRp=}"+"*EQ,#LEvJs:&^g!d6eh2QNHY}=/\uK]U!%Uz]uzvi cE 9|r/W x%ju_M|6O=gsZcCX>"<{)9F9EWvѨnY)Ύ|0xWaD 9&WR^+"S*bJMU9io誡j+.IxxwٽqN--ؾkoɳ'c|4V@iO9/Wx!˿b8IZۨ4b*kxBc&{_:/bT+JEC6Z~}~Mp ˒ P!t*:((Xt4?|d#ŶƑJ%?Y8"HT#z[[Xg ZPk)4PݴA$Ǐ7H# *$aa|c?xN{ALޟkxev 01Y5s^?_`h4%o?? "-e/KժgWLWufb X#k] u8tʜLb&]Zy0+\(XC +UTGU^~qe˂{Q[[ܧz5 yM'DtJZfDaT金zvSK c1;ٯ-!;q cq61T g loo+z)MTP1YY5ZXl"̋5?VCe@8Q>xmYS vPD( 39K+ffE|8.m+^z-7@Ƞa2ɈviXH\'}[?r|tqGePm\ Z,0 >c )d@ Ho~7z [; ,/pCTJ AEC`Qt⤗i,{;ço< +yVTo8TXiYlth5vuYYޭ&q$ /P#UA.-%ϪJr^Pͣ.]K jVSSZetzB39ortNǟӜo&YUvϔoc'չ7 *DK(I C9E/Yctz[]5xvԠǘ௢e}YX'ye"_?'B_-ew$y75㥷^$! E y6BHҔvM:=-nrh7|g,\~֌Q!D]*?y6NRB0"X$Dɇ!F+|ɇMOpjdlUN~_S&9K2;ϒ<)fcC}Qu8gѠ-U!' IDATUЂNCZ|)"2Ek^(eLΓ"_?YsC$!f8 R$162,#|?´Ea IKv] X5q'p)f,q" H u  g8x=01D{  tt;]`TK=H#(!w#S A'~>XCݢݣiBPaUG׮ۼmnܸ#[;{4%uQ<}?9NTxUNlM+h[$$[]BS/ؾ$%i{! yE?b)}l'&VYN6+UǞPQ63׫V٫|rZK\r됇2s{rg'3ﺗ&F3LSLRk<Ә|(gOg-`X`C>ȋ6FU ZmkaEHl:X'EFG0{*ɕo\קa։l9*:@BTL)LdŨ5(竁+,Soto#>Ǹhb&DQ}pH< kxGܻw?:!v0]&&&My)x[J$lU2UfFU"cw>:;H0[1Ԗ-T]*?akwFEwgQh(|KR0hwoKI3<ǙM9Gtߣ0RҪ@e3N{#%n98*e㜡(U3+O։3 &XeŽ{/;m]76꟫]bqtrpF|Ym\bJb86Y^D=q}EyeL'zyOĻvfޫ~ og/&an\Ωi|Ff'jO^Y 5YBlD4Ih4+ G}lHagWF 8gcD,+:Rg$W6۪Iq-Y^Ncb>"+c%iv_ECG}HEX=ޏ1H>'Ϳw&$j0(VHT ѿQQ$5>c's vx!!?mM}`Ho>}Ds[")RR52ƀIP4`4Fb( ԫ(BG34x>׶i4g7c0yH`t筷n77ob=4i)R$:eA1iC!B6nycj+JZKX#_ji4;]z^6IZm`FBŦJ@lWkYoUռ1ҩJe^Lt՞7ϖUL|fZ^_XH!M,\Aێ+eɬ/ $̚?UDM*Z02`TFLQ(Vvokwcp?CTkܔ*hp;lGb4@{`0p㕗ګn YBĀPI,2ʘqS&mCN~7II=vvwi4!xx~-Ruh&ΫT5,(Jk5]4 B|uHOj.%S!1ff#"D@ 55RPZb$8QŸ}Mhy~s$hgXgqΒ$:>6ۗH^f4N~SNK?vUWZo3 ËZKfW|+øY) kPBa_4ê&H+恉2ms,.: /1KUZ-ڝNVɣG888THñ/M &&}qk?޻?V+YLcsL\+A3 :?K:/]"%ydZ{smcգSܽ7^ń(?g__~Ǔy1OJETđ blzx>w M:CƢO")XKQ]dPF U4h.4}4! z[<ĥ)-|ʠhQ@Ͽ>l Z\`U}:xU?{Q>;1.M0⋉ZlQ9F3:}o/{xe'GrmoVO3!w' GO>y3 ǔggM\#Asݽ; 0W$]=Ap# 3_TAQ cg"B CL#WHX!GOj!`E1}drpLaUcRd֊E]Ow(fⶖ5#=f:/}Gc쨙*LY|;L&m><켹jg'3/JfљYlh 6ZTkTuImA=}|\Dx2Yo2/sR,:5ȒiL0^_͌QәyT*s)«熥?/jyYcC}QŒDFdЀjcYգՃS9ւj(<;BUG1`UoѸ~ xϣ9[& E1;.2pcߊ (T}(Fw?@wkH`b1t;[8 c+KZXkb4蘛^o}קYާG&U*i vhom O>a84?+[%D!e#`#E`!?mh7z2RqD_;3I^,(5/LtST3 IچC$4s&:4ǨĨX֢~ڒ،ﳆlϒ@z iw͗i"f$i$ .uXc EVJ[ 孷k852x7|نK"ae N,<"`ӔA>"MxuL`sl59@4h6|]`4i4Cog@\Bhqxpx?0 1rm A)|ϋZg|0 L"S2{_vnrJo+Q|#$Ic(~"{#>!MRC̋D1V;a4Ji@6(㼽屎Wf==z NNEtia9fXHL"N=Wg^b8-9\P/O\DiMoJFTig7,d7aqԥi[Ѻ_&A,^vցM=ur%\IEQ@fq ץ}BG1Qvg{QS;;/<,.j3O2tkNΓ挼_߫o$ id ) itZ&5LB1FCb9jhh@m"M]Mc "x_F*yX W U+2d[uN=j %b o <{ػv@fG1j>O jwi4Z G(tT,Jա8g)qX4i*aG#~{Gp4B}:QƳ#ZVt)!4M vyinoGKȲTÇODlE`$:߶b(4@mf5Hz< ?1g4}nՈ39mٽFV{l58<0*2Fq5YɎ$ih42V[ ?sc XEQ`MTuvz<7x9!໐`#Fse\bjJ'9IJQXUG!ugcVI Ois0ĨeEw>}OD9I5GN\|O^OS583f_f V19;pY9/ĺojV>lNJ9g]o;2tKْ/aU݉ګl:R{NϜ/[HX(%ZչegeEa }+U/8z"^kpE/fuoXeNXUPmׄes$8ɝyM~=9s)hl/ฟ'_sT]IVc]E6899Y#՚,Q{;N(І(Vkմ>=䴛HȰ.D .kSe|@Y{IZe 7k9BgYXBUykmq䐏?i!(!ZzI$k }Q`1b|Z vM& I!V2M2twv0&kKT7ՐLY5cIHkƸ:C_gbT>Xgf$N!*R@PQMF\H$|AbD4mQC 8>|n6EڳZ]'9T5Lfɞ1/ke*yM5 ?3sspfu~Iu¢Z2g鼘K,"ORD̫)<kc803̂rl N\"+aHz462Jy󥰖\+aItqxΙ[6p^ 05:gU'D<^";.?qN#[VHeg]xJY*_74wqF&E￑3O I`jʀ(ADh$LJ T L\'E+ 3yZ+FaΓ'9:8H[[GFX _q'ZOC`V[D(~~gU-TfF6tz[ 8C;Jy34IRvHZ-$I88 x-`2cE*xk N VJ93ߛZ@ m6q;~ZDg)q f tS^{NKz7^m3T.EQP$.3΍c4,ʐLbiڌF#<9hZQ$PU@ Cӥhm I~t(\F#*gC_H DÐRW"9rYCgrS18QP IDAT'~:s# 3i,E?=ɩg*Sg͖a]8ξؐ@_aѧh:P j`\dYNcZQMi(EiQyUI3UjXTtPIx)(ŃҺ$M])hsk׮@{lO]A{olG˺B[4\̘wA 2:oI't\J O$adꧪ7Y XJE2gq)֎[ge$]/)![׹mxM׺i"$&_E^>>cɬ1m4=A}J42Jݦ&yp3B^WV5V-RE NCc6/(b%Bgg;q -iYሣq|^Y浫!;zh5SObؠ# ~LQZs~Hd<}En," acBJ a"ւ- -;脝a* :"wء?np & ::@Z4 ㄃nƛ_{+/җtt:1yTEfD{MklܺC{{ baXGQFk(P$T!rR  Xtyp> 5R͊u(:Xcz%=(jK z6"xKo8p:V :Xxu4Kŏ_*I"w!,,a‹)pDq*5Zz(KBsif^Jh|t#~31bjPH|D׻ni#`@ߟj06M"Ag3X* X|6iD~)܊sxPy8roc@x1eTԚ*_~[(1DZW F(`gH&E0\w6["ewt{ki[ji[GMɡ(VwȊj0@E8GiCӣf ?CEQZͺa&p:jDމW$q 9LhilXݩ8M1ܽ}l.^G&Dq+7SqnIxS'#yJ( ~:6fa]ը$DiJ,k)[>ZY@>z?v>.Hg7gpx&Bğ~*ڟgvhd: YMc\RNJ3C\?·8(:"5qd|9i?O sJd֋ʼn A(V'بN_\?7\!--SYBXk9(lAgbp>Ut]GUOHL D m /rVVXr[`OnCE |\x$A' !UimTLLo}/\XYO]lwgH 7}ģã(9|ۿFbkw9ZGM Z"+,Ipټwf[T/+/~-K.AQ% " [lohRcN:D -f8})rԛ Vn2s(2bZ9F$YY[x "(ڳ`C,aX`ci6a/;ktï !$Ɠ4S_E<^iPTS }rw{/?~ȝYdq~pyAtplF!R%5ʍp;lg烨pRK)_Ļ $] ("q`v{৿oS /&tKD:9 Qڤ b(%蘫[_:^%($!T"CA?gbF@Z-yѢm0`CRKm$$;A?_c{Z_s=\Y׮0 !=AX_[qKQYaE8[WgF q+FS`d<'gln< tQJ ]ˆFSBSiܼOqk˲,+V[%9}OV=F>EȜqk505L?'41#lcOcJ^', 'lt9>㊘ZiDKIO>ǫ+~,Jagr1L;Ȕ#HsoF%FY<s= 9rjtxƋ%=Oo1@Xj(U<}DJ)Q Ơqe$9;PN8A&/-b ;`W̟e׈A`ChDqB5:{t{x9 ~L_5?FE0: dm I9i{.O@jQՆ}O`w$IH;D)t#NbIsM(\C\t4M*5L6Yla$PWYk $RgLcj{\Fg"cw6;!2YUoբ$!ckQҡ':8YsMh8I9Gg0 k]zOf HҪOUz8Q>g  ,00tѲy>4I{l԰t%)@l;oxg1 ѭT ]?^ZK]aYh]XC9OR46%9R2,//l4Yj5kS_X#2vxR  čq4[#nI )g&jj{7+C2| ogy0eNH0syy2{: ,|8c[zOYɧUS ?:O/{Ϸǵ~oƬ0d<f'J?+$4|+>jxo6LàA~7ΛZ#b]Dy){&vw( $ct\#MbxĨZ0 e_Y!E6?Ykъ|5t$h xJ )qH` -sǑ5UGS~Sy~vtJ2*(II.Nh ZB{>4W.~2;;[B.Xoi=%HM>[mТ3+K͉6-@ r2)L95:t{]86<{e\p*u>Xx _hwMHͽs/k ޣ*Q3(ke5V@pmS*_$NI h<*qv:8F) IDATD(օHq ^VI]煯htice A20% $Bɋ(HӔN<ϲ,PqtwEum{kǎt/Q-<<8}O&eg~5SۗTYSvy )%ʼxR 6Pذ;˜8\J*c~6^eۄ>^7ߤg{xBK `҈ĉ9 "فX #F#"Ma5:W,TI+vR!8v)MGa=DrǝR,wou:8.节86\t7xޤoe"!6]EA39h4%8.]JYkQJ)aYc{k1 ,k |x'^->,HPZkc\LGA*(db;V m6u/qiF滈+6opMo70x_G \U@+.K8*uĕǏĢa`̽EI-"ODܻswj8,нV&ui4y.~9DCWiZciynw@%mpC+$~ PJN\{?1{{}Y-VWW޽ʫV</O٢hς<ϩE)Aњ8hw=a{Ns~WD)%AT Đk|wi.-Kt(;-h"%?S<7L%j4pYZ\r{h4H$ɋc4N"ˈhJi|1' ZJX[[%(ĦudA0N6˭u;l {D#1z6(kJ$ZvE̓~Oez=>NVSױ֖{њlyf}^ٸ1NaBzA=e-ScL8i6zu$ߓhfazγgJ |Q/W |Qͧ߳ldwN<ǪS\FQ'7Q u=ri|'<j`;sx:',HS--l6l(%/ÀC^GU"1Bd! 4@!1J8xkk.^рyx=g6ߢ. *]{PːF砍 @LF$ Is1&D*k,\+! ^DD). Ǭp%PZ#njI\J?S&DYGyCS S6HΡd_qaN|q ._e9=$/6h*Ky3LNξMq?C)Wg6:t;;|e*#!d Qs/^jb}huNWުp }4փ&}ƬR$tm( -FT &Dp⨆suD6Ȳ~Ͻ[w`?r+=0=qxܲϳĠ\|0; ϹO<ǖ|8IS\2x8s?3XX=aL[2{ht ڝnZ?JTpёEEdžP82|(ƃ?e9L(C ×kh4J9VZ&GrRJ q$4u^}ewY}eTKVp9/o`7j ɰ& zk)u˗iZlmmMO)} ̲~_" m +YOWR*BW+j_~u,Zec1qBC%Zr8qEXbe JG '2y0ԣQkRA)<8 J^Y )P74Qj퇏:7I!jXY ё"XQ#> >Pwrb _z/ Z+$qDi.7~>(I4P6]$|Kf A9uu.X 8' _VXʢňEѼ|;;?)_x,pXw\| W[("zKc mVPX[ ^c[wBW,"%'bye<*[y^֠R8rlQs4tK$vWxb}h3Op x2smۈD>R 6Nb.ȰN2z١Ai0-ܘ_9ka'[X,FVE(.6 -pZk7CN(|\ >֖.bsBk}$j$G , , ,zFp"79gJjE..NX^jl-q[k( "`)q(_u4sj@ h֊Z^wP4 HMO>ōki^xE8@ %ĭ%.p A'h A-8%$: 'ֆݭ-<'jt(M։K+l.ppp@{~"<(Ԛ ;xKsi~/Y[1JdHLnܨU؜6_{?)oe#z^W]fzW^͛GEv!ϑu:;{S@ " Wo%]J`\peb|FVKWPa (6>{^hHEBizDO,BdGQy1RDEni U\_{r FHC'RZ۠KsE^h,BIpEE*%l*#;* Q}BBn Ic:AevGs=A$UǑDG;t?K[֡/_oйXZY9z%-x?׸}&n4Ii--_ /̧_p~?O78ѣ9t:7&q54L06&_;ʫ0QPL}hIrL`#2~4 )mpZMs}z֯gog |cZ6gYtkYΩFkZᏇX0{<y9nvaJ^O;9¤9Z &RDZ0FyFb4/_R`fr~PяMExbc:01 L΃-n|ͭZ2 .%DI::І嵋I -`u)F{.%B-(jg 2DIȳAe9^~czHFI',[MYFVl< Cی䞜*w*G ~wQ;=|*ۏ l ˫khAK^͹fzăvY^Y[?sɯ/l$y PR2CT01ZAiqE/'qWn8$7=@X8@ @V#I# X0>mQSe=FRqM]j(ig &hٸ{G bt I#*SUQPy􀳣;>Cݠ_'Ģg!8cvm''9⋯u7n3:]Լo}rkkN$Sw6{{;x_/p- :67oͿW"??FN7/89r.3;gS0~"yנS9 >[9Qit<# ^< %+8[!A!ljJ#xUY0f57KCW2v7wq܅hN :?:ø>f8my@>"/gk5؋l;7>yqhSwRhZ %\~eVa*s^c!3棇XQ@.X"V֩dQqc .mQR •K/`LA)Y[>SR ZA^=G+E\K!lz( b*6{Op(W5^x >{ IḶ9 !1 n<\4V+CfIԮiM2?$3V4ʖҚiV׸V./@$s}uUY]=՘֕~w8Mh5[TV"3v%IDQD@9hqճ<BydЁ'95HJ%^y^?sO|ꓤS h* Qle9e$4D El o2v0YKLLLYoXcR5dh%R [ͭqI Z<ǘ lr9)t 5#c\^X"7.]fkifcy_bme huG7T74Vͤ]yfuoZkovFoGFƘc֍κE66֨F:/?3γg^x[5O|,W ԃ/~9]= S3Oܺy{>P{_ ][]k|oks nv{ Y '}m!b!`H+ۯS4ixT܎L_P+a159EJ3'n+ )l@Sq*0֖WfQDygk{* 0;sZgmNZg9Y)m C}&J$9|(BsA5/]&keD;!XtEqm(imP8uk )IJŋx駉Dpґė|Q? "fB"#tËVs~(,0:6F^gc}$PNH/…/qG ) ͍&Ͼs|`zv>8S[K(324OkM^tO ǯD% V4VV=lqu7[^ Tz3*=!˲ giKx0 !aaS(Ebun>9 5iʳ5j/OpeZM`\v(b[>NTEPvQyP$`A癩pc]$x5У VWWX^^X3|&pb7 tăIצO;/邅[|_c핽)C0WrWݟ_Ȯs:3{S^=.>^AwVk-AԦTAA]_۸ҵMʻrmSʇf!5C qgx+uJGv6xu O?7 {vq4 E %1c rjZH[kUآIsc=p ]JGۿw',F;B46P$ڐвS.+&J 4ZΔ2RT225 %A*S^$eնckY;a@RK|f*͍fy켅zY Z6Bɛ ޠMХ&t$Ք4MqbmA$X b&d`(LS|~{k($􊜉~Fx!԰i=|o&yP cSXcU!߼ro~嫴pHтEkms/ȟ&i i`YknMV XBUeWfR' q-(}c"y+vւXQ8Hu \4+Lʹ! h D?flC(Ks1~;rW`):Y[K|_8lnR^"䣬Nɔ1iGyY5Ŗj0vxT82 >I}=b? F;uj_ϕK:/;g ϟ{4x|P0OQƗ./mmHȻ=>1?2׺?y$|.P=8:+Sb!fVA;O@ocRbwOؔЙA.'P&Gk$ʲ6 a'JuƢ,NX]%s\P`3F֒)or96n^E{K[A;90bdIB|&)+ Rz2v9\c«V"liBT:%Di&iM{(T>&VT4A) oYȱF$V;\FSF ri( *:?~';yDQ`rjTƫD'\pZJ3j: P/%_~3p,/o&ϝ#QLt"exeiAJTjoP+v5e( (p4gM3a<յ0^$Ja q:b! -_)eƷ"oysmhEO'_?qX,V$ n@4yQPXn&V,JC)=t1sCGNkEƉF"([++6r3^vgqb IǒRT.0?=v6vf;;3][&W\DOF/vpyGo:ZAkkg٦{ Ϸ#sޡ×!b!❉a8ؽ]v32]X~+"aXfMJIB^EGȡXtXC!<qQLcYATH2y#Ghj?nrY`lrk;FeUNbU  i'DBY*i h-4[IG#4i"x #DVc'z?QˁDSS\9wX( I^ҥ~zPZ311?Eevc:mR!9Gl)O=T1+)ssx,zY u*ǧ&w4aQ4sF'&7# jYZ*Sqʹ7) ($M+/Xк?\$:c} CVRz0"0es5&Xuk (Ҿm;I_*cAPCGJN]cЯ4Ɛ9a:"(\q52ʡGn8~sЇ?_};^~9^{E~mP75sWWW+}ڵ_#G vYUR) :rN(]d_8Xo^H&;yz۽o׻_};ص9]!}a#ok m{݆6#o  Š;8Umo;;}_R|_xqVDl_vC%H= "0E\NkQsߑLR-.Z9E+ ֫r|ZoF;g)#2U3ZZAkuRx]*E& :EJ܉ӈ+!ϑ+ev0đR$)X[ec}ORjS LY&ׯ]}AgRa,As1l`W.]&kzYKeX%L21Z[_k_"_$* +`abQ0>4EkVE ϞyAJLuN}lCƌMFĈcieՕ(>1Fn X10@G!cp2; I@mBGrWj)-pXg$RLMOigf5,@4j-ARJv%"EA8˜8JPJQ`)c --Z]xPzPRn{׏Pp^=V9 tw*z:Yq5VX\\?v~0gTWO'Z9͍ϣcV7%b!b<? pJ Da 0~ۓ$Ll031Cġi6yX}YASNF( PD6N6s*#܋< 7$LA'V9s @9ABY]qX$Ch646 ;!T;"(%X(ELo3eMD32:NVJ/f3ߺIkcG90A"t/m\YQuBHCIXkAZI*I8I-L1*Vs^jccL>ZmN<>ǘy8#=v#"˖+k AC°m[㍨@Ub(E$^"װ[[(-< hR%JdYJ2e;A)E''&nʏx) Z rJDVDp gX4AaQ=8ܩOYi^_zDz:Xd܍6o6܅zar.ŵc٣m_v].8hw\Cm6N f[e!A(8[FsڊW8Qy;q* EKBaVucgMaZu)5M8Q8t1ar5V /tPN6>ܡ9671{Dž^c1yspvC[kq"N019EQ*ir96z9tCҐt|d$!: đ=YFlۂY3[]cGɦ&''KEO |n i ˆA.; *\ $EGƈ5o\a (Pe7V~rZf?%Rә*9P\XGEi"Pƒ"$J qlu9N9X;{{췝coZxn;濾NNN311յ$Tz/1iov)%{O>S[nOc @GA{=_yfx} [M0BLA$v ۱>&rtUJ BX[]heN򙠔RFAx2[ fFV;} U'spŤ*k+&u͌ SOzT ⹳(7~Cl) ƪpN0g ÐÇ9Oq6X~C"P(#,ܼώ/_(W Bc}݇p0wՑ:'Gڪ#0 Ð"|w3$ b* in4cZ_gsuQs$rkDQDj00lX庝 g- YӔ™Vi("Qd9Zfeee_yZkl41x;8vƒTV]%%PvǩSo| GP9|(W\|_~=r8JӟEμ2YӬE{ns,/-v|.}_?rW}P'^7a!b!8 obzS}oa$Px"H Q2:6P+69ref)'2+Q\7p5^9<@ =(`-Mqw3y?=MV"5t% %SQH}$${ 8 ZkDln6q4[KkPg=|0IЁ( VWZ_zMYC)+Ua ܛ_tnIʩPh5È+.']&\gMRX  9~8: OCEeMn^i,BedÇ0t*.,@1? 1|8ЪțR%qBR}3CNBZ[A7JJm=UWmI.!c EQ`rLjU v?RdY_h@;Yl2zCo0|C]cS!aD˩Ьѱq>S_q=ޣ7󧿻z ~~_s҅}m'k 3vu%&b(gE 1C{Ԯ{;ĵs~YnS{od"p`H Q c7KZqJPJ@(,X4- yY[p4^;S޼/rE0DIÏ=Le,pգpa?|\_+66O=^cɇFQk,,-ƈS!%!IqC1CACt\ XA5#"Z֬,/>۔X-!?xV"k5+W"(ءDeYNG'"$+?:KK`6a : 9qp:6kF4橧"wA5ćX_k"JQU:K͖'n`∹9O@LjZ#7ne-‡FYk;Kk,(!MR$Rmcê<K B( V[7晘OOMcKD41܃W=ti6Wސסdpٽ@F4;85P IDAThx k{>?tQ߁!‡>:ryw3;w;w^bee<ϸu__.dAf|/o~kWn۵e@Y _,½sb!AH_ZAik)r> {@pI 4M3ܹ Jt9Y3X+jǸyrޚX ,#AHRH-6R'Қ"7d*$+.'+2R~"~'E" 8py7j嫷tm#Ju2|#';DZimFXjI+ӄ8[1j N{#OHyPDŽ*"s-Pc Ehnm"JTZﰱUJӻQ%A[CHjU;qeֶF}KO|`F! Dchpq"h1)!֘aZ D W/^be&a(s311%DJyie|5SPV М8O0)کVa!U&p$?3O"PM+AE33ܼzls(99}%fjfB@iJ4 S&oJBEIvB!Ȏktb VgP,/sUO/E0` CҸf;Il&+ ǎݿ-UmDi> g?FJſBwg@|s[GFtNkj?K]ӰF`P/ҧ骻wt]nB ;n!ǃlSKs}=Y:~ 6:^ԷrDqmO[ MAо*;iqv܃7Vrq0 Hvܟn=p},ſ>=;.N7>~پviiPxW*9{~~h#tb]QNoQ"W(Ip!Z0VB*/ Vkr .PJC:JbrQy+ ^9#6aA`* g!CJxljP(\)JqtuE˙Wndf|8U:}<GfEȚ+ M!jH`q*gkc[ 8aw>~x) & blA 4AiqӈhO62S đhMcy[.!GVzɹz2: )i@!VB9UX! Q!GkH+-Uο , s9.y"!֢EƠ.wöԳ7{H#GjRO>ܷO>RwA)  r)g>8NG ǎϿDqo{bvcc]kj;#zfkmS7{܎ON]|%m^#cpث *=?]{v?~Qv{- 1ĝCݍZ14{ >lv1܎ɒ6n I{Wk58aGJ!ZQȊ5gϜFgLAV>$ $L"6HӔ|믾+,laڿ4FV S33DIBTUf^zHgx:rJAHܡ5"' `e}6G> N<8X'XduLk2$KY;lu&#X_[8pb}8SPXXAu5V#̐ axBF)V0$xՕ%VT͖϶#: (kw1+>9f=A Ha ]@hCP;kj?&ow }?_?g?Yھ?!c~?BaC~Z >Įu?{ݛ3Ay{`H0 1C 1;7,܁߯< c{وO]VYM+/XD!qBE}OR(tDdA Ek/ `sT`8q>ӔՈ8gKyT3BUs"pEFc#>1D 1G LRD4i\0 t^gB 8c0a0և&Jh1ׯ^nnN=.JB^9$(׮FX AS@Qr侣(`ssRʥ+?oq|{*N0ևakꋐm#eQWNSd**OXMH٠c`890h\a|8#67>%Ҹ" 8j~_ׇPd98H= F`msw />>+BY),8(ܓm] [`Qe鄾ex!$H)똛=خ6$Nv-zI!<ؾBI[q^V*|ӿпʰٹC'??{5G)S<_Wٟ,anp:߻6Ks[ħ?QT瓟,O>]嶕0qs8PvVBwNN6m]QIC2h!B+mow :%Yw-o oD4@pzC&g]c$m3}xD49ַh43Ƨp*-pVީт)G jmzzWϜa:ɈQN8w?( \I0(H^2:6CI~rC4:Ã?*y9rk1eXK),kK[ w , OD)e?j?ayad(u cjZr0)[4V8qiґK$ sfr A-M~2>L?ĩÇB9ZqWF#fٗ^1TQkJ&ũp /D\[ J+5Fc a˯o>k-S6/:S(C3jI7։Ð !_ZˬXV)h҉)~S; & kH*p#)OVk׿mn V" #OL19;Pe_; ʫWr5adn"CLR97nC(qXtQE!F5LQZ#:U;}?ri#8dcs ss5B8 \B[ 4M*?o+];{z9gѺ,!?{ږPuT?=On׮z{GM B`; /x'É]S~vۢȮw6j@gŲޝ?1W[7W59$jV'ۚqC 1A?,rwcja>nr7lUj!\'TjJ7 5t&ǍPaH䔓Fw, ŠD8ɬ.|_|=D {lOD4H';+^ k4 D"Y )2"ZK>S±rkQ* 5(I˅7n58wO,rd"8#fdOsă} W^m}8c -P@̳rs<ބ[(8I ER ՞P:h!JZysu(rtSQC\"֩8ɛ( MlQX]&_Y%$jk\9:˞&|oA$AN[\VX##Z&N$&39Ix>=MA*$)|E8&%5(Z ~ߜgaQ μP8ټ I|Ț(EZXnyJ Iu-jQ4^y׾9[҄kWrZ4Q!YZY KG@|&x2p zQVg͙W^!qow "((k}tF;?#uVQA@7YZZfe~ip7R%>b[[jGiDPbiqXGRřs|  Ѳ}zg,^ҥP·["(Ȕ"Jbzc` 1Dqu JD\Sh!7+c}=+ƒtU ,?ޥ2N| Nܮw-=M{ njw~˖o['{KC>ݞvFd=#):k+/CJ1۱$vh<@$;dP]ĕJ/Ra{ЀAĠ1yW8h?܍sVhArc?h~G:ca~}w&~HIw ْt&-ass VpAUz "ZENĴ̶AJ/cB)\Vk-ۢ,,ݏR%87xA@aD'K_6AXKԒ(X >H93|py6&)Ks}V gVXpP1E8Y5X)y V+{#V$iJJȍAV )Z^aM'g@:7"W#q8=fHX^k_sGE%(QM$qU]A눱 oE+' XEፓ$%opyNb1N NP!Z]6DqLF?.Di Kʢ IZEdޏN-2EQaR +IQ,B"clr8Kculse.]A#9wfAZ0JΏGh?v~gYP8rX,a=XcMN# A W;??cV%#G\s/o ~ 7[}l!b!M-ۙ t趗Y Z o6kAY^[46 ɍEDB VIi3uJn5[*b6JE#qW_xNg gW Lȉ#Tu|TE^@)*qN]lu9Q~R2?!NGje9lPd>yXÄc*!P)YdPVods~;HN8Ƕ[S5򰁦8\ޟ)8Z 2³8U4&lN^;.QGֹr<O] - d2|R4J1بF!QE8VHRo26_htg/=;0*S2wFoaUV>l(v F7xiOe -%SwΦHђ91 lHd NI /wf iqEibn1b \.f9|+"o!.J % &$(f+vUz.5nVBdh(P'S:f#mQx$R+-,0=vhv(D-^%«Ǩ/.C]=Przyi5=u)Z"21ֺvF<(f v?LpcxS.6t&IۨGXM">k{Z½ɠU[ypFFmFmN{ߣY&c(&gf`h^&Gd!6$Idnpa,5dF*[oKl۹]qg-N gv{2z\. `h:`MCIDQWs[?"61)0e߁L|Yb%bGub hz/`>ɱ3`gĚin_gzS=8X#$Q+yl'>`a|5cjiRUq78꫌߾%=h*ORuWS%իdԧG KGgdxpL KYk-!wu)CU&'9uc-1Qi]2&IӠDJNaq9#fk-L}|VkY 6q/蕡XO6h5XkgFmI5KxB`$Y,~&Qj̮DѸ H$[D@LW:)NqY?|$ӛp$w;y]ru<_0u9Vi27>'OUaxn=48@J|,Lї,UHr^=H +5*nO#R/be-L"3YlIq(Z Ɛ/j)bd3(pgf3:ʮ'Is|WfVPY|΁bP-/ҩ=ӳoyHb@ 0zzz&!יg-Lݚ`<1<;?N~ Kڍb]Ipǻ>464[=t-|Cށ{S/$8< wC >ã0}Ay;~oGaNNdR1#hLjن5) J)0D)uPO bNi|>YICPK$Z6$JƢ^j5Ne;y:'^~,Z@S_ٸu6UO-Uk#}lbpATHfQ>Fz[M''WH,QL'8Nwtw4 L ]/ ܼzCk];γs0R#t6æj ; :Ja-h}N$` d]<k&fZ3>zoٟ6ju!ZArjTIbo+LͫtlG$syt ^#H J'Ţ?@i 3s z)l ]0_^0Jˮoۂ1?5|&NRгO1m+; ,Nr9._H|r8PWo++䱒bc.)\j2ubZAq׍^Z5߫ AYO,\Qt cHMtP?k?weULm6w">unBFXɚ֞%?gX]C.?N98DЬƃs8rD&~+4BIKONѽ{/N6SΥ~Lր7ƨ;K,yHBPfzj;XB)" CXYDHգQM\W樕+tJW61BJ tvG*.U$ _: T'pgj߸|rIBiak zȮ]?ĕ+9u5(S/뚷/SmK t>l悭Ztϵt} =(iu(8Dβ_kZ߽{6]6x\ fch%h"${ay5 EuJ%*]}1!PRb\.f[i!B8Z5ﯗ/iN s0%;$ atj\xWw`d2I"1o'$ A& hZF -8@bsUCCJUn$!XR`dZLTEH#N"Zqv:tg-Rk󑌦}7^._b`pk7j'.PDƒ*0u2 LNcCH} ,5%v1RH:U/O? $ILVZ'!HOc('&5$tn"tӖk:E.!ZN]3ߌ5ONX09z(9fgg9  vl>z/#It콅XXɍHfj؛~hVX{Um6h6hAz#cz@ :KMX1=3OUwĢP'IL֚$IRkd 'HӪriʒ4a1Iy%ҙ c\x-L'ICr yqn%ܸ5\$Tbj.^ȡMC8gHHp`,*ȓ8GV'ɀiT貶iҙya i`afa J /dÌ SeLbo]9wXcܾ01u duQ.M+ b[ypYjIg%ȬOЁVkMKJ3Z${Y}]tD0{R ÐŨ$ D6:vmc^#tvP.e}8%tƧCXJbu hh8<$ r"lZ,)0Fp\9RVK${Gc 079ɓ'1Ʀ;Gزu+KVenv0N<kuښ;!Vo@B5B_=6uRbz)\Ľ7egݖm,Yue{vxXlD4:kۉu?_zܲXREBH2vk?!k\M{F Z6_Fm&QdW \BI wfH?O*]$ B; *uWiVe :2Y}:E j-iul"$ze2"t:Tӭ|<Ò8x=$(DE`3&i6slِDuS -G251͑AvH6YDk $(I҂SQ q38%'O)H9r2퇩FvlK$:bl1Ce=00`qq ˲o$u vn!`uı~ /P/a  RԐY8 (4AD*ƨF?D)y<В&$8% =$qh!j*^#O!H Q7m3>zw4%OxpDjHK#R.mfk}}}ܹ.=J\n& 4ıAJS+xđ!ڽs;fgXd~v$e"oN^gjr[##\p0 qGkV4NXh-4B(*Sj`ſMNZ`緑 ^2j[8@=]һ1(fr,i6mⵍ6x<={K[&ՖBN)RHU a38U2L+^0xG&qEQ׮NIrK7MCf80I0Mj I.`njO[n̉ F=D61B"l:i r,$6W:/|KoUWYdW/\*/\fxOu L $( 6& NkP s%JE6v"5A2WqKA Ƕ[83mڊQ(JKܺuTU5R6 -¡h}Z< 8Mjޯ*e+Ye Z:bo+g3M/ {?ρmosFERR.{>>/ٵ ɊAkslcc1HvǏ} tvwc/ڝ\0o{EEc9(C R.X\[zY"vZ(^-)o 5F;V~|طU%WҏF :ub4mZÖ~a~joiG1>#ZiJAdF"c1750r>uh'nX/'O?fxֻ]~z ln\wZגU߃ZښhVUdPr%)Nb%zi<6}{h{KU#vy]xMb4Jss"0W*Q,)䩆u[a[_Bi]ƘdByj5Xњ1-2E8q I' \ ={{l?BHb@( O!E1ݼĚdkZ'C+; IDAT?略xXXkQJ-:6IٷbR;3=Q>G8u8ϟK_5.5Sv80OVZ oڂkWr9غu+ SSSX$6gnΟ=7}}}d2>Z)j* s{ ű'ERT ݻgRk  $A)B߿zwWem|cZuz8Xӽ\fUSZ gT*={ׯgϾuW_C&>_}ϙ!şqj*;w'SgH)"s/O_OW^so}8~9Wߡ B)ϞVkc|> U~isslg>^='O~"~rD?|Jmo$rCClUX/-n$@cqXw#;J Fma=`W5jмR5mh@ah!X=Jĥ7Z{HP֤e]Vj}F^-ZksOPSq:_v*lC$$S8IR_ Bä7*Cd-eKO8J3e.=]{>t`ĺyŅEn'˖ QBTf\KR~,:5JȫG2i< 8XH\ K=#}PsLa8[zp`#L,#yIkXݍEV8)"C]ŔunW+|g) Mب\̝E9-(vUuhIY\L}H¢eZ=n*@ZsX0QIT;wbʥl8 n9(mۈㄫWE!QO I( ꌼqֹq L3i\>-\>I\ ];xop!G_z_y??#o`KOhFPR188p5~ۣ ǸqSSS8!$Z7t|#oS(X,/y)j]C$XFaܿDw[xs 2AP*sIΝ=> h]{^t d8u8?{?UxYNLICb󖻧O܎YG_p͍ԲG^~ o¾9w4~®{sA?K!O_c^z8#| tزe}Om6hMCxh3& N2s%:{#ti!-J$C@ ՚mTocֶl<)JzcRPlbktdaj9zX Wش=#IDՒh\W iz3 %j wIrys7oO[HҊL8 U^&!LF4Z~Vl Do>N8_}'KؠgP8T#uFσ3Uq' ^XĐfֱq fJLG>O1%l_ 1@HB&_MH)Qr u#4 yV'>A$*r7n\]wu{nv RÎm޼;or+ qXؽws8x⩧غks3Aپ};ٳ"J)oJ˓B5<B6S/[@,'kxbZ5X!hb &'O<֊!ԅ[ՁGoQJ{>nr9{A=si?4O>Oӟ. &>6:ʑWylߊɝ9=6 _5R}Ew vٻ"X }αo_1O`zz y?W~7Rexp1>#cCˆ BeꝖO.DmA@],֭څ%К+Y^\#qkUk Wo}#>ZͲn7rƻ︇xoƭU6W('!^`ZimAzC{^C:G5qgz\G E&)q _k&"c\xv7M"rr9*q?` J0$4J=Cbĩzd GNT^?-;q%KSHLasg26>I-APR`m"Qg7rJiŐ!™dٲ3U0:-m81iA:Vo ,V)R_<׿2[Gqh+r}l5b{~8\{Y?uX#" %>؀8WN`Dg xN%^cRerjm#HgV*:3d}MKִҒV@>_P ,JLOþk_#7nqcM)t ESO$aS~LhʥEKlZGq!"")lml4̝)'dzjůxg)o}Y~G>F+G/i6mmlڹgy_ԉcܸv4'OS}g!v݇ubn޸EZF>EO_FFFn9¥U¬Er[,AV)ucAkěLxHxz Μy?Tce4͛پ}׆R >7_T7~o-'SyB3>v,B5y0qg|]D^vE~+>UkNOcCh^%V{,1AA؊v˖VrBwj^1k6F~w]Zۆ6AFm${-V9J yQSI[LLx$[PxaPJ(R(c'֦lZmV˶R*Z2%|BTWwns> h2+B8BFnަـD(p!$RIN"$]==2MՑhE.pbT8!cGpFTݢ" P\y) 3'(~`!LVZTcn" I,1$JjLbO5JJCx(1("2[ D t֙+0>S"5Iogbl|Ó i5aBd=CxJQ |/8pp}C<ӔJ%+'HlV8GR R!#Ԍ[ KZf~v W( =ըcNrO} obaa>0Z>N\315 ?Ivˉ'tu6 e6QR}vݜ}5^ ,..0q“O?Y(-矧;U ΟرW!\/]XfϞ=LMMp )J421m ^&Ě;R8,BJXev#/CWt՟9sb'W|v5$hu"صg/Ez{9 m @>G{_/M<{],O=ЦM`)#ҴGXJQT)4fK?Sع/": h~,=T=%k6h6]$ܒ%{Jhb=)+52]#ĉk9~ DI4ʚ˔u QZz 5-.V<|> 2 R[\ĚL ioN p!vD/S35V1~6w>i$L#'. M>BH xq"mx;%^XxCϐAĒz(usWG)U5~0"!!6!8Au.Ϥ<:K"IiI1\>/@`hoTƲ Xx4\DLW{Av?H$Mnz:{șzƵD $$Ct|`!BIbrfM) /artz5￈H}r*Uh A QGb+PHz9ـ24ωWR*KōWyg Ï}LON; *gO&l۱(OTbvjׯ#dg-61W?@w>`_kG^ᅿ&_"m oʍYx|믿fX_`vn(D@K1ug,֒rTM!}&Nrܚ)zmIA?\>n &@p>_Fk㠑zvMH!uBG_$_פ)؟Z X qKOs[Z /1-AV~e*"U 5h QzysĪv(W-[znHweL\luzRK5oE6%mzטpu |(G@>{=y cXn WW}Dx1" BqYZ=5wVC+ 1v&3ߦR^`CT \v^Cs9rN]QMƥLDv( 5q-;wTsΏ =?"['ГAN I,&oN_+/Cg@P#I7oX)**TK{:fj|m[AlEV׎pבʋ*"xC.= S\X3ӓ(XˎٵguΜ9Í7طh/\ܙ3ܺ1 HG-73;; ^{ٹYغuN3S䓟wA)arn__`zjr*0 4o$vxҮv9ר֖^ >?}5<&zzzfllM[{ȇ(G^K~惔J: ÛrQOǟZ/ ^`Ӧ8p꟱y6Ν=5_w_ֿwgHJB^\۷E)C lchY58V e *:Ds k4Yٸ~R'fÑ&Op?

:B8h)$v>pL Wt2S'#Ƴު"0W(|iƫܾ\}<ΩxZ,l7eH 43X)3I0hhe)w77ce3np9BN>͆ /bE۸78g9s8g&4G"q:S<^Μ9C|G{Xx'ٺm׾L>þ'lH)fbbM[sN>0wpp FF'ylCs!RmDJֺM)OݵW2]^b]LR`̼!홿/3O u;xLE]g[w8{7ǯqfYշᇸ{wru׳m޺Dz;J"Op?Þ⑽ٹba-=]q56m<-?5_Go[B-}Gd;7xJ!O XWgysҥ;zS_R w5gж]ļ|ћ޾PЯ\ "0 OAC q$,u-qiyƺIE*xo+hDQDET*4mEȤr]9qLӌ$ QR3E3S^V,YS3n=ӄa 㚨V 5yu8|{CAmH~/5 JH$~2`9rl{Lnj8y&$$Lc zũӳ@Ԩ>RG$ brbWvdUAH`} )GG9rn_~ӆ(is343Th9Qa&.2u:tf;֯_ϽG}. 6mBWhYǨVh32:JRÜ8cq@e?8p#Z&OE3gi 8F IR&Jgnʮ/ o|#/>y.4GEɓ'Yƅ۶1:6\c.ömD$ǎcn·CyN^V|JjF<%PD;(˥Dmg[U`!g\%ZbeZ|. IDAT]~KV)ŏEuOu?_}w~?I~}=Pb7YeN 7ցF|HAȇ>mǠI#~ک[F4`2/lj]82)-zn m-?c\uv1X"$gQ6nȩYQ G99=3" Njix!6lȖM{o|[o{VF+5\x6.v^v)Qmjطo/|{L9Mcf!YOqzׯgcvyx7aZȞǎh4֫l߶@9A`qLLL9^t\cǏ;dc8v" jl`+{>NL辽aц<ωg33vRɡRے*G&JPҙ"a㙢 5X֬bV,KYj~.۰t=-c箋~x9׵-; l9c*xJ!a8C qI9V\:y("FH+ k6^I!%j<57^φ T?|8) -aF875́{P #J:H(R+ffy'sUW{<}!%2ppAs{x3:q#6*'_W[:ЮRM ];bmζG \XWb ,_̂īK:AWqu,zr|xڑX]\KGS{CJ5Py(NŌp0JLӒT + o{;u7~o㝼7}N?#he4M(hyvC$Q @g9j,ٿQB%Q(D#Dq>KNծBƍy[߂1''HOL1Qal@ *z!%%¶('}YR@ ZTYHROQI@,DբD8Wgx zY&c 1(r2P՟wugN"$q1esAz^WWQNt~kkYZgڛ[\ӴP\ ٬-߳5;EV*rhMVٖմa #WXv08,l!Ywyb^Gv.wS7gYjz8 0ցaoPKEMߏs`E(A1e(AhmdCy˧# de@rfT`C@ B%pOu BHܐke['PG B q+JW0V @8^a2 iPHWICHA$Մ8X3X:Y$1a9YfO55iiCجCJ/H -':|DG#0rFYKw\ĵW9Ⱦ8k8ګ/gú:QGi6PV#dl5˨^ārrr q\s0M606>B Ϝa|d[o[^{Q{lʋ*ﺘK&rB0 P%P2Zй@*N(GIIɆ}h^pj$^f(HQv( ['BRA(tYBPB,4\‡*,&z_rɪu8³K@)yNH%pI?XßA \&% -;ahߵzH5duՌ.k߈ke\ ۻg/̴̲+YE3 ϦG슾{93*X 52d6( z,SSS8爢 ۪$Α r=˦ԫUtn]@ J -~m蝲9[2޿9P]6.au9k}HPGvhmssrӆ b,2'N2qaQ)OHFcrē 9kf?H8Դf+9u ǎQҒ.ŻvO<}F ߹H8zt;}1>xKy#ZxEWmrǗɦ dFn~D;6oYr_g:?(A囼MAYػ0>z&Z>u@*b$ƒZJ5&C  p E*Ip[S8~[m]F֭_y'g|X9P:9'h/+΄oN瓛w^)(TaƀRê(\VbH%+{͗2R^e/ k+)rz~l`rfXn#y~coEG}V<-FvBڍBe n eЪB2UBC э9Reв̚_>?.t,V>c@t!)$˂RO:f@P$u g{Z%#OS) B! CEHpG !PJ}Xt'+('P*ڿ0Fɞ⵹M)0$}'4|("R cj4 0dl|JDqUbax@a^|V&,X /׾eV+L8ebӆLRW2,GNNԡ)6|\qTj |fB)cq;$/oK/::B">o|S/Hۋ ~e4 .X b&禹B7+U?‘[Ɂ/}.F8Sͦ4 S)w_ KKS,$Z[@ #}#<lڰё2r)NMqEqRƵA f g}藪֑8uTIӔɼdSP( I<2B@a(Nc.G4;w\B'>|CO9;G謏%D:QH( =OyI}$˳$ vP^TѻdAye+Y->:v:FqmRVeV,QB i+ 8x5"G,[yP/Ո!Vg7MPy=;•e\mb:+Ym~.cmFrɛ[Oc%saVٶxa@e3|} K7o̘-ewy@pr]38kU%,IRh)B:V:HD^!2\f)QDwEgцҬ+#|`N7!T\S[s9RUXФ;uۼL?WR_AzqSVIӔ<ϱ֒6>TP #\rM6 mpi(RR!&qLDǒ,H%H B/ X8oFO-?ѷMݵWYhrxjPb ڋ|Ag6oע{vc8pmK Zݥttخu, W_6"w[ǤZ Ht}?^w_MBMt;ʭE!2b>VOt\Z뜿J uumXk SiXϾǢ{'=_U .n>Xmr 4mP V1à=) Kza@cOJ% 4F6QN)ZOjk|jBII9 *>6 )d)d8jbװwi#xO` 纉Y'A"ۦ'jz/FQHzZ iIT*!"#:PÓw.P!%P ^A|8$Hֶ?R xCeVyc:\ Q(I88$'!He c4Y^;퉞{I!; KqJ9'Eo.g*'!a7pNSn?;Bd;4:˨,OK^.'5$|9}ȃC х'+[+gp:s=/C'@C, B1iVJqs` 1 &jk:H[q=qHf-r#epA޽⏮HH,R(%q]eVKAfu1ݎqxXp( "2YamOøU'B`ZG63lsZxQR!$ԪOWHp m2Jȭ%3% PXK@Xᰅz +h'P&\AH>I'[l(ʗo٭W qo_n<TF+B0YDqll*R޲:gdd()PJ # W Ea [OD>$K86\=U;ao5}`?/a k;&%c _R-Xu.D,6ۧyh^m f@6gG^X E?݆>3E=#:_}/Y c6.1C/9Xzτ\M?['j?/YfH._x,:W-zV[1 CheO>mKj5FQa 89 8,#N ͦ_WelcY+C Yǖ:GM|8M:#H P}V>=0I^>('Ӿfo_DN' @€$IjdYFhaHER!8f!O3Obj$IBTIFGԪ# ܫw%Hu'VIAAx­ȥ@(^^ɈrjOAiAy t8zCf[k+ %)H*'HY8R+zs7T ӓ9B  DT$!J‚iY͝Υ1O9w>e7#De˻9y.OsLci}(r}!|(-Rv#AͲ­o5I)d^ɭ";m,\hie X ,Ȝ2lRW29 IDAT͡JL8uhg1!E-dt|=VFA}}B@)(tnmN259 ֍Tc\' S^$$ `d؈l>Ny?RJ9PH =Z {1\KѡO a^MTXtPm+:!2ŸVη N ㈨2TkgfSH,3$^IRlB T9?2rnU0VzW9, )摍<gk<}q!Z&7mᕯne~iorys>K?'quP^?}n|nE~7╼h@kQo/{+o>kb!b!x!aH=+X(4d>7G=9eJXcL|(d,T~BɅN24)(BIL1@Iݶ)%J%BA哷&/3qT 8 Ղ@QX<=IRqDV6:JT*1*%8sHpµCD0ΫLq٢SGF A/8@Qn+p> 'Qg\ڙ":Nls/9? q^c&LOL(qT*IHJo>)8$ 8rByd,JY느2g`BxE1Y XkZދEX2kp=SNt,2Y)9-z9]i}7B .Mm 1:4JSnFǀn'=;5v=0BJ_އB |m ۶XjQr'NL뮿m;v%ei<0? %JS}u"(߅x mSho=%.dN,5խEC 1 z†8@#4m`ܵ9WL8 u8c)"[!$:3( ,YΨ*l8Sia40Tyà @ŃC-'D&ªP ;Zj1  _ S륰1yT(MT23̶CDŽT!"<'Ֆbnfy$a+qHVV%'S8T&iJ=$MI•QJ|2[G)r"d/#:} 8㍢ gR"gp&#$$ CF$T* z8 VӸ"S0qZt)Z -k*s{i)̟t>_hX볲~(W$qE;i U-tZkz>ۻk_|CgKt[ֶw<;b!b5x ! I=iTtd_ =jɌWlZB8C~lSq3,R)l@9R""7*J0>$sSTd  'Nl“O 2TZdvVNm>Qt ߋ91fI~4%ÍHPƄA xűvwWG$S_rmު#%p$rWXɝ!0r=3r%%k zQ J8pDQ@ @lN4i C@n%N{UQHo 8&Μ,Ƣs0z |ˠ\NƸs,ކOmZ}KSI*]/k7.\|ɥ=g ^w=Clڼ!|q;9}$/JnOR`w|ﻗ<ϸyK{"ZWy.\}uq?o~+</ uX>LVg]\sx[r?“~/:y˯cGFZ~&'_v^W_*_ʗx{=[^+n a_ ?wa%6?8ti6nĻA.En~Ǿ'U|Wy NK%SĻSw`>m.߫Zh ~c-ҳ` Xr^y,: UAqK@_Z4gCyy?s"C>>]$esXc0yU'&(I1HUL2'$fӆ Td,8EG87Ϯԣ*>sf}Jv [ da2J$:[[g`ߍ~Zd۬wD@ rB Ѳ\ J$IB8`ɲ,KɲF- 0"R$q$Vs4ADI8*H0PAn bl,IYPI'rAIT?.'N"IT3A|$5hTV[8ΓE3yܴ$N™PA%$q$ذ~ "JjQJA袵up&9[U(Bמu,@<8y;w^h}K|3WV>E_O|,W?5/}3/|? qWB=7G=_e?^2Xh 07;_ 7/~?^L7k5;k^z~g?ʗ>i6o??Es7/.f7j59qb~g<>'bٿ~㷑A,_g_$6l+_<¯"g!ㅪ*1$qxYUS?h%M~k&:Ik<}~+|ri@)jHVD)0Ӛ60"¶7Owk\F(H,o(,*81Z%d[%eƥ?R_1E=8Jzb@EW7Qӿ0z:SLŏ3u^ly˝H)֯gu[7XFyڢ՘57Kl"%V:kcԢ "w3M?y'{ȡ'rqL6[8]f(B<je+ ǃ1XHmXn&!RΒc̀G G$a"@( 2&'"%eV%QYED#d#:qrFq=Ǹw>==< <~jSsYAc85uH"Š+o[O"XH"Cb:ϖ2laՓNs u hs‹ذa#H[-~!j:}پc'###7¦M[شy fx1Vm122:w}|>.ڶ6~ݦ,My'𡧹+k!dirK!W]sZk{vZ}FFFyÛ4NHz#e]r66m.[xys&^aF~%x>ncM|#js%GF7)NX~|sjq-|n=~j_˭cۆy}9W ت/Xkq=db ,AwZ'Bx>ʂn0i( cHiCEͱq { F!:r 6ǧy'"* ,%=r ` RHD/HAQM7&{k$k:~`=AF﷬G)*~>֚8Vֆfy[ 3d .S{k;ME<X+fg+p g2kIp!"d KC915jPPZD3ZY_TIH{cj! ],`)}%d əC:{|vɿVccc ԩ Nö;(aK81q2Ó .dYnΖ-)89q Kj'Oca5]އbŗwC\q5T*ž1l!K%^UtB:/`ÆqWtjʴ]4E}r?67;=wF'&|jN;c1;/˄sbM8R00>wmvXQ^0M.S|%ŭ/릫N:ޯO1^*ģsoe9uyN4*dM#oc ad.6K!kO+ky2/{^p+=ޅ:~ǰXٕㅁ$ 􂂛}!bRXl1P,ëJ(FMAjg1"`fnZ͛Ea"" B#JcZGfs6RVɍjDH&ZOUQbCMA`uh?8ׯPD У@*I3mV \GctwmWH)E26RYsRZR) B!J3VYCKk4ey OzzNTIH* A(QR@/d =8rirt+;TH5^خ纞|jɡcRW,ñSޘQ(Г2P3fr;c\k T@HjIhzF0VÐ$ **SP^-?juݷ;v,sdCBy峎/QWS/]~~n|ɏ,s33|~~޺} *Wީ!KSwo|)o~nz} XAisLg1C 1C Bǐ:pgQ'𩢭jI V]Y "(<PDAFs0T\BɱC& aaHpNbAH06J %jRRBE-R*SOC,AyuuIz {`8ܘӭ2 >J 4GwYY_9SAWXi5J"M= I VyZ5=&-a :xb(MTk?y^Q$Ø(a%39Ҵ9y0 jF}NR< uKs~b9N#?oJ.%KYWM$B b(/(Ӯ݀S>S{AChgrE@Hg% uEV#0Ơ&(g G&s=3M!"dQ(VI*b>rbv}σ)(X`oΏ|K^r6l8!7mO(W\y),r[ |Y>4gΜ)k 7}_yuA[>$|kq9'h/>F[vֻKӥi7$7Ak_KUNuTMoi Ej^ޥ|8>CVq.KSGLZ)Z`M̩^\`Њ^SCaHНDЛQP1>J۶Gњ4Ml"S9V9A8l8͙iܛ QE@uP$d0**BZ\ XIk` C[vI+¯)ѭܑw/w{ДAڡkC 4 '7 }JB _T°~ 0B&I7|1ֻ~F! Tρ6HEPi TO"bR};4_|#{.;_ ?|뮻?*fk(,/l]}/7Л^᥷ťaҭ/{ˏ:n1;;9}N_>޳>|/?7xhn%~W W_~oPw 7o{UR)b)0tq>ε]; Foσȁ=^ܻ??'+7*{&X/>06(!MSRdPx!,kSkܹlcc3$"/:xk"@Dl R/iRWuR]'f"dYr񁐑1/1\Ⰲ_ IDATF0@UV0)e^*Q8l/}P\P0yQ@ҨRyQ;14j 60֡┮ 1*\I:UheT9)`˴P)!خ2zv"7ZN жE!!=u"/0քM~>iR(5q( Wf e^#c[%Az$j9>Nnvh\AŘ˭rJiٙ5`7~Gĭp `y53a? 1~pR@(bǎowGjW~yOL)iкnVW ,ҏ6rCnhjãg'G}GSkyfxP:66 _)uǴy׷;爏;G^f9tه{ 0#p ν aY"ݟK?19f½6f F-fגS1[͑?~ x g3F?OvsX\Qo^+qБxCa-Ya>CNObB33Ӡk(tP'i/<-f]$)k@~$ IN^:ù*TYdϟ@I)3;M YP8p_GzN/ ,/r:u<|L:SJ!~@ղ,ꌐcs$EJ"k-P$PC(fӐe(ȭ%7N7$IҚz d-A*ܐ9vGO$IB$hk IB Cƺvt+|mȠ u/ .)?|~PS'O`ʫ-b)b)ـ) t M>x[XlQL!hIR*ezw[NvS{2uǣy:I![ٴIfvvFA=AũF 2Ҁ ˻!Lj1ƌ}u?Dʟ )02n=2TijG01ueI@@8DI4c9~ZNn (]VV>M˃*CzGK7c*Sʘ޺0wB(X_u@zȳk,VzZ!$7rphy٤l^VM1SL1ES"h).~LIf-XN|1Мg)ਁh mpk 5"9SB!9vVLBJ+" W4%4J+ڻ"/֣TAkPX c I*EKnۏ*vuyS#FEt>*q͘S\t8"OEwp\٣ mԵY}h8sS(61tɺ]8cPN&$PRJ_.9C,;wŊbE+cA zHIDIy^u`L $FG< EQ?;t"1G"9%8A̡=A( VWW`nvc'㈢(ج@:zݗ{3&XpEEenҶ7k4ӄ9xq:n7@G5$AqzC[طa2ZUgW=#lp\ຖ(< A~Cӡi 14(c( ZH*]:vc- PZil5q-KIL2k\5d=+MZȄ7Pψ /ت{\nX$  h=BTkϭBj?ۭ{WƄ{ާm1O=HLV픱96ڼٸ~K.$s  L&$aLQ!#:u34.rbmNGڵ`# B ^7t;]lfcmJ&H'! Gx,8w $iENVx F7FeSWUa\á`}PL k-}={wӘmR,&%][c:N[G PEQtENOߵ±ݗ]Jvuk۬u;xBj}D#ex%s!/$izOo?.ձX}D` (S#./BШՙid]CQ Ɛ =I}&P1E2Pɐ,BV$IQdo@>"VJ BckmB>OܧbǤu)+O1昒@ ̼`zx!+  IݢN>) ZǸRU OD8 ڹkf]HKQ0`lN$I=1Z]k=N) I<O!GTH'(cy΢*×lOm#q@ vO !eZ pqQTE+rݼE7GgTFD@]r#T#"fس|s>78bYALmΙS㫧:0RhDtz`$}kSRg[S )i(E!Y9n=8 [`]eD |P)ZHˈ$IsZ EOQD#1ayz %ud(Lk<@HT@ކ>A G *Fڎj]$?O3!}&ټ؟x̦mriU;gQkͷޜϡ;f;5˙$%9/A\z&cz!-ePVϡy)]{'噯[R>MelM:s SY ơL%(!Lw8kQ&'k1N( u"ȿU(D$֙c׮!+(#eZKͻ]K"zsn@84 /^f̶UF(އ@^zH$U1]32|LH_*U}74փSC(!%Aay G BY?QH$IPMA}Kp>_WPs[>AcG xe<&L\M$ӛ)b)bO[O).^ א"(xp88RH(i֐:Ay${P_tWW}'=7yQP@xO'b CǃJR|"j ?8_ø,g%ԢZ00S s uNVPpWj 9+zHc)(7R!$F<*e!w 7CXGyLj z =Z[sbtPI*쯒hѬHaaAe ZJ8Q)%JǨHHR5P׃I"ZB +z>Do0JR+ls<&ucp>1LOg]VA{AL<̘Ԇ)b)17}r!Y1Kιe9G7M ˲jBR$.Ld C`85n7gDuk ѣYZ={ sPJ#e*+@(3V:d)5Q M0U$  5w|q6#ORENrrst W) e^U39[bJQOH0;D'*%ZBf}rCl0vb;O4w,wqzNRO5$:Bit;tZmڭ5N.CO)i\7"e. !Ged mGƒY&Wi}I B{ߣ B]ǤB8_,CDQL*R$Z2WXKGZNF)ce>۟mWlJ=aEMRApօa`-‡nV7"),رHQG 9Z%ACUGzo|.EeV1yni]e+QFՈ}DTF¾ ^Ă/Ғ*AlH%5͜Li =X2(W)ɱf33cFAZOq,:‹K*s|+GfxӔF3dۻwq aA(<Ce\s͵ӔcNrqNin9v(N,tg6J 5`=Q2TQ¾4u $g֩%:Qn!|n V7f*=}xwHeA,X)Cv:$^k)5!g"^S-X5D{a" ggfpa:ca9E!h]R)H8L"鴎Q0.pnde6|'Ico%:wMZIf=f ǖ[}2hXh^yډAđ"j,ָt,rl?s׉S\XnΠBy) tS1Yx@O'FA8vJ;@TZ|q J)kn)(0Y ",y&cҘ,4 a5~h T+Cĩ:A',YFQ#箴(8GcF+bePG(k$+O9R-eΝ\{7uqE d6_{Qaصs[o,Z X]]ur{_Iyآ;1"_ӤD+Ea Bc:@HIq5q[{Sn`qjjqY[؅I zF8+S.t uxW)`Z4' d]P#۝s(<x,X+8Baŗv@]#D+"ZiP6(E9=tka1ԻFh#p$I6UFA!g q8h*;Sؤ9`Ν|wx(,ummǎ9x-V1|_ȑ#۷k {]w}Op^}'W;nga~ݤ>c=<Ϲ喛'ֻkqVַV|+8i}`ᓟ}kƆ1om zF0qaz*Y:g~\8^g vph >3 knXֶ?2F[~r{6g>OWPs Ϝ+OSW@c<1)B1T%sIrbMij8̎剔DK?<7o=Ζﮯb4e|?Gwxgނ*NQir8ϔ9bg]F "o\oe^ct^!\DjYR:mWh50X3yX_/>q>}}G?E@F!lK)* TqbZ"C A$iJŬc/l@y|<`c^0QNCze1䂒CQϖ@bC1 3Q`ޖₗw', f側%Q%9J " >3y9e L’jI#oԸҽ\WϵW]UWr]ٱy%b65NbW$Z& 4Q37d٤Qh%$XGڜ^Y:v'Y>qGqӴ[-ڭ1+R,7u]Xk~7-~_o=ħX]t:/K|??6?SEqNe {ϟ}V?˻N˃~8u0O'm|y*W瞉uk%o$_hhu۝oG}m='>I}8RZTJSL1S<_tFLq1b?gZg㓱AyY{Ri# `OU߹XqTx/^o׺6WOֹ(^FI{l8k߾WFg9\uϽ g z%sNs7>G  M\oj؊/ LI"3gBzHklAs[PMtTi-r`iiFFHZBTƚ/KBz+CXNyae!~aMVT9c^ckk (3\ۙݹ5k9xsPcoN E,NRk (:WNsbn8e65q2CGs)n\z%>lIkˍav4Wvߏ1B(w V<ɟxࡇ7dk# @IQ“C4~3|Iv^{=]{N #GQX:C)Y߀8kޡdJaXpB  J %3u/.lRʇuR cò<BzT0 /$=G8=ڠ%T)`&e 5 K:wY kkR&  3k=kmLa憢dyN7RXk)`.U0FIt@(*;^ )Sq4ݑ#Gpq ^v|h4x`C1W_ukO>I=A8{8~87|3W\q=䧸cio)B~o^^|e\s|Kcn|fzkn3ÇsWL8jdL-=>A~޲`]ݵ^_zyMr)b)|b&p&pb`foty^M-vla+$Рo ;)M0y- :EV2 Lx IMIGk23)w-8hz~"cIa@~Ed;,xY7 .ss]9W*O?X@ѡzv/[b6EM[Uȥ]W/{|lmZQt]Ěuc)[|QjSDq%|G9:^/:- n˕W_KK/߉Ien")i'H{ v|SKl4h,//@la/DJ2/8Ot-N9_zY#aXՉLK@"zg5JJw}y/ѕ~@BAa@T )ߋ2K`;kcNyUiGQmRu*%ù]|q֖gCHGiJd~Ɏݽ;ػk{vd%v-3ۘaG YLS9&.EnMN)=Ǐ}xt@[]{vo\XկzUoٷСC,-.q!>ٿ|3/_2}?f)^r Fc꯱'aٳw vٽ{ԧW%/(_}W}++ٹcǦexYXüC }H҄=yϟC0փ7m/'dqa+_(??oN8>O_nh?y:O%*H)82\y:7%Wz/ ,,q:̋^t6(%9tX0r]pyMb .j?/pIڿn|WXƄR=onkڦdj+QѸYҙ>_4*.Ə胫<oh)~/ar"]֞&: 2JH$ {>r/{B96Pj)g_msπ0WcӴ!9Dss5f3}ر^jN&t܋݂F}v+_ ԇk_H`m (zy/{%iJWGJF@.%G|f,ւPn<˲1Ovmk,]!3Jib+=+5N VGjK8$ ބmJ "%P$PʬO*Ө3`ړ~權TcTEU:QhR"߽!0)t%Z`[[;s&#! $-"{Mo'<9!,d ˜,+ E`IIH ٤I7nn6t ڃPR{=|ݻw'^X(xyQ>яe^'|塇xoz#VO}3׼wx+_O?C<#x Q|rm{R 4O'mSKR7]?y;զVVߟv?s? 76m@@0zIul;.Ll3Bl¦b)U"67܏L(w 4n8zM<@bTW!J3A%icLA@ ޣHiٵ{Z=)5tJ&6bNI!/uSn%~UNyuH牥FI,52IyjKܱ֓|_oo|\_vtҘp5/%5 e蛎ɜ~}vb2K8,{yys2#c)JQySʀ!p2zLai0<:Dp[ցvf  uL!H;TcZu dF87R#C@5!f=-x EnQU"m'D%6C)?dhS{CX ypA@4Z v9[= JA5wy7JVnf/o/O?~|` ~w?{9sfW/}?3{,z(}³~EOs,.^Goç>IOOjz>ԓG?r`ȳ|_,8} ;??s__&vct/-1k_~~tt>8&XV }zG6 }Q>O^7v3qmVMγxW$&1IyqwCo =~z86z*ٳq# U9B IDATDDxȲn2$zʈ K # ֚$1hד99 ;kqY1 6fE"x|ɘ!2s m"ۣ%F;evZR6m2|cI0;3Efg3X;Ƿ_&dl1s.ʁǔ Wo}nP $x [ xo$)|k'V,V i½N(0IJUydf4im<6|E"@X{ ՈYQX<@փ Wfeb"!D-H Q8R[#P.E\%[ $J|YGǝ. `:tD㱅KMC#"sRd˘N @TdA ,<~߰Rjg}= s?r@{,utSOr%y~jtΜ9c=˗yk&{>OS???4Ν{ᡇ$I~7~8w<>;GDس4MxiNQ̙,/я~/'~x[3.\,9.n=?оtm>gaq R_?#?rl>caRԕ'O`]9ݹ2裏Ϫvߺۯ}1 J}>xcnj=|Ws GN/0֝` =`:v7yo|!l%"lGXoϷ:=4Fkտ?'rZ [Qc)v>fgZVU:]vwvn}7/EAA]H%|ŖYj2) Η倅@Ե1Yf`=Ԉ4d*X46&ЀՇv|E1$& ld-mtׯ =RIjt Ǖ]<Be,]yGY /ysʒ!!Ĵ*Xwh >xy0ߞDP3==}9k@?D㛁 Z=$$閈w U_?/蓢Ѣ)=g')8 Y^ *H ҿm-Bh?͐2cMdTAm( &E P=\YH4(UF h%fEV' %afD֋iW!6vjP2d!82 plŚ,:AkCYT8t:Z-ڙZvn6#O V4Mq^c}h=[xE ;BRfyO]TւY}sfǟ]؎`](dvG)3mN߽6U~]8wek-&^'w}'ěri?2ߪ~}QmH >8@;f$>F ! 8/Ѧo3޻:{~صKw2f;{`Mhǣ[rï@;٩׻Ѷ5R?ֺ 5 %T7}vGenƷ:x؂: w_,McAq`h1<> ]) ^ڏusoU^1En4CDYR Uo |=X[Q&ŋBԊ+%2a,;O=:Ӥi!~Wo=E:R&RC 88gXK1dYPx,`cTցǐ$^R Kpɧ12Wr坷_ 9tr#` LJ)L/Lә c3rnϒ&eQB7c0Luf9k%~/0mN=I դUI  HZthjLzP!Okg qf1ӔxK&8lpԃulxd(cOjL' 癝h Hd;]gV|.zt0("`d`&vR5zDBd<7$TYE7J"k,ٸv S|Dxߗb}7;`GW`mGJX;$wbuZw粭;\XRlW#ą+\Z߁?jfwgfn<9x& n4ĝ576k{|g sÞga[{6iqN::w~9˵cS9ۋo'EO]dJ4=꺤ݎ>@8W7M(CSh`E!)!I!hDQ(5!a hc=&й2-7T#DЀKG .:n;S+IO]$ $18W4XiBHX8w^7ۘvll^efe~̜8ɹif*ElfP)2}$6$ ~`Vx2$2`H;@C$$e]#4Pjx`У,Yeyd8Nު{CI}W"Hv,cadi&^45dyIw}ρ;@!_Z# _8`zcuυQmQ2vAno#$`*ٻO{Ej70A|nUɳ1;.zS}V^p;6i v] }t;SLkGd&* \r" sPu 8\mCTt 3CW<&3E59k d&Ŗ+Dc%IȔZJ"+kpTBbR_:̵WJ;9c#$raХ (S$r M3=hD+8y<ےLq?"y TAbƱ",eCV5JiZ5EQX@Z'L^C&;1q_;RJ!4ra0h$` T;c&9֔eIlUo3tAⵍ6͞4vh{^6WAqv7?LyܽKGm7&޾~oɝ*vE怵v%Ig>:یlۇm0V&q[)uU'C .Y*[A ES5UPFMB*y+ICV$ ʂKk eƘK XcT(KY4Gy!DH2YN*zu]Ǻ@`ۋ xR0KJQBkjyT'eyiefÇ| oUv5y_pԽln\7f{V $8oD/ʂxԉh堏jU19Ǘx b]͠AkJWar͙<`m4OX//w<g>LCm=(>ok{Qin"xmZV>$:\UKI-m[hBVΐxjL'O,| zuu4V&h!>2+(i`E64:уJ6Q憣7\̎B!oc 8==mZkjw3'1Z6s1C~w"Nnq 0YNbw_ܬRq@A,=mvU$0&ɩ 1LOOQ!+\5`様n%q@S .|@e%fVV$8 ylYR VKBuLؒ q#ںյ+,..r2ΞÖ6ȶjKhxF%9Vn `hvh)@xy^}mz g{xΑH$Cp4RH/&e4D'RAxwWw^yu\]vα%-s8,-D0ҼE1xy'aZ3mV^Ca&o|}$d9ހi҇{OoE*P U AZ F焠Q**ՠ#|c3l/\t^K35S.wi$r'-Qf!\C؞GXjxRDSaV;AD#\laGOPj)FkBM衵QUQ5-M}$f6nFP1&2eY팢"jԐ)i A'#HuhJQ_[ti'7D J+0ظFj,b6-GQaqU"13b0S-(n0 ,>?i!" =BdYF?CшЀwYˠ(Kʲ izUUvq133Yn{1TNbb?$&1ILb8RL@[dd{ڤ$IFY[lpn2C'iegg6\ Q$&ѴYB 0N,^R7HY5RџFEo4Z$4Ef|FcȂ8w}<'U>UczL" (IrWNT.;SCgefI\qyEڙb}"6_P``LT[,acm_ {K]W$(ʒq9RB\:{W ffY啗^_WC15ayeVk~嫗HJd)n37JBtKUjҠ62K %^@'z)^eQ.@lKBJu%.mPU%V ! 8/ iFALBUU!$4~9 @alb"}GX| BdڸQWiRBԍPz ;(2:x(##h0Y@$ȺFFsvkЛ$!I&\RJ>Ue [x頻j$&=7'HE[$&qXlr3@b ޑA* &p"裏M7qA!.N9ghs$ut/SVd9ɩ*'E|m4ə(t2J)(Eq=>x@jR zDcLB_x%4AU# Ṇ×$Js|ee{= [PotYJ<}W?#MS|IԧxUd:ʬ{d ~"cHt _&9kju1̯Ww0\3<~:aqyjܯY8 TRQ[/[Vx46㝅i^x^DfB [9D6剮DGxBp xiJ]:`FI&. U#!`$Ǥ)! $ʒ dK]fP*/zUu4xFNQٚ^QEkݤYV+ãZyڒ% eY2(j@rIuiˡQ߰GS`Sv7n=7ox;caG׎_; ,y\^W $nS\}:߳t{#-c9xVsԒѹOpĝIol[QQ?x}wTu>{J>& 9z J@+ReQ37Q]V7jdF aC:1ٿ4/_!+WwŵokÁ<]]k$8fg=!_$uaYրBG*%{ Q cRcȌ{m"!^%*Y #QLaDt:wvAQ(cDֲAI1(\!ʑЙB!8#ȘL;7zcP^?(QI[تq$M@MS$&qQ[[~o7Jh<ž_vfh59?>\͛a$4[[Jgi!޲V|$, 8K4yTEL"X7 I5ǖW]ZKt/_Ť 7R^w*V2Jf(AUQX[p"s3WI5 &1@o @Z mfg`zxoڕd4IamzG˗xXY&4,5:Smʲ I4T\hkN)[hQG<{ ( JP*YF0o-x5^7;넠 /}~?CHg-HHA"#F_jֈ8FE _4h^Kx>C^ŌW/β&#^~ |QwJkt&B'жT lM A|:iٚWlx߄A! S \m&{`ld.ja佟 2"M4˫*R$i|59]‚`0 iQ`ZKZKݦj:߰_dC=9C83{ńk=*go]:9ӝ}&1;)RLg s3Wj6n{@n!;z_wwk}guh\=kp؛Q7l_vN,\7owL7{.I:dx86}2~RezR6ĭ~ r J9vb| !\yNtxQ]8uʃ9ZbzűdYzP5[S8ُxFSז<͚w"QAW^y+WgY9>ϱcK,.,cBhO"y&k‚'.9ul#O o.r[dFi$\x/0 /3#Fbl h+њ͍ o4l4&V9NxO+xN'˦X\TX|' e`.kJyͷss&~0"I<6/^_2G%KTeŵ5ʢL7Ɛ]F KyXuc \׾iq W)q$X:'L1yBLYL~ S.ӹ¢A@I`PP%jAaJJ=ۚN> oPM1\3uk+#.zxF[S/x6⒆V(z[3@4,cyJyRe" Ŭd& J+~?eY0==EHunH 7*J"{7S-f:Yr3It,εYks,_X; 0I&1ILb@G-ƻ.폈6-] >$p̉8_F9d Yb֫,I,z*8fq}2 ,-""}VҜJLiuw{w(h30ֳKtB, yyy{9L^1Ɛe Ya]ύlm1%%!s/.\ fٳgy)֯z* E%ϽhpWh \8VD~,Gx$S{Fye޻tܴ?jmy9ֺ%swt:eIkӼ S3eQޣ-i[B%A4!JR!=$E۵b"th͟-S\|xDKf-uZ?Ed&7^^84+IP7`4.KȎ!^?8'\|]35 &(k!XЂq62~ DkU{C 5KS303x)yGKp"+<{=2U kE 8M޹F M"%`Ƙy e-;O0Ɖ¡@LHq|̎:)ʊ@UzbT@k󆏭![[6E4l%,3ܥ~j ѓ$!F^RL]nys .}6"9ւs5,Yʲ(4&uԶ:ZI۶dvnۅ{kohك#[cnL3&QLp A뻒K9L M/ǖgHW-~n}-O$f9ܐ-AٔuK[hNڂ[1a?khn0~[C !R$3[ /\JӘ*ۺ87Bi;t҄ x;)-\RU5uU<( |E0Jh% eU}e3͡YSH B-xg#b{e׻[t=&11+TUԍ׊u5N<ٹʺ&oeT}I UUIҚEڝN`;ի$&anvY:-iͱtWig}sE=ϟgjj3@N4f^A]w,w{[UU*Uɲl˶/{ <=mZ`"! DD`ӲA01ŒUjmw9q˭Uf-ڬw=;{/B4ˊ29Il^/iӔY\U2ۆycֺ}VW;h9:#XoQB&u VPĀR!{cDH-tmj*F=V낷[uBʣ[;}:0f8,kΜ;1vDħR4a )bs%·tMTOy/ 'a1 ͒ϜZ|C}٘ km,K!ŭl`=uXg}-W5jeUB/'c10&vǮm/JU$i`zrΆ k UU 34x!@JzT!5cLR%8n^P ɭ”H@ T 4 ';4EہG $)KmVW:>u,M^#I,%RgCRu>s<33*i$MtٹixkA4;wZ3G8#+Mgm(5$2=uggB011cxwE`['% 9p h6tż~'!#pnhuYIQ.^Xԙtz29(Q)0#BI :%҅A(2 &Hi-6u/䧹yU*hWoz^  AN{M"e.XY8x7P%&!dx#Ʉ*֬Yc?G:V$$Y4FsO 0`mP Ҩ*J{i 9apMߪ{$e2u*4 D߁8> !b,AH1ATUպZ970&8ē3LL07'Oοh1cwx0(rDQ{|z|3$zAc1cbt9\VH.Par̾))<˖ [^BӠ˜%bfBgeiZ4IRS9ӛ{NJHu ɡfepHPVx1γeybl昙l\M$O9I^$EjN+xቈ(>Kk}V;,/-q9ff%K>.$FJq j5ps$$RԒcmm dS,36mpBm7o &dǎ |ۜC`G)R%+F2 e>[Ap8oBL::NyQOsƃtADR"r8IWdSqÍ7r!.\KJϑJ rL)wN xAa TnHBA^NRV%aLb9ug!JRҼ,{rx8CWHw i\n=el;TUEVڝy/sGHA{4%gM CD`#4MZl[ñ7w:GUN6v7&C{^[XxV䜣,]ɟQ`A)M;. џsb=+!':?l׭_U1+{Nz>}5}l:$Nx)1 ~FٷoqCk=9iVCcF5R?pLMMh) KEȟz+F{x3hH$!Ugh"7Ul @ A%6#nS:)hn* J `JRo6hZT`d1??3<˅LO1X&>SjNOVOBɤFO (R9I蘼(^#՚јdyaϐGVEZkG!rs!W8b䔅[*w?4k5'tk x?I\wV(0~IzfTxgu>#]9C΀sd-HӔ3Ϝ .,RyJg)dBgN'y˭ğEƞY&tMLgS~7KK˼ !mXZ[ "tk3A5Zˬ_)+ q*ȒҖI`-qVF38o rHeY7$ID(V+ *QT;6* d :JYUE@B ~P̣#Ke/[1RTc|U(TU #ӎ:SmɊW`Vm6@/IyŹ /GPZC!Iub~36taw v됤;Ƿk=wWNt_{LjNDc=ncHh Iv(FK|FE c ?T,(˒Xd) QBb]8RXS"VKj!笭cgGK8&TEPyJo%l]n"]CpfٌC癧cqa$ hy@r"+k82;3EezjOQonDEh$8b8jAȫ 5{H  Ξdišos$Q[]N>4ZrT]w%O'5˅6qViIT '$ N)W1E\0Q"hiL%xBXW0P0Y/JT 8Ous+OGR R$=Jk *@(PVjW-:oӹ(a׶;Ȧ[o [bFqq`vr1Ƶe0!}}^Lfe%lemT~~EQvx}]⻪ $I:ؗ?N[vĈ ۉ=͍VoߦR#m hۑ.m{Y"k!OR_cW] J2TJ2&\wI; K~o"x38w)UUqHYr8( :N;Euo,rqu{]C:,-G^WjBIt~.iʍnbey%50L0.Mg?/~-(!cYZsTM_/gq~gq*)"hQ]y=MGiےV i8{gyS߹>ypeuO,Zkp rxyP(rWHY˚sXJE"H*(Y\CNx5v_A86[Ky'qNHa#qNɇ+E b(Z / O7wBQp/Rub  UR"4qm>z)cLg8~t>qy"A Z6n;;ecܙTe;A\Hc8˽C W?=/Izެ|y,N5ZG` e^G |D#I*dQP|PU)uH+sGr^1QȠՂaѫ"!"(9sZ1vP>\/c"rV)SgHҘJ9D0%1RhRUNY8cum qQkiM& fuf15=++,./9VJn~SO> yUaaF%,_BrYӳ~H"~U&gfYYZVo,lG8PiAJ"|IJP &R^G{mePB"y ^NHX>Mj9]z U^xGOS.d$7f<ͯ5{-gβpY BeJs~ K<&(E 02'J'>FR )`mz"4J'/+Ciū//T|e⻲԰1c1ƸvI أ]IS~?>KEYD>T*$1ʓc&3 +/`JŠDR! Z<ǹIv{֦ŵ7(".'B Z#( F8sc<%HAfD#5(:"fF3_Ai[QVϝ=CQ4k5&j)fq䆣LNO!Y[쩋]|NqAn}=z .pi.RU_>dM^{q*4Cm(9X떸ɚ<){^ RR4JʼGŬ--R7OMbeuqŅO6PK L] 4Q!ʢ+h{7MhyLAh-eV՛\87xAO7Ƽ},/k_3Ν=C֚ú '=JX1jwjbt*G,16qKTsZKp%HNQL0>ʓW(QD k^%ax1&a~EXSPyrB""nQd 0X94^xJ1cTp{e#NJ4ftnV6yx簶ȻFAY;˅s }X$^z2(3Ye$%(4MdK e{[;v#,..|#=9d20;9g5A=˨N';'Or:J(쀨Y+ ++,y4'`l hY3_['h} L790bQ'["%U1^k6p[y]ŋ˜]r5oFL8D$݅E3H!:b`*,,;DpD)z52^!B5\1n>ʭGAڋxc A!^b*-ZHDDgcګ=e!SPhe˘aIS€ imYnPyAYz8e&.pz~@uihEie놨^CDJϑՏ\t]PL6q6 ͞f4/Q)z*" THA*zEdu5_bݨx1fո <'?Ivm;337l16 d2۱1aS"Fcj^6[,_p9zfsb.}/:7?G yf%l}alH[ێj1^z٫g߾?+];+ ކȇ=a/1ItcQңS^ceK?8šCxa.+p #a6݋o$vȶVVV޳@$I-hX["r$G=z|3ΡD9Yd6A`cAjR`'76DJb* Ic?(@ P ~< ӄٙ:֤QVEG-} gWI8E.rp#<$Y"lA)BA$0!qVHjZm ⨏霠OÖT.#M0Vzy(3'RVD{cmbGΐ*ǡiI{.tْŘ\a]:?-@(A8WL sjCG^Mek̟{Dj7P{Hۥ(걤(rejX 'QCYꍛ(%G ,BXgfinc_JA?9p ~I G |#KCz\Ɓp\T!z{{%ԧ>ŧ>9W& &;cvPV\oNWU6_s>Uk 'y?y1 FW_fo}<.6cvv??+nDa h"IOvd 8^XlH3&`+q|R^B}\ >9݈ԩӜ={n*P[/](,DIG22$oB+#`&ԄK9WxD Y#"7"ᐔh ɳ/"BRR:k1qxV|S'/K1T@cbnoH'T‰@z) ^Ռ*|(A8UH=ISz|0'yë_F XY/tXhw_Be61qnbv*%J5HbM5WOq'h瞅5ZPJ5L[B(wHSn s6-!cK.[&ZDd12yn7jal!(""DQLYRp !EHӔF3U}VH"yQ_hk/ 9ʲIΝ]i~~}/'Oy[roo~G?zwuiO+>O|w/2O>$wy'_?؏خE$M\s{?>>`z⵩WbYLO o{RΞ>ugO飤i Oc/6c1+ 3K_ޱRm=K }!MS#QZ6n3ǏJ$ /.QRc;=:" ;ȤD(h_HohE5IXWNQu P"@U#v-p~4Os]1/Hs=W狍7M<Ӝ8qb<|B=c~{o|__رc7xxYN[I c-utk_ E1;{sgOϏǏ'9{湑ރ;oĵ)ʘj}i~w8sm[[r>UYgZo8?vwc`S *]`lzCf?rsm|&w |16evBg=-7(T]k >]I ^Eo(ߘ`ߎW& tMx^D#U"{2+)BzOi􍡓^jQ:Ih=$\H!q^o*hf))u)B4 U%dކ.a(~V|֧$v%'(ZUqt;SgKxn39|V Ɣ4LO}}s]1qy7v^f67q=pĉ׆Ds="333ǏcnCvĩvFm gX>rs| ϟ{mZ #୵\ 1Dc1c1^I .,oMЬzJ6yHPıFk@VX.xC҃sZV#ceC)FXqEAe,r"=x烻,Ds`AKYT*R)Ȳ$(mʄTe"p; ~_f5i̮Y[St ȲAH 1PR1h;;}ZÇЇ>DX絯}-qSOQUQ?ٟ=YZZ~7RƠ_'o|)uJJG?_ga~otW|{r4~&N[of@P3}3If4QI]  LN_Hl~v-oȑlo=*Y͸뮠 mScπ#mi3Lm9U3%vSmocn]l]@ r>ˆ/wybx+-cs 8O$… w8'SYOe-9`yia- ~AwMףr "(8IFZ ~#@$l2i/A8E0lbTG 5lz >bT:߶6G(\P*YOYZLE^su߅2ݑQBPQV}3uDJŻ`y38c% U9BĠ蕖$~tc:&іxziT)-IUNsi_^F{Ej+OqXծ!dHCt8~ {Ǜx;ns+Ú%B8 3\De)Y\챰Ц2$h!#yIW5>jrm櫓&`|xYoqkIaоO$jUUgӧ }^^@-[ :8mRòH,8oUJ`Z7Fdžu\0`ËȃXu?R3T&B-8VK8B8( DI~^15=K0.\"RDi8 %Ja =|PypCO8Ls|0.z! S{Fy9A{j6 vG}t])o{[q};p/~/| [ w}7i*e;6|>7|_ejjGO^r~_lѵN q׽v}O:ZMdzp%mǷAWY츶g1c1+ޗm)_Ś$ǗXä; ~9Z c K f pƈP]LҦ /\xHHgi%)ILRg$ 1`8pКjPk 7HoB %J"CaUkٮbm6Vi20  V>+mfZSEs$HA-Zc=$qs$I³NCjjB9z@ID"ED o$ZG-ɦ'iUjJԘEkQL&gα,o dY̦]Y -*[n@՘@QW??s^4j8#Swxm~6JV<ڬ nRYl0VR uY]됶sC=iq˽6{b։ @'<yɉ'.RAG1O>8$,ӡҚWl͢܅3Zj))2o -Vđ+bQ"‹~5HkrDѡ*pU OEU$V8arrޤr%P*^x@8#yc*F胫C-^Xm`}nZ nDlmu^?|_ _K3=={^p]e.\~x뮻++z뭗OO9~8?S?uݎqizOdN7~;<?8ɓȏǎczzz%~@u|;yϻ}||Z\\8t 񛿹\ڎ~8yGy[ɓ'Gw P{|?^FR_җF׃8GŅ 9}x3W|n^0[Cm1c1^xE@.ЌHE7}.X#P2Ak?S 3BH*M4MCz[ =&vʪ"NԒH<XTPIb`3/s"E+Ҳ\P0ޤ Fv}tNU\6W( cC@ICm1fsVg1;= K\pzcvrz$xoZ19"v_\SV>pARbؐ^D2({RyeUÙ!!3s:Gl2X]6]EC!KUj@jJH=@h8m`c0δ31Gx}w8}_ċ)3Ѝw9δ>k[ykΣQx,,'x~_|o|>|=mv=s==691A͜{ }mG~>_=k tg ?R [hepػ6DE][K&ywvv?c ދ^SfF/*=c_M;7tu_'WH֍ۻQYqr׶a8ܜ ڣm? :^ l;ސNDv/\Yyʡ) D"QSS{)/A/G+! @f˚$6cBxw5^ jo}M:VLE$-EZjiDJz6pO0=ToŰoCgkW:t$Mi1$ DQ:3,ɲVA('AШq -:X!}B^VaI8̶zr1EQڒ*Ma+*9:nb>yY4[IqX\qB7t4N ORtVXY^M077̢3~,r_`\\dE8U\]Y8k9ٚg8~=IбY{ #J"9ޚp!f2hpx۞E/q.8-m^vT4(F') (B5'@9RXi$AHGԾq4kHH&cz: Tε!Uk1 %!YAh3 &gy'84;Ϡss;spTUNh" !_k\ T\f jpvf '¹z;s,88{:Y[^lۑ ?g'?I}/`K~~9>яrq~'rG]IF$>}eOٟQzm++!/KKs=[:~8SSS/EQ2>rg|VJT̩>c/4^&t+p%NX֬.._~¹ qFmz]\{^ts^/w=G_[v=zt=-:6#O?x׿k=n??_wP=(?{0n#٠,BȬV[S_;_|q9Gl߾v^TE7?v/_2wi#"c"*"U(($BkeuNFk-:JgQR}p::;yGOJ@5޴|C~7w߮Gԟ~i1Z:i>|WWi6nٳ/2o~ɲĉc|ɲx`y93~S|sw~wx껾<7>1{QΜ=ˏyLOoW{e|s)x}Y>qq/pz_i :vT*goS(6TQ| O![v5RJ]sqxO=jp  5iNp:5(!/rֺ]*cRX,JA#4#I#+p!}vs*q"Ģu` Ua|=ő񍄁zƦԵar΂d(D"E :)!QR κg~~4rÜ^R("i%kD^"Qv\Z"(F 0 !('PNbx%<8f~rs>:X3"Q48'^EHK9,B* Q^6VxhpTs:sj8?̏yxCŋ>*RAU,-/9VWuA#.^e$i8ɩBR{!T%݂q2bpZ06ɴ?2vFfx5>GzT.u KpM[ѐ<›OV9I)j`8_az&is$q8NPJ#Fi+!mu_*ǨZ%sYz [x,#n]!' #8v}<[x;͉T%CȐ kexcl$:y 7 %JKꪏ7x7k1RF(E' TaAz#DJ+ (}tpwU?+|#avv7T4O>L[#<|@)?yN>j}/> o aabbB>OLi@6wƆ`??Cdaa~zwON,}l~~CJEՏoaii˗}J?nk ~CGY]Y~sx_ŵlQ6r7[a3vc:~JfZ~_NݸSCջ͏_eߣzg?gPV;gv0Cj?TՑkbגMX(~/P"t${;I C)ZJEě2}Ƚ}٩tdPzLN?~zq/hjt7L#…׺TEHz"'8)e?MO e͔[C˿ "CE̅圯~kX?v ~iCg#,/늇|臙?z'$E_ʜgܟ 5GfPVˡ o,=DD||o2"j #)֨zp ܱ{7R=oMB۞ÿ#M•3?i;}~;ރM+~=?ccNjzdԹs/iGw9rZ-Z~!l՛MŶ[T(8,=}m^/\ugZAn0M'Oκ k u׆w{E4aQk #x?: oGoΦlZ^Ws_7}P m)\đ)kUz*!I8juPȴ%x vVH:Zmt$i177GFxWWV)zR--+Vֺ &Dk= PGH9 mбYzR!$iL: >Ѯ )# LITiE'4 $AG2x5xwHJVZ iƠYP*ūS/D IrRW*̦6'Ke $mtRi2ZQ=8GQG3L%1CA(4qY}j p"k+Jq0V f$I™_ aGjsKı~-0;1AfufpnyY1;e? 1E8^Hz>ΚޯjE <^IV8=5UjOp:K, Q}N{718PBu%5R L#i8K?;4ST͗>tWV9q V[$s8PރCgChmyB]kp~J{lm'F!`۳E텹9~7~[k5[͎)Ji얉hkó*KK Xk?ƒ=#onl&wgm/7wluo~[$6v626ĺ;6ooF_p'fxc<`֣#]8ۙ?~cŶj=H*!wxicGh ]rd#-inGm)A 5 ҂Ǐ1=5NՅU~H &A3VXDeq> B< H/^P;#!`l 5[w?#ǖ9t8yABHB0F(x!Yꯡ M\I8F+E(Hu`4yENy;dȋı¬WDFB8|S-DEΘ4׎i)V#K zL2oI%Uc-07UBI*+EBw.smj%)F*J N'8y,|܀c2ǵ乧WTt+AD {؞+,wֳq4QqP3g)lgcσpx4<,w/VJVŬ+FjY0=7`FġI_ /pCF)#䝊1cH3K;r(Q)j#ph - DY̱SDZa{ #Ƙ[$FiE11c^Aem%S)9I3z4ҔڔxI/KzN^k 1Mu@/6}jM+wvZ>۾] ZZ1|#ᓟ$KKK-{3!`R:z\\vglMlQLݽw땒ދuĖcnc7k !`!sRj4#plڃGTQ[ui$)9L;B|Bm8%cT!"Aiz(XXw*bRKTUѬֈ56&'ĦKWi!Lh"_&M$"3Gd+.wk:UG^"0._`r&t^S]:1PԞa6UkKq\ }ffxiemQQyO!KKObwH@#26h+VThSXkZ^ ]zz6q]ش^kjYͦ14l ۺwmSq=fG;j}g_lf7KXgcT97u $IMҞ"/i`#ʢOQ4$;8=6F{M&MSu:t+Oh!UuUaQ @H8Rxs&88^1H[8"B G6{sCm#sv݁نs(d;f0GK)c,XD:5{ʂDBJ!5; 7*JD=/C IA33&-q5Ҍ#R _Cy Ƣ>3_&4LeSDU5.ximJf* U"ZCK0HQ˔NI իIOSRDeE=1;ᴡ,eaPT>":BiZkjk)'՚QGEKTR_7/w{xX'xH"&yc_"Q$@xa]pJ0.UEf˝U\Z uGc~͛9%d;=44\de2}Mi qZ& M$U{^@$`假$R*B.Q +|Ƞ#/|ǏhdAO#iOLP"b,ea3֞!ȋF#7S'9YνxڄHkd&ZA];)##pk_SÝy09EY&x=/Y\:$e`noisS$v`?mnGW=e͹m=kþ@_(7cx^Pz4IZ K\]q(ɋiٔNC ڍ&c&d&RiŕU<ʐqc,,˂,DKܥ_U KҚʔQ Jmp0w<mLu](HSG?/!ِ=> H9"ClB<8%nrA`#lk bu8qA3NHeA&!Ε= zQE+ ."_.qBR&R&Qjuh[#0Ha(E|tרzٜg4BGuM];iB-LzcxHBT:j&i%Hi&Mb^/q<]O0BX4[1wMQWLfcغ1%Ji(w8kޓEDr7=&>JwtV'( ˘e-1f`k S!L5&0X\hFs33?!jSIPS-ФI3/̽܇ cQ*{ҫ-{꺦crr NL'r(c%B[GI-ŐgMvcD7sP;;^94w:m=^$M)m\FA['i1a %%YRloof}oL4Mz=6;s-:w Do-.6ﷱx'F8oUlF_LMzt~]aUzwZo,8x)q"[{N,"^'IӔT =7(c8'D$AAoʠ(QZd,>5sڠ[HbR8RutEI 0J֟v=ݦ g^2)ep$ (* `pg ^UG[ɛcӅH!1",Q;K-MgʜLe)''9l0׌'6Ϙ Q,us![۩"r"QлZPu,Ŗ$kkB6*N2ښ*щ 7m"sCGP/X52:flXi BazR!>RJQǭHRyP q- /LM"Dăoy3 L6SF[v{()I-XGC3L1טO=ZPEy0\^X{")b˄"[Xc(Lie1Yqe V%H <懙C R@+<y^j5%Xk!D A;G'\rߡ<4 "Jj8 $?RޡC7`ݠ%)8k+Pۋ(qQ8&mE19W;7򲱹lAqpxu盏nיyskG};uT%ҵ I2V/q) qO1ŀvɉ'" 6XQQ[Gקsd0yc㨽G 'Bc8( /Uxi^KNVaTy 9[TxĶXL]v9ێR c̺xĔ;8 x#}8-~ǡ=Dޒ:K,ǧ991ő1Q>z(T5X$F#PX8$WcHt,S$UTW1jD$HVqN8t(iqf@\bTEB'12Ik|*yB7xi8&3!aTT8Q9!8K( JĦBGQs(asfsCl0%ǿg4E^`\3585y󓏒ŀQ$QL)ze'| F)P͜vfz<csSKqhB@4upK 1T lomNCPg6;ÇŦ-ˇh ^Vn㺗HFyna?.̨[Vˈ}yމF>u ~eW6eu#{Dq H) *:CO8/,c8|h% ( -W%)2ܕ T!s8#U^gllVز0K;"E% #}އو !=C\yU2(ί*١>^įFXkj1b؆ YjRAzrSi{()#]Ebc24qrőVFKXwP=z@E%J $B3EE!C6'U#l&LA$ @ ^BY+9kk90>7nXQc8b^UfP9Ut_ɲ J>B""*Lw3XaP[I($BxTQU%y=5DJξ?>??(º&Fc?/<{雈#SbaA皵qC9㔢F'AAʐ]-Y!/ކpEiң|ЊJ|C$Si0&Qڀcu8B"'Nu$4RJ"44&kuT(k(8!' :T"\܋h^9s**br#AˡURȿQU5 Lڦ<u$IQRQ HiOϞ$)Ja۷Q&P[2ڸAV8v}#M5yGkIaE⸍nr#f[/Ś{E^EAߧQW5ssh(S33B2>6wVRGH7E G'D#\L3A1$j"/Cg69p,R Ö$!'S"ȠUDǂ7B،ÊI=)dg Ga0F*uN^VCa@4ӌ2&SԲA4G?35>̚h$=҅}P(B}H>dipN *kZ"Q'2{ sE`J42\=1>c`sAҷ W ıS/ð LD e^Z ݤdH  xSq{ jN5]ɓK(ˊvMY @ !$u82\BzHCmPB){W4K|Y[[PTSrRt{]đ&K2Ns?*N(lM] (T@E+~YE֫mn^ ./bEQR,pҳ($I#iD͝skiIlt87Hiv0wQٽvLOOsER"f^DI6Α5Ù PS aToݵ5z.{&ŋy$YCB#CFf4 KZ/u!JIg:(hAem#0YPX9>3Sǎq$2-Qk3dC͖,iha:~D 8N=^hE+pd1kA<%kYB8GAm)Y.z#,cjQXQ T8邠B#BnK2h/tVXrz[ '$AZZt\2y^7 f{.g"#') {VkL@\2td: /0ֆTh30aӣ[_ab]HrxzFs!Ӝ!Q*4Q"+]Yct^G#Izu4K˗J3{I!-//[[eyi"l.!v9,.uB01|E;pJg8)F= IDAT,k` t>m:#+DQ!pv FkG}ƘMŎ-%@oo Frl:Ç^^{ޜ*~[ Akn9XiVy[mPćumnvۉ[d7Ďku^llYaa۱רg؉7^*\Bdi L(ShӷKWx("}UBnȒN+/1S\r/64uF):d)#4׭vfC|4:-:$x7Q@HB(S&xlz_C C"ƅ#Ç11 L܆h|x_9 9OBA 6zt \p rm,#R "n]Xq5nv^QU,gH$p$I^zUJ@C?Ri I7v "D1/h(g c\~E_xLNL༧Ϲ|*g],X򲉥I&Q}> t^ ]Ef[1eOvWffmo W"%.F<G8awFˈ8Ci$RI RKf^^ w`wגUus'=QR>Mz')V$]C<7^or.>?h 4ZD{[NQ1FByއ>ZH aP h {ۉTԏX@Wws &u~Ӱ9du*+Wh3f9:ǨZw~| \.V!C ʳGH>k/ƕoD[2rfYg Zⷈw]c5ʰ&/W<}&Qۖ(ӇZ8 ]Pƛ;Ls#2cXec0&}\QyfLreͭ *bt]GY eUtX/5G֫wzy|ʬ9'%ipA( DE#q(ږF星`39C:rۥ#T"Q:AAcrER7Fc6igBӦcўC 6i>/jh%křH 01OUa*t^AT⨬+Wr}c-M &|!?QSqPuP%3QRH@&`|9^z'͝عxkxʧe&79&*(!rx띷ZАQ%s1DLCb10OL$VmQp/Ї5 |c,ݟx>QOޏo@L)T &~Iix%{ 5h<{yUɈiʜV#7^{෿yvپ~x sʢZp0D@_%u~}{O<ͫI~ Nz?NWĜZSK91Jˌɲ}O!Ng9w'zCR$t,E]O-GEK"bxU*c~V_袲Eg³}2pCK?Igp}5\DX@`Šb|Tv2NIyU"Vaqx ,>CL9Xg#|ܿ7xLWQx >еP&\t%L씇1r$"AYb#(>UH֔t>M{P`L X"R$7D6=X@iqV:0HjyT9 Q2x4EᆖĽYʼ`#Z\ F,9t876غ{^;gҙz!Q!,IЎUUqou[sdYal&<8xxe~㷱MJ.!Kf+lT㺀}p _">*blo.X㈡K /)lQ0?_7_чcw;p4PT|Nulmmu![8`0̸YBJ8DDLعBؼv]v½;$ !ۈ):}'-x7?`2\*x89 ƙ,E;^:cSKEAk\Kk)fAydOUU)9#h,s>ׯn<9֦If,Gs4g祗^JOaA'Y gV=sfV@-=|hʓ~Q)SW3sD2p3}uM.f@#Q#҉%fڐ_1ƞK ua6)Ea9KI! 2͸EI^FFHLbE <9-XV M5ql c,x aroP:ܿ˧)Y%%?v7I4=po/I^ZbgiLj'upcw\q' y6ϝ>75VIDѓDlU mg0Ulm(k<7Lf ~݃*_-.}>Ob=k;J5g=kH4c_~]#L P2PGԳ)U9H[ 鉍8SO?5vd1JYfg Dd #677..M91,r"Ps"WK~>2md~fM<4JBgQа#^+fGXFt_GGwшҧg1z&ͳҎ(P XC!y4Zb b0 s9%ON`*KX\Ř@NzZBc6XGc".yR]u9asüXQ#I*^2)1$Ϟd!3Eʊ ta3 &HmRUt]GUYocbhy?Z(̜3k<#,#d%>/hh2ؤJ.D䉡Ոn_=+Og$ф!^z饤Skj_ۯ}:KrЇ@9er0EA@:,[oO>Oݸhkg h'Ru9~z3LdѰbc<`4*/|]h½>~U8s%gr,-樎ġ-^ТĹv'K58Ǐ}\q}m.wy_}k-5G'QwWPsF~oó:;?iVkVrlrV/{>es^|+L bHR\d<|,˨ yN^ѫ= >7ܯ ƅinXCǔ>S IPD !D4*D򠼺WvH9"1iR+{ wÚtip}I z I[0::-)GXTbQ ].0}F1$ BJ4(! 0Oh J)"[xM=ڞD,vn8rVtbiĹwH$10F&;<СOW=eTB|nQBQO5nqS5ϕqLA9%XcSx궦󁖀،:D1 G[˧\}=#&F2d2AUٹl6#=bPhb,JڮSMҶ-ZxqeihqEEw{?oW1bwP7Yޔ-x˭[vkg5Xw:ݛ .6>=?`H+ʪ@uDh2Ɉ}"/_xi=i҇ȱu2d2!SӶMˋNw(%{&FE~(1pypogs>α"8xa&ݜil҉-1a0Dcrk-sň/}ݿ|Wx#)=|b0U3FMՐ}>Glnnpw*Pk h"mf(JVزb 2]{Nͯ\RqNж|;|> 3TuI=~tgDzS'f'/㨊wjru)|?\PQ'gH]}*G>w36 >zG<1~ƺ3O9֧jgUKrdxߧ \piǖꑝeg-raC~lMu8'mDW=mw9M).qA;kdzzk|]pe-_R_x7^"<$7]5Wbc wQ3r#[ň1Qň[<>'wyM lN3s0IJe9ESA$"c4l6# zt='0>j|4QQL>@@;\NФt8bh3Cbca=i 3@BbiA[0H 4HL֗D@'9NrT~B0b2>%D(F=ŌIhob o ]Zb4դoЧJAq.p$ꀉ%%YCHհcöST "k)%рՀ!R7Q;Gʒ”Evv Fx9NiZE ~ ҵ󃷈6uqb '<툱Ú@5 U6؉KG+C|V0UGtB9DbX'n.+7 b]7,+F`vn??q90bC0Y"aH57du>|nhWf4峿}¯~ܼ#nF_th9Twʑg|eyr#WFg}8ețϣ):\Ln\9INh=fσ<}уNmtśő;Zk|;&Q8BHjL=Α+}ְ)UdHI!Q<>"wPՐ+[91 cd|>O,dRrV4yה5 DS.ټpA{0NFu=g6o "l>e^p?'͝/߹6g;+{Hse0(&F  UrBʄ|`D\/_y̿Hkby_Wo(w\r;GDFܾ},uXcL5[[;nܼɫoJf>^9W *gݺG/ܾ͝w@`k|C><.Ӗy{Һ|:创5xV{k\k<ٌ,+@cs.|Nlllp?m}E`V$O xz%ʂdX?r cx,yucbcbZrMb YE@O(YFS: Ms}8 hߓvCaiO+O 1;ƛ=Ek|_+!Y_Nϣ_J&E7=T!]T60y|z`8oIt1ԝghoB{@p.# [Cx}.b]"M*}DLRrX:"X< N*7]qeRC lt3K6&`]I[ڮA\H"[24 s0, pH%Xc9F-jRv1p^nGT@A2^laƷ)'-tھ'w2 h4uV27ZiHʎ,Qy5G˧|δ&7iWloo3eI2Ys|*O]\sTiD"Wň z%f!h36Q^!zG#Qn6!t-fcM~\NC5XՈFBLtnj9/'R;!Ff`O;ݥ*"s4D,P,y<9A,0cqF*mVu(t5V#*gZT?SB p%ChI"Z PKݵCX1>3 !;4Ӏ)|@)| e()J(Yh=\ IDATEBG|`5D@;kLF ͌Z#Z"JT߫5I&MHo<(ʜpp8 3B B3혷ZQ:Q4,k'\:0]&%b QFV0}?Mb*_s`-3 7"6"Lm%9sj4gKp#~<M ƐeQ0ֲ?w 77 Yң٩0Zh½[r9~sg).-33.<?OcuݟOTƢFrNoqzgEWVJ_YeMeB=q*VG#qYԑ#?:^#X$ϟ79|RsDس4z xIݖ}v>*~իBXNR[|B|~*Nu֓evӟ$'ǖty}*NXsuξ.eEG~| q% =D0m>3b7cƣHT]#dYBK=o!tEhey!Gx ҫe1F4 8JUJ!dTH2־,˨*A`8`<S '3tJ_+Y3l(% 6߳5!uh~(bi)<>8`4l\& yݷyW &_n1^$e[]~MKOidY9\/ q]v#˞8E8J(,9˷^)뎷>zrq \b3H ϣ;k__I5-cc3ֵm&'`&F6j$Hf-;or]w^,"0lll@hۖd#E%ZA,=pFϘM;> cAE Z:ZXiŁ0=*>[-3rM(YK2&mĠPf.`kY8 E9dcji`lJ)TRgQ9hD %6c :ȬMꭵuhLF4>-NvL"|tiq ]L9l[ ,#sE"`EhϓDT( \m#cd:24 {rUo=d02ʭlָbwd8L,&O2x.(u0"~0KpbXTJ:!`{bcE;h_>?r@;C$Z%@eMx[|fMM=9Mnu0oNN[kB^3ϠqZc5X š^xj畩1 <#PG#yCV1e HW{2޸'>`^1o% pF%m|j 1Fh0dô68/Gٷ%u'"p1Z҅"Li`ʀ;m=_GL:R @iPXq& ^ 1rɱ4.3\-d)\( )fIwI-FBQf^ =)_6|WCm=QOR"d)><-+yRIcLET1X+D$r1)E`{#1Oj74-"Gc62<"jhk^ݬxe+3{HFwMY2k,Cct]pub q6Z.OXLt=O=or5X;5 EhD͇-!G%"Ɛy#ђFa78gE(85~{oD228cq"VٟѶ-y!̈4U6qGy#8>mfD@ *K|ͤI(y^#FK5Mi ]k۔777&GGAȡgHAy4 ̳nͼڭWK+XDG@PC1`ŒO>xPw^煗^ᱏc~`$C.#lƼɪ 7ꋼۘ+tɧ1Y9U2%"c#h(s)<]:^tR**{SSjrBmXGc b3^Ovi2]C&u91Xt- l NhʴꖺQs|ׁ ؤ?RϞђ OHo,epnɣ tD! UO3=`,] 7^4Pyp.PU2wHc"0 !~5еɠVzEDb7"QX6F8}Hs}لYEެl֓g;9lS}("ʋAMB6_V;)GP t3t Qf9 D`27aHJLy#5)뚔 Ar%v8(E'A5!J<K HG$we^*Sb钧N"4zBt1hKg"}dvz@lf˶¤\~" QZ GDh|d)(쫥ؤ[o1`QR0ZcOOga09j6ü$3D }Pcx !;ۼ{ GC5Xˬk1&K0ߡjТX"D|'\eyE x>iO| {c|A|gDg}bx$e #Ӊӎ+..I*FZqI\9@[c5cM}^ÿ|Aqװ&KBx#Irl--s r)Cc16q-K$xx&M~1*1ACM1t"+*)[S1@1el%co\qotRN$+%C/EeH1q ln҅%Br44=*ͪO}2v`bbpP{hlRЁ5G&xO1OkR,K&xh3 ce  PRQXڮEҶsb$<=q4ZUe->CUBC:i\"H K')t!0 yi^zm6[@H!o$S #FR][*hp4WWڮ!k̼OG\Q!bM9@!ޕxx1xbgG@؞4&Ye8ũŜ^C^\y1 8~ίHУ̅DbRzH;%"t;^SQ=Vs:n*}+tj/oFЧ+\rMWu1sZهVgTc(lzu*)GK_?9neJazW߯t:T?sgx9-w:ˑ [c5;X@`:h[/_??yGwlH핬/|@j 1p.{4͜hD]&j̐V'c:{_]lU4+|r =fgcL)ۃ!*0,<&JM% YFaP hCb1b0ր/PXRw]M Sf>%~@[nm4l=y:Ґ^ΨAVӿ/k/g/bE55Tbkmìmi@ȩaSs~/L=w?zz@&dԝ'9.:m]&Sh2oelǴ͜<3glwGе's@ #X;ƴ\͡kqJ< 췞ӔC&Wn} ,K4Qh >ψbh Xҕk=~on y]XGC-UQ\#za3Pdb <w9'6r`|_`MGL:7U1pHPϨFQG^L@] k|8Eu%g|XGlk<1$_(@=E,660Ol+dy""ƍs6214˒o D6??ǟ W7N}o ;;Wi}ý9&̹~-xZf \H~17G4f`POJULIURjf\COsݕ]wk36p?>>>p0H5 "uV$M@ga"T 鱥rl]Si̭7m04i6HYKoS`R%ƥXjR ET(F-ހKRҴxfH "Bq[%XG"O+h[&Ոuж\{V)Y=$Ơg9cXx°dNmd1("1<9pT(MB-)Sq aw;}b>GQG(j3LpEL-lM,xe^@GI7Ǧ怖gFp5"m' %muWHST%uIYQicf1wn+?IgHbCY!KI&T/G9Cp2Y+L-(64:fPFh  ӠLaq1λLC<65҂ HĔYE_E87BV aA>\Owqib2yaZzFM*m.$,^y7_eDtTa IDATkCe[|^Ih_sB渹ꐪO.99}ev*܏&^ZaG*{|8w?}z8<;GgpR@aLKOpDj?Bzc?NsTiBT:G2kwnSY̼#Ѩ)J6y'^|O>?jS]Τi')!Zj6|UQ/je ++Kk& pW>N"Ml 3ck1b2)jϼ+XN+Zab(A1yQ2P:KKф>fX یa3shgWc5`p~14@\'ܺx|-'wt[d=G+;F2 JcmC$61T _QUUiW1Piv[޸MOݝJ8L4x`%._^6_{#ZGL1Y`TLZFNfJ<D9^iܰnsT Q Axa ݧ瘻 Mi $R"X#ō<|e6]":olMnBZztMDؤ;esnW "uI?!wm)H}- t[Z+,uM޸9&_9GE'>y fO| B4=/KyI…oV7$"զۢA`#Ш4:4!d8OȵF2xH|(Ixa:ΝClgv6zB )ccüK9ViUcŀz$֐6zSk1RF".IRZ @ު=|C6f)ؙ+# *_ڗP51FrC JPcTt[\0o>Ǽs->cia<4OcpRXRQĈ+L6֨;d@((z#1bTb "4"0VQmN]#Q:$ITv^C}SusEspT[滹C쐲W޾lМd=[UZIjp܎ a*W:|=uP2OZI\| vNǼ48Bŋl46`:AlmY{vw]9 {rP]i}FY? vW>{ ~̎[?7C8Ǜm;^rI^n FNNF5.uTX{W:hkA%MWE f!s$dL]M"YVb67?hRp-ryf $%և#F)y)k@ck.ir2$rPk}M';9Qk!&hcsi 5Khx 0RNyU |=dV,$b+ &(:CHR먫T"OQT886jcsiQtM1 5=5*F,hu(x\֥%YA,0("^ .Pxt4"VEÂBi驣5P_{:RzO<eWuc9PRGaZLBda+:}E\JʖJRkz,,!@U8Qs֚tx\PdTU 83HB̋]32#5DQ"x R fPG&iΤ7ϨwOWL;W6=EVKLHt|]W|!Qliw u| O<ңO LL j-b2bJlpl(pe$s+h1lܤ*#9.p+P>C7'܇M4,#$NY*^?ǐc2q[tidQ gp3|pF}>I'vf(9J u=RyknݹFk=d!Bix*K1$I:,I`%Ш ԵbMO>0+++o2LƓYLeMĀKK&!PcMmE:$eusɤћEbҨ) 6!*ɉQZ>%HJ=Ϲ~!a#R3\ 03l6 2%e1CJ4 H4n Q,P nV}mʝU%mZ ]RUPE0IBR :iщ0w޸FtmM @+bUEFI"iQ\I>ID蜻@*~+-B5!4K %)UQ%\)[x/_Kt<ݹj'x_mh^:K]Ӑ31f6!TQ2 JҌ(!cؠz)5F|aӼf ^Ike|6| :=%Fs2 v-uZ5PDlK+C u#Ef)2.f40OHZF(*BrY$n"C8DbOgK3<8ͤx7 =F{yu' (̳/pG'~9"si< t_5f!8(CN ԞnG/kxW>wZܢ1f jOVk׮H]66!xX!qGwO? K6ݞvhIR*\ x`-}->ꐧ#tJDN -`8%Pc6oiTQiNh$M,k8ꠞʅ~zbt~VXDAEӂ0Ҹ^* /y "Z5Qhd 16'wx":$zZEI`FB9!Ap%2A5orcAiwL`HB$ 5 i 51xlcA Q}#E&U1r]+ .e,;ϵqŦNȷ"}DL:&a2bӚ?ԑyEE֞bm3oޢ s}|*Rn\XYY{59ykIUdY@%ր5DI;,w0DZR-nus}Gx0QCpXc@4Fb C朼ƧS%;(u\CCp;GSڛ 'ϻƠaQO [SC螶nAG)@{OCTNeOȽu5YnaAa{+=wbK»cG",H]vΩO{'>e|8q8ӲqW}w} iTM`T0ӲˋubcL!< {51,,smz:}ԤTu!M DWxטLk>t;$NY3;xb$RJ͋{Z\qI8x8acsD#2BYYpT`X"5AH=FF5Tb=uAIL"].tIMF;bBK+H#D"z]Z4F&&g]"L0$`5b5 266Q] uD6#hS6o׼vu I9Y[qru4-x]-Ts8Q @,d[mww0}|+I6qT(e9d~q1+݄U[vB+nY/) &%o^'֞$1im<5\XxШUkPN;#F%̉C!Ԟ2THE6y0( FqX,eCf7|.0iYkIy'lNG7gkHɌ#Q!D1mHVk4GE>cRë/7_$hA{n(9\r&6CADMbQ ͜KO>N;J7Oھ@H,ӪBLB 1 fn@szӇ` o~|w~c ?s|=)o~/}鷱~?ߛr^'gKm?髓~4U K`akׇ>w ځ!~Bt&$4D 3ՖY:O?B[ nIw*"r)j$ &3`stVp&%j+cIs y5}gbObs!4xk0c0NieV*y!11 N R3^ߤ5.iA#F6z;Q11b4b,m*?F&uqHR8*ƽxl蠲H!ccQ/]œ?`. dT"A`$Aj0}wj.e\!M:B1pI#RS Ocj@Lc1*b0%ȪU|MX0xP 9S$<"YKĠVƪ)Qd,k!u9 AnjQQa[?G4D(#l*LmJv%nW=OLz$&Rh4+'䭌ɍyd66[簦`0( ϱx~G{e !P#ӂ4:ѥ׹=hwg1$E,XiHJI$4D*+8pFKk P6*r"x}9[|?[ɟ'",,,|<Ν˗b-WC ;%ߗ C~~!EѨ)KwI{84h q NE)pTν(}rߙǽnKp'St3$1dgٺ,p*(۫pN?߫7(ot9$ÄNzG<#(>HݓsX3~HO'w:ч}G96Hh˓IDbO>bvT~Q@Ij!'ĠXP 4E=>ɇwdv%@Gv 6Rb $BsKX'޹d<5:>F*8*.[ob:RN"!ͦ<ͦSW/hZYF~`}͍5:yF+(%<2q!03q K.w-ubkZVIb:&"Ti DrB!t9uwpńVI |GaH]@ȳ-ko߰ >6_&-0c "c:4dk]It(E_ZL$e&3RG_-HrGi݌PX-)V.pHpβ|.~gQj8#. pl4ϔ0~7/KEE!-놘 8UڕChVyF(bd"D,0M[i!t"Y3Ovkrm_| I,O|i$:oʋ/12J[Fd<3v3?z rgZ6ܠ.+B,IB%>܏`;=ԵQ 88GQ*&4^T΁UuV4\}ާBj!* IDATk| _ԣvs W=X%ѝBC_z[ϷeM3fܸ#G:n<:o=;8.g@eoß+Gl5wR ;N8>|ǹn#{<,7Cjjg];`]OY{H͐h;[[[u@m ۚ{[*S[3Ce[Dx;5;U漿=Dv]z7ߝ1nWk{q8耖s}dkw[y:tL!6\w ">2'HgjzO{|\:0ީ갧.;'l}vw9(|{4z$ AcCw;{i;PYRKUe q7^avŋTG[q 5Q] fVMtJapu|۸lH:jhs8gx-;?4ݶ,=Qu#Cc7I,DYӨgsStszs;uRL%Gf cW.7]cgj2[7K|T!E&6 IC{ׄbJ73c܍ڗz `*V#ĈFG,qΝk#5Ktz)CHDDq 1k18D11&33 #ނ&Q*B CѬrp(ƫHy,=0lhW}{\|Xp?z/i?l? ^> aI[d 4ZF2C5~WywzTn`D`MQR Y$I뚬eǝwӂ4JZZcD%R%/skΟ|=M4и}{B])e1f2c*BO i'#d2dYfc<[+0SB,i@==M,w!ZOɬ'#[*H fNBc$@8ӚI3ju KT1b :&tkJĀI)(bFӜׯ 2UDiD\f̣jlNDHRGNg0(Jb#%$-Bu.Т5N c1Uj;ReLb4ĆIJm e9¹ zĂstMiM6RJ@}f1H"}=3b#pg\2$ڐ!˝A 0 &uE-IZCH(a e)nl d!D~VPU71y7|Spm#viYqfcա{~ǟz Qa@o &`E)T(!!DG80Rcc~ѐ&-iN5CB@G)@mAs3[]KdyåGBܹ}o}S%=??á!/wv UU{wP' 8 Ν 9Q7d2"!=}[P~9(l#8@t{WDtpW !G1tvWcqʧvcGmaY_qN8J^㽅t@$zAH~d㙐9~}?В=ώ''փtA[8#w'uefgK^3_ۯwGƠPUC ٮG13"BYgcb.ulƍsٸɟ}%>\\#c\Od2!OɝhA>L0cCyFD>P1Y8X,t,/-Xa$bDsW8"#cqd)b3TA`uP53/%4? ͙LR𬭥hds`2ĂJ@[[$iioE 1&f]4zFuuqiI001:.Y]T5^:R^+%MRi7#EE#udc-:h3inRDPlNRHRI(MBË}}|i1RN[I(0ДaL%JD"Y >vpZb6s.[|\VSמĦXox nE>8I%4娙v뉛=gr&1c@D3[=,A=(Je~Rُ3\ʅ <"?{|[\~<Ϲ|!~}._~h;OU_2_ʗzpH+og?Og_x7o0qH_^{ c_տǟo<*?#/|*>o-OŏOݥo_;7ǯ??[/͛7XYOOaḟ9nmIƼ8nku5{6ɟპM^}-9c=Çg$аuDLdӏ]&~oŇ!L 6@@!tv [䇵k.Q*NlZBAg76n|*\9Gb EY19j#)b7ǹnS$H' Z!"& ܩLic8֗X(H hmJLcfv|ߙ JMDx4dچ0@ud8B\7 $y&46ݴomL($'j.^<+#.*z%CIHXH=r»7*:,\>3.*㒢(n MDZMhK5b(,qgI*L"ɻH(PjR@5Q L! o$cth?(&Sbss#^a%4ma;)[0?O]MgTf2RV>Egc +W?wƖX;3ogN[#h@w˺q#\s<x<7nl/S6η_?~'$[_ɮ񈇮\پWU}eOǨo|{ɞ8cX_y{ݿw^LY[[{.KL?L =?G|/曯曯_ozpȯo&& =}P+~sipz߄$V<9vΝĊާ~$~>hF g8G'0 Ӝ .Iy0y#3*4: 59\*r᝷bUfb3+QO qs.\^!m'C&KCk2kc^_gZ1h IƍܼuY.,YY[E)i,Isėur{D40*&Ա%؀%bŘƐnTKP7"I(*T[$NEU23l {PF P]y4yq b[k`pyfM@~N3YHjtJ=-pƁdD'üpӰL56PBRNa7 $;~9'u{z6`  .AA(PDZlASv#LEH$/=60?0hɒ);LJ!@a/֖gCfխ[u ;nWɓg(En{=n``c% TEV 8 ;9Iǀ*ŠcTf|^g;_z5}b2:tᕾv.ZZ^(s"\1*"8HT!J<49FTEכeʹ5f#=ƹ+qB5vP{? ?@*L9:*O,)T@)" 5Tӕ@{^?M|xj{q_@V]'{k1+W?q{'/O@JFP̛$}1>/*1&B)=tAzPzfkivB=EEQ\Sks@/|uݣߡ-GwgQB:P;yG4xis\x߼6,wvqFM A;St|H} f:}+*wPLlUD'`ޣdaNwwc8[N<|)~! UJx:%.G}%^"=I ^փZ 3qjDUF#γaoCDcزZo3K NV{8 RV(' bzz?Bj{!! '8g˒[)9 7$j%G{ pDAE w$(Px[ZOKQ!P–+r2Ml[Í-(& =+etLB" +ټsu(6'JZDFE(tPQ3xx*NկQ*2^9* 4N*(B* T}P92Z3%&I>_~s?O?o.wn?>㏿<,W\%˲qzQxs?h4*h-l?<3z=ySKY5>~?υ_)3y(˒/~~kK?_|_,_ſO1ܺ}P3hQYnULOuto<3gxiX2U&+P*j_"0Fj;cz ^kWŨ XW-(BiGV{{i(N^|$]Yw^x|癧dCbXmf]DVYm5(z! 1{!}6Wj ä *ynPI$I`5W29Mqt!ԾbH];S&Ai<BUѺ֦k㥅W hG * ؚjH6qL1̉H&!wЗ6&;5j[uwM )mWY~qKD,Yj%XkKG)[4,x 8|³-023"#YEet B% uD-q}߳<=Q'dt~0 M( KQb4qB+CbV1"\Y4Rֹt0$mjA|˧%hiF+ !W,]ôAU*ImTݓy=>wUi\ro)(Y[[קoWY^9l>W`ye]//~%³?g._7OS?4 Ѩ}ѨӟO}5Fk>яI \xiމ.ܼ&!B x&ܼukצMpO<~8̼Q4eL?{=޻A{+3*[l/z_|o3qUk36~a&Q HpЁ OI8k?FFO@E>Ddg`"sDyK8( uҽ֚>ݗOts)qo{}o9NHew׊wXscN+9% K|3Goz[El 1i gR+ʕDƛlt}[u,n|`o?D\=~\ D,8nSKkޑ Hphd-y B<_YDMJ@tE΅^_q'u4@^Eq*T8A{#L)z%eM7u҄nIcw,<-mH]fy1?,^eRZ"JyE|wz$iXQ#~kS9àK2&IlK;] B@ q2vQJ@{#M^+s+S6!!IBlllh/Q4W<3$KM(BD𮬈GBH+@>2k:螉w)җ`㏓$ jgY?/k>/+P}+o`0:($y惧B:ҷ1S%Iҩ}i:=1B6$fa9@=x[NS_3^p (Q Q`2iX]CO_~[i_CGP*:IbЊAJ̕+sghL T*OaN>%ߡ_Z6,/aE(QWdxoq5/? stCDG1(yC^&KKdIJÓR6'ITYF.Rth/@ Ӡ CЕ$ɈF21;o˯.]D;(ΡtE8JmC"qΣ(*W"2ԑ3aj#IRV!-vO>ٟcc7k?:x}@)'>I677}&9TG>CدIy>o>X̧$ӟxK|gַ .=5.\3I_Lgogxɧ?gW7q WQ{Nt33$xO@wnҔ͍ZZB; ybmI"Pa$ vkZ'K2yزR9yHE{ր4H&K*gEP9ۡm2ݼyc}2 'Q΄'ԢT{ËYN8dr^aZ)R}c(Фf4)=66'M>:2 7ÊٺddW O3>CC |(?ʡ }݁Ĩ>ߓꢙM`ܖjS%:)vh +!HLg7A' gHG5'+ UWr1$Ȭg^5grE&Go(߂N|h^H;AwS$fʗd֒*T5@ڈO +M|7iJHer+Tjꥊ6dhs9Z4;7$I:#Ua}pD|p3O -RQA3q`J?w&Hݞ|qh?n} p9VE(0CڱQ JQLas  .T5(Wr|r$ @RHiPUA :4mM艌b&&;p뽧hP%yh3f/xÇ L/?kMltnYFp`Oe2sa} !-#I M .D(T* T=ڠy_;7r=tbRpi( Cs B  1sAD" TĠ7,%vX{E+dYDHy:+-s\ MxHFjǭ7FJOb WTdy&*rRY0wn8 ơ8&8y "S9ƈ$gbv9Qi+$[]Ǽ~/Vrwd wwF}Q'i9}}ߏc8[uqyN3f_IZyG|o;UN gxw=J-‚As@ɻ8%J RGJcZ7(q#J}N10wIK$}ɠ=IoABp`ÕaTBE5pR9k676peNq("3,r@qgg@kO_kW4QZT-n޼73<|yL&dcy׆JTA?zb]9BjW!"4ΕxE\T\Y)yK4VtuJB2,#cQ2 J"W@"߂SPB Ii~k4t:Zk$CkSs_9 (mҚ7Ib=nU2爲~G %&51HPanH\A5Q.0Q";p\kxVc!/5ۅC9"uо 7iIQ J!A<K=GQbέ!IjT4f% _:< ;CiE\8_Dkx'б JL'Mʡ#PpJWƗH@q7uMA~d # T}4W2$9Nm1>yeꑅJ9I^T,PDŽ Jyƙ &x|̾?ԪEˈ|=$έᨢ'vtf8?6ba9ڈcS@ȟy }T[m6*?R GitZ5=~LL&)¤*b4c.g6(AsjqLBPGUHV/ty oO<$Ss~|@b(!#U9|6Zat]%H2Z`A (s+-<qH=ʠ)sVM)Fe $q6Ő#[Y +k-DT@EP||eQ` OLA_ .h%=2A4($2L @JDy<aGKs%Kx0JL|b8谱E"JV{R+P9GG%s%՚D-{;fI-A+hA)(]v-˪bRAB ,qM!Of (U*6+V@boaMN0Liy7Y^YڣW(lN'^cLs*ʼ@ܳ" hбwj ?&p3 g8pw H#Nx}k; !& F ƌ7/&Ect$atw9_&_]E>ʁU#-Vm e2F [[{ ^e4yYd!H$hW ]%[(Ϲq6yX_sK$~,"֢B~1XTb!pRv%QF5!tI`|M ֹJA0rQJ #LKbKRqU6%&Q:_1G#,%B,%Z4L)_Be uT&C)EeY,J UJC( P/!=[7_ǗK+P*QD7'vU;[Bx49YRD4b[b7޾G7Z(@O6G9B844D{XtN9Mޓ/{pl U]EFt<*o?&4sT@GM`raܑ4hVCvpG5WNf˝f\nj~`QaVjdZV?JXyPca*$Z095@ ňfu}$͸}{ݽmAnb몈y|7AQ-\170qLf_)vA:ҤJJ q.E^bkTm0+TAHCE!*hxJa(j%Gډw$:*r!ߥш}V`)- )/h^zϜZc( 0/J2J7u:0׾ލEqejKq vs ۨM30ZW9sv^ NBT*$ڨF x#L##h+(g?0Z$U0Q,KH-8!b(rx[,.s9yABJI" y'y}?Q._9w޸7oPW/|2YUf`dJ? }?gx{W5}vE`}^c̻{[>Gշ :\ a1vfteսp33]$Ѫ2-Bh;+Q@,c  #ZfoofEB)y*|oMa$ T%j8 `\BK7oh6cJpa6 !<"ϾF|MBF1}QƹV;]H3(B@!b$e! )á#"TiSik^?(( `f`EQbT+]|N9{bJRJBsk;I D1ei)UuWPVQ\y̡)Buf2 g-)V'F IDATyh%E!NUˤiE+r \Pؚ̳2, DI4kC DnXfX>Q` a!x76l4Z\7wWV$k,JɚMJg1&0ɇ=/f ON rׯv!^}y^YoP>g{c_~ُ|٤p=(ĤhQ#b<:G9;hS酑Nǘ$ W'L8EQ8IBd %!EJA| V4N :4]w^ZEDDS=D"*:׸D| xڈA\r>{{8WA4AkP2(BBԾʫ|샏ӈR(Q17wz:;aD1?R:C$WXjDJ<&V(#_[%)yܠ営ˉ$b]A \WQ4{EҘ:q)X*"JU0%ʐ&hz8bUJWآdX*ѽ8tvף +6G[^Aq*^6vysB+EMEh [(,8+?d:B%-gYmZ n !]׉u mD1Akeu(n5j;h qD&lIak%7KxF!إ{8q!!6Z\z`HYQNѧ$]_ҥl6{}y8^G|_{͍7^rZbxQJJL囼hᣟqҔxju Pek4uU+N{rX-Gp3X0{2BM$5p'%qN8q? S0q7ydSeo'k~c8uμq s99|z4ffz8^\Ln q(9o%iyρn+awtĬt"z0ulzxiZoR"M>DEϓԨ3u{^qzDo1pC#p_XɻpI~N0g~YD,-2 >~q6<;;cN3] (ؼ'Mʁle:2W5qLQt]4E)A=6EjIxRp}'h?CS'_(7wrL߷ZGH&! w(#M$Q d:{m|kkNP :UL!%O%,hG˴J32 i6VWxhY~Rz#3V۫l! arU$\G%n&z8n^@'7#;SoL ww̵nPS|n>@zݏ2pnĻխ+U;w 7헉>g&>G{xsAsYPW;$9}Zf0r 19ʲ;֎CIGQ֚|EY(έM7uXZZ96b=oL3FLҘAG0?M@ZOUј޸q,k+yNwK5KO'di/K+;a4/\& "(]!w b ^4>2&'" Z{hFBY+FsDD! BpFkFޥ)@icx N43pwx_9F.=hЕf;H6d'W|rɅh׿M\천:ڙ71,\8FŸ "`>Pg*|oN'vV-@9Il2"xl_؞wΝf>3<8l=,$`PV+v>}UاONR qЯ?޵Wj CI:t|v &F6!Ȧ3P8E׌rSMnZxU&6TFS(ZhI)c_TM.(b%=kH!lI\B$T0n< E,Gc5"@T"Y$ uY܄G:K'T,sL2}b; 0a9H% B B\Z |LeIL>b *L<2}ifXC;K|osw?U+y_ͬsѝwL:!tCDQr9Jgr,_?+V> /mtl!"w(guT}3Nm<9s6n=6RNx>wYE] T:BZ˝~NLw<)b}98)  T+p%eK&IAWW7r";$JGx>^Zbf`6]]$ t azci\+GW'-l@cY!pb5$V[ǦwFZhBaNۍ %2*#C4 uMiR@%*0$cM8QG$,\mT)B )[>&C"FA2*(ǦE0rdR.D79sBkzٹ5tT!m|mr ˆ@Xdd26~9m@C>H4.}r0$p8Ҋ/aY\ۥ#_a& MT#R;BcM "0RiEU,ܔRX-@K}=Y +D(|R?~<8 S: 0vmʸ2 /(& sKƛˆ|c4KBE|_ai]Ne$I֬yw?!+߱7)?\w)屶+P7o@nJ8~O 4jzcgI/T4TxQG3P0B rE F=?Hl;hNF# 1FRSb\} fCZA-:P.ьo<+*EF^!1dB!#d:CbF*iX&wl?e"cyID9D ],i}]1! 86ȏO/ץ%$@/,er)caH(-4haA6 2",2%HޒN\E2BZEFDF!m&zqBlb$h%)>aAhTX\%RuN87-Rtvyb6#$\IǦ%č "-F9_Q66!J $P$!tg!PDwY&`7OE%BH@G?(bŪ@EaH9 V,tG2Q,DhlEJ F€q(:#K%xA EYZ"Q"L_B6#bҲ&ח#)Eh8B8z| P,iXpu@`Yh)1T\o:֪<-+mn)d}N8\6nX7n<ݰ)SbBO^ky,kT5ڝ;e;vl6eL>/ϾW^y=w:cV Oq Jo=ūm3mL&Oq\,yS"{v Moz'8眿̳GZ+V^+pشevݻy镗ؿ?MMM,[3yO8rreSv-ap\wc<N_׶Ҷ?ܼ䦊yW|hr` ٸe{47/}:B?< p痾ȂSmOKs3n\3XJ^]6N]^_'Ru1 N] ^_w}..R^z%vxۘ3{΀ H|k_`l̻QJɕ߰0 9e|z_,v۸i}>_wmʚV~L6˂SO+^JmL.K]]=]z O;ߺyc6Occ3\iC☥C#'qߺ4[y,qCĿF`W7̨7Nc&˾v4cx=(~&`'+ˁ1j%DPfPZBK4`F؟SW׊cb۞$K5F©O- R;@X%LyT4$SYVH!:H%XáA6s>cG@zut> (eȐN' }0 (N"-A(S1hhEHDM:XN2=r}d[Q cW6{օhr(0,BKwDog^,! BUbfGӅUby+шFEE./B{NTA-n&:8#)<ƶlAZhbYIkQt2AoQWɗaN!-IF$-t7R,ӥlLy*Q +aa&40$*f`QM$%})d*t0"Ph8ƲTH1 ټssBӕRYl8A" R!@X F+r@zpTƶm_4X&(bV LB, C݌S.Q8>Ǿ{`{.lZ& ~F#Fزy#Ciź~ZħFMQ(O?˗?IJoϳr#|GSs3\=|?cY6+{^;u;jՊAz y>C)ŏ}V<07t[5~]-kq z~L8|\|eu97T/Zt~DGgo}V|۷wuY_lٲu][(W'Y0F T*rwsK83yG?D&e אd}vߎq`3y䑟 ܼy=uѢ˾r{(x\{!fHңۺu/3@ljC?B)e[u n=n֬G?O~tE IDATX£}M<|;_SG.d1_f6+;^o5OQy>O>=?O\^釃Ϸ< B;>1RO~ȣ+㖊P,≕|CKSS+W=w=?#X1^۱w]xOsIJP(b|˧aY<b;>QR}?'Vƛxч |CAiŏ +XV~%˸W2nPx| v;p5O=IWϏ>}?}'Alj5<*fa`#/Q0#4Fh0"BF)qi1w ŞbFfj_2DIiKx)dFXC(q*WDp+"dX` Q ];pp;%ߏ#ؼ~#~:BCݱ6/s=GGG -Kd?SÇo|5^A~.K<_pӲ[d5p5׳ajt&íi3. rt=3n-LgXvӭL8Ʀfn-27m@鋹\N>d"Ʉ 96C_},{ 2%_@&ofڴ֊ rtvRtIJ@` /Wmۘ:zFҩ ׽_.suKIg2ճټyC5T*Í7ԩq}tuv0=b6~g8sI&;_g\-0ff|g ̞s Z+Yi^::3wCK\sMqY.jlPYwsɥ~/0ٶmSEd={.JEXE&K HMiᦥ1u&u\w͍i֭{e a_?-7Ihin斛nIeK:=S-!m' C2,q)LzylظC:涛out W^>@?"/xͷ2uZ[u٭+F:e0cz+l6_$O:y^illKȁm{M\qTt/ZD!c%]+tF F?Ǧ$oW|DnF Cz|~TڕF2ȯ'B3iȟ>4c@05v$OPu]=FPV`$s~M?6G#b$hRX}!,χ?t'Oc cL՜).gG]](Ru]OoȰO`֬| a޼S9 ={q8}j5ko} gQ p]wĉa4(\.\VB0m :;ю6oFKiE0 M Dsϻ}뮿>wuwmSu]Nkj1غe#زe=sO T._G֭q]qAq̙s2q}cc ZAH kCۥu ;ɑg.6H>4FwCގњ/~A"k^/5v1/W+_W>_MנAWwKuo}zMG-ƍ̙˟cS8F?V*XUMTsbm444C 9^ WTpB' ]Q:Lx>iYS`Q~H$q]0$tM!˲ծR9i02@?x!h!EpVY͇ pRd:Xbf,$6`к4_1$q) s![r!Rt2K$2( #%vm*߰Z'1gt:ݍ4)cSCD!,(0Hb!"ò$墏jlv]Qsfdع +ǔL&G@%!EE 8#4IUdtDca,1Z 0"䰊0n$hN&cyRPQLiH(:}ƶ%A0! Jt z,aYN[>0Ri/ 0<,0IiAY,ѣep2K5VEx$IX.!ĐI.M [<)'ᒏ&I)T>GGYlZhʥ3fѝsH')٦[)$5o% XȖϳhil '{ Ei }XV/ƚH"agxXǶ,'[߄$ݕg=̝=t2 9 ,!b I3o|ONTtEHKVUc_Anq1=HBeQi6)%Lm|-`=iq;=)..[7r,7].<7^u#[6 .D,{k4LcaanV,),ȩP}sh!Gp~z0 bpP'SaGk@htT_TܶT0C>3G>F*x;ˮ;yя̙xK%2`SAo}SOY@}}߾dS+Hn}s- cE=` Ϗ9V FmD"yxW%4#bTB"0!R8"`IYd"=Fa7!DǞIJ],M&He3L6ȗPQ!XGJ2 ] 8xi;w./ftwv~:v؎ e ocB"k5c]棟[xƪf=# T7hlllذnNg,cDccQ̻"0Пu]>4J ߻v睻v$3enWht,n|˦M=j5T/R((9remJ4a}-PM& D e3Lֶl?r m3~t"DF$]aHbJ Sv+Mna"V8B7MIZjhvDQ,raK$l_E&j:J}Gk)p"uHR$gNcE1m\9ݻqmnƑĴ/oE,@1]UѸ1ĚlMMM?I&1qjj73ZcToE4t`TDWG;{" YV|d2[7oW%۶neMs9i em mDU2~ܠFO+[*۷駟 @:CY+mtoߞ1ys#C.cU[Ţowٳg7?|?N::YqqigPȮ];̘1tww<> /NJCO[>>yA2lg0J"/aΝq]tztµ(<}ڵ\{w|ygܸqؽ{'==2.dDlݺ\.;oP*lрq9;wnX,SS矆eY\rbVZZpWw~* 8x9p`B+"Tj !Xt~G̛`T_bҲv|bȓO}̏5ٽ{'ݣ8sx׶\_+ ܵyX|cl}-Ϟoxyg}}18>Yr^{XJm~L<y6> NJe,U+پ㵚2G}}=쮎R˯H.;߽{'sPIg)e~(lƆ12F;z8/ 1(o@(b>|Ç/AqSs3:ձAkjDEE4}(i({g<πISyog.?!zW^q5E&+P9jH^U^[xJ8icoı~~6ˢ˯di͂~5ROOO72uT2n<8sٲe1klongEg#%KnG&d9ᛥ~nq+W>ʽލR9w^z?>Mk@UKc6+VH$8mpeI3g7o@A+y-&ynR$W>s:[7;Y'=lxqx&ɲxL:!`қx葇w&Jq1ᬷVI`7\~;lSfW\qxx#1,.[Ĵc0h,a)x{]$-<q_vG&r%ΞiH!!Bԝ&I>@RȤdbQ WSZb%ʕlDePmp12s0,(A+D@alp|C8/V(`M*;&tyL-H syII TUaamLu05̭8d%$1"I-W8c UqʉJOrz&{g0r:E!XpP 0"Wd:2a!#Dk )5"]FQ1T>gRbD*ZVO+18k:=(aa009^%Zkg,&1xI=\dq qX"<UB-Ms׫짞yѱ&еP޾bEsc{Eku Kѥ,I|M]})&%sݰ*qɂ]` nqiIGP#g5či9O-1 >oj5Ni,U]gc@Y3sNr{(|JZ@9Wq4Bh饑?L<)188J>W$J,q\GxZSxxfz?gS'9i80cdlI8! CYlvi$lALEi&'SO aWEA8 hR-(CrDF23" L8²Agl\G:"2E'i/933EdB͒ ZC8cY 8z% d1*9BhFT\EC3n $HAiVB.@Zc-b%P&wgUJᔉ 8 VIX5'eyz>T3} El6 cec1YqzfK%sԧ5kiR-Hd2cv'BjM8t0aHp25k 8IH!eŪUDI LD7Os|e}OG;bR0:ȹrA<8hp/ٳ8¢ß5~<41ny.,}rѲ{|K\gt?W[`>~-J3ivr9`?OT.i&.|Kz/j>wmi7nuEa>_Sp-mwצ`2TJpLNT.yF^{-ϷDv-$MvLky=ag%$zz鮥u>۩oVڿFh5V|9:/1oB0l9ZܭiRM"^,RӦonƵ- kmzls"!A+Ƃ1'M˾OV~Kc#B&kXZ.MTH6К\fINO3;S& E|ǩI+a#7rwLX1XD{GR?hX,:kR*8pZkVZEP\.fp%vc+HM4S>q-jD&A`qB`P8!)` vPwHSTG40]87@-:tj,hRRŠ@ j9$Q065|(zyJ>Px94Y8c8i>8xdK{&?7>n8J@ [wi@|9r-< BIV344 V ňQ""Z5 E. < 2\zH)SkN\+3iJ4zL\i2fgQB||ubAP[*r|u/}1׮GiL1eHVyl1TIiIj18ė2m8j̒fZA(O}2KQԨVl&}D)3J>C-Ren[Z=.8SML>@_`ѱ!?q$:Ø(FZs%M7LL&'!QEƸV>ΤZ?Ba !O;.lKU<'whtkDl>vo9.\[~Iߋc)tnOSU_ch8@-'PH^{̛m4m$7|0`ym7uZ9{/Xi]sX&fĒOY1 Υ(RIW$-QmFioK,iyJ(l$R3tnOBI% $%A9B Kv$wܽ'9Y0H Ij2aaG06Q*'L: I *##W!|Y1?@($I xQJfWȔlD"%1~'šAFS:T&I P:W e|fggyz3 `H~8 kBB/'$(<=PXRTCHx\" ' IV*35`(ғZX+ ',Qb;RRyC%zO#J* ÈCU3Nl1XNBlQ,(1 Bi:^E( R6Bl` AAYLBl%F$ԣ'BLOJ8)0RƎp:iRS{fQyzŹX**hƠCe@yRN l8V hC8|j:qCSM4>.Z+pR!~9*A)O,8Ӿhh+BKaOн|.Y :^\X^LНn93c ZG£̂6˹%{d qi:dzGicw G:qB#L! }ޗ$]`,K=~kxԊ~ssHsh0Q^R$IHQislCXn)9gPعKvX*`+P:6LݚvU;'r !Ţ (L ʁqF>P"QЏli'Ոl6h-SӷϢO!Tk5d2ϐfڵ X(H? >urrYg1aPR sal$&(aX%|0%IFU : yjj&ఉQD*02e29t pD$qT,Jt!`!H\Bu k;kO >~RR{eML=<<$38HM]YMV屇 3$"ƕ+Hp_QNX?L1P(PHlV>UZu0;1{ǝKY@*4A~ri(C* jͥijXP,R;8}N>a=N98rc|j)e`whGrtĈ[Џ;Kܸe'[fv#IضK{uڒ_k4uX(]$Z fp[qwǗ.uհ3ZX3k\.MŠwh^.uhv16S;غFi[}w/%nA,e?@睯&m'i+]q @K9j~~y(CB3\"KBD7A$ Qa9!6;稺ϧ%tj~zFD222sN%/d0`EyI3\ Vn%o9P(k}edtbqgzDEkMQ.M! Ɠ&@JHn 9THBKR`VqCjUq&ď y푳i. U,`9TY8" ڣjUc9>8T'3 aSHR9ˏUCf?RJ{S˭+kGYH/@kSma,H!q $7@ֱ3eOyYWE%X5aF\|"Bx _GA0X1QƎ֚$IÐ$IPBA˜?,R0 qҧb S3dϰfr0JR?΢@a@&Bb[JJV#oळX7\4,1Ћ9ӛE|8t%lιы%a)t̗ -XTԽe.q--=TKڢ#UO?5v e Ef|sԛe.o;= K`SǶ}\mm+$pt, }*ܘD߹A:vSI̥mo(Dd׻-khPV&`HCCDgfGhuF[t=(ͧC6l|nLΖ)@t]@A3c]?\MZKhRCo:ک>g,63dݸ7^yM!/iu]woo{36 QΗ{.*fS/Iw]Wn$ʓnD5Ikm+VS^G\P(Z־a&HgX92B>shrHAiMS[4r]hL 4B>GT"+d7C!q q~rp0FHE^MC;MXLbEkQSO;8Val6ˡCXf E:D=!BJ|CjL$Qx^"u>),RZ3HR!Lm&_{J\?n JڝK)ĀK5T*(BH' bivt*^? x ! IDAT@F$Q IX'P:sZk!RY2Z])E&F_i 5隐:֘Xehp\@T}fJ. @TRp)-N H h-zvO~?r/Ar8"@p.2;oXz~$УN:AWm=$I0&I}o𵫮I'B>_8|8Kg mگS9RJ'~a~ GRMk7 n.K]A؎gvmnƵp]y?!`rDgH}p6hM!'|沿FJ\Jw'IBb J쥤zdf!sc䳗%aa Zzظ )%k'9hWZ,B>u^[|N6΃oS=o1v[}gB?gNe7t.oth)%BR86ǖOR\}?2S2%97i֦ٵNጵ0kt֦wrTc4wֶ"i)5i\[9MVy(/Or3qj \ZrF-]>pXT.}r;a}R-B{9RaQ'2 evv?wC>IS븲!R19"LY>L6%I8+VVpxfrJXdddcT:P)Q*h8Tn\aZr #hGμZ&p c6Q Iyf86$g JQq`\j H? JXg ,?f R'B4d}4coe)|H#$RA4i(v$u.s@jC* 81ZHJ RHp)B!%aԢ9AƘ֘i9ش4|R(Z!HfgKXe}0N81 RH:vR"'R2=5Ml,ccdpi0ߗe^ҺSo}){һE,lo\,|/z٬C3 gy6k&[ܼ)~M]e}{ooNs ͫn5gDwOϤo)Geqf§য়~kh۷3==)gq«T1#fљ'|eωt z0.䞷KU/՜e5':cwmy}~Ҟ}RD(E-vG]T#0c΀-hנ ΡNɭ5gZh逘`R9\X'ίE\)(inOP !tc(dSdI"$x)rb0䇋Xc:c#cpPXTp!kuboP\^ZhZk1h[(B jԹ}T <BA.\%ɂN/N$zq@KXj]#Hy!Z)qp0B(#rz?8KϏ淧KT.09bZs[^K mE2{azo]4P ,=pʞf5S-o9 RayDN1N7eR`!Z ΣONfZ 8R/NGb3|/RP;X,qi`Gs3)@Yr+T{Onׄ+2?/:ֳ[n߼\ da+7]]߿R' |R2fnm6m%N;V߸*;x晧y?>ϒdشLNL222趛7b-<{m MQٺm37t;5k&ع>j6o{䤓Nn 6oo[7r=wXzcqҞ~۶\{U~ ޞR)oQTqfnZy/Vfppo~ny ۷S83ws;7^Ν_w'/.M<\sͿi}(g9Sҗ>1[odkٶm#sF]5u]WOkדdַo[r>ncJSN9 l|;+sߺo*ݺ' d296t߻4߼c?|/LF޷g?cm^##byeEWjvSf_}v^ eOi_;nv^оvΑC)j:vεIwlA c, $eƊc5 2|=L?Il,o ӑ-Ĺc\hLpN /5!iϡ߷b>*I( pYzY͔e 讀P%ØJ(r9LrfshFA6 2۷, (G ʓ3%js81qB{$ec. LƂk8mTi%}rAzN UtC'tS%#u EK.(UC$JdZc8Ӧsڅ@Mʞ5.+R_D8*@YV Ek STJ=D@b|MX! )h Uu%<أ12:5W]ARS[cƛ=})? kc lۺG񃀛n/[(떛ԧ>0_ -/6ȥ|:JONr6m/s^2ʎvk/xCO=j*_]︈]7-s0T&zE#2T+e.6W|/[o#<ȇ?Ϧ7wRRVٶ} O188Mo׼} m[7xH} {W296-snj1-[6wjIGy ~aS}i>T*e~;_$##ر+2vAV+ݜuK(f;7R1>y>>|뛷rws%?G0'vu8ɍ7]s]C;y[/xёQV`tt~|>j-6_$#C#l۱+oJ)* m~eVrW}RQ|n_/0 jAyWͷ <{7|>(#<kmkn|sgZ?]ew_l{uL=m'fm\q[]Rlݾcx-l閿vq<^/*";vl/]<۶>ߟ-[?}K|翞( n5Zp=[p_SNom >=o|јe6z$Gy G!:ru:R:D l9t[/h(z_`)Yzp-OE=TVQBT*p"m&oMayx%j(Z6 kNǘ`) qT%_$Rjn ì[oxӛ)f:gIVe3czT*eݗjg>G8㌳uK)-o};oZnޱLNeppsyy+%|kaXhНK>: .0мofllcc+x+e]a;~{ZgΝviceaqƙ=igggpigXj5k{-r^<#I[KYjQwQ<ΔG_|)k) \3u{cc򗽒'շs} Vfxx _GػwOO0s;~Bbq7-<os]ti^\zS9/wkד7, ,N= +Wfbbvyի^ʕi]/ SOupun^֬Xgӣ}uɧSy}<#FZagяSW32"l0qH%PqFH-~8R5dFIux~W!Ri(88&0]T cd^)I!c=gd}@p`j0&J CVfhx+V!G"\%&D#`A9K# SƸ5lh@:mh(P Gj$E~!|U I(CFp("uHA LQk6K$`hq:S*5w5I\ŹOKq.FRAKGB}8AnftdA`RONWXX@ \}6IP/)M2[B 9bk6L"^IO=i-C0$cƉjL.1JYT$zA@Xvb-$1IbqA#5')|YKME{vLGrKLLOȕ ##~_ x)G_3y=<ZZ= IDATG]{[vUw߽OP^T*( !@L=|l%fcr`P%Rr޻s{8w U%!zkdz:kG`+7|ZJ+EZ~&'PZA.6Rί=-XXRV?6|zZmϲlvl?{͛NbsϰuvmK;22'/}N]I+؉66]OMOnv] 72>q~ U B0<2J4Gr'z{P+LMMAKB8on?wⶭ6OsAv^~E<)K<ٻSPu]ߓ u|1Px'س'ɩ 0##ìZ5Zo68r憯T 7 k @\g`annr9KT$"VeffQq\do?#}M: .bLǍ1rEd NKĭ"c1"M&MD*bP !B1NS7j,KMK$eTXE+5d+aox#5* uRQFE%);2eX7QaAkUǔK|ER &Zo!gwnGj4ow-3W2>͛%m9~Qe6N7l k7}\r/]t:H}»Ԑ{]vւO~ O<7ش$>nK_lv]nz{ۿ |WgW_` zx (CME[/i /sӹ|w- vHS?cE}S?g%dG%l+EQ65vE0Ք؝.ʍc]r_DB>۟ayl޴O|KW1,¶⽎NkeD[>j_%ѯ!vVhVVhIt R[V JVxPȠdeRv C^}m7TfqM} yd aoLjĮʤ9֎m`t(2=3AUzq)#HExD:C&C(iD<fg+8NJYQ,T05# DQD\&ɐfLOOs!޽)%|L&89r#G՛'3:zFׯͤTWPRJ _ŇNˀ%m5R!d_-F>,GǏR*1)V IHډuI-l8e!:QnW Ka,dܳ\r9'ؘ3Yg!\)9SC{}Q )" 4X v_;2*vCg@a٧T*Q.XC$%JHUGJǑj0577$GerrR8dYXz5ơCWp- Br2Ӈ_ þ}+]vY5huγ-f fgHy0~{Imq:wΝϰm0uvǓO<)eYeg:iݶ Ɲ܋C)K\22<纼!fgڵ٤,hC:87={vkNN;5v:pR/{o8t333.Kڼe1}|{komOM4;7ǏY=:b44~u֎x-NW\FGF6:Lm\f w|~xnsqUљ@8q4 %BDc\r:#3!ϽW^=BbCmJbǯhq]>* Jl6K*btt˒(Q++>a2 3:9Q/!tlx{X~- ͦYd2)4(Q Q:jz1DQlb0؎IJjͦ]w34 @(e22[f1.8M iwGNˆN|M__|lӃX %T!xRiDaK+lR'`Gw'2lcFcKGsll'"% hdNx?vpORP(P(# C,]^)b 2Ƕq-A&X2|DOQ@X-U:LJ:04 ɒL!q1ylLY퇥 mg?1SSLNN(->@ qwu@lynlGв,.~w~ / 54˛fC&eǎ3f|(j{r=?n99n;r9x$NdYV^z8p`?m5R!g~67ٶo+2>3ffgÀWvdXCLܰCq޹o}S,&˳;rLs,~B\i-e[7/{nW^m3_y޽),]j7lF0tam`ZyG! C^ vRr#rΝq]zWoO{Y1e2mm}Ϯv~M']~x{?57;ヘӒ{\Ӥy&sS-Nj&?y83IP?!_MX;oGw`YBnN^z%ffڔ)m˙8K/L\Zr;Dlɩ<.x[of|{8u˖{ٽgSc_w{OL&۷[n8j?O}?Ӥb@_ m#=ta)AT <(3 WwkGyvtk]8m7s~;/@aO~CݝDc [Oہ8r~ʥw-'m>>{]gZ6u=>y?q~J"wu3l ׏Zg>OSVR2Dy_RZr5]>KCҮܛyt-8wWkBK(68%Q(Őqmu$*#-fpWTIcNq26FgB m  CʱY"T!.*飴M;]cbzHMן'aKy ˶A@OO/JbH.cyRBPT+%ffb.b;.r#G!ߓM𐌴pɐOo s*3ERDBIº#(fB!0Xsmr4@I@cE =jʛXq#EHڍz LD*LSFu5 J `}*;\7damӗpBhHRzUR5sZBR:T|lJ"Q&v"Ət"#ļ\}c \!AEGp<cRDJ˒jI up6A.D*8^ʍ* ضEO.ER#= E8Nc RYOﭦ45IDH\azwRmꮼZ?gsضt.6m>~og si[.R)r<].֯߀~&G'?\[WnJEYիVyW_}~ ߠb˖R_^|ѻp] ry.|1T:sO~Z5RRgλnï я|蜳K96o:O|ӋHݝ6׸N>gN{ߝTok=ϻ`q 3\EKP³:_ 7~McGû}7-n/ϪF=}݁ ~c p饗wsweil:_6^#և>c[KMc'%75W︅ۯbժ5]禒̷Sglv+/eK|HK}=ɩ[NcJc.r^nN;TN/֮e|ۙb߫poӅ\KqaN'JR}|ٹ96mg-x?]^;r';(9u>O'k-v/~7ow? =LJ:n_E)ŚիYj#C\p}r=6^'+/{/η_d]Eů02<~c:򊫹[tw`u])6lo}\=7 Rl| gmx˻馿dI|s}eo;䣟}]_8z3(/c{%qM50Bs׭gtjDD!g~^;D`o{;^-OIlPeNZ*e';>Y[ ڶ m"&dX0y/; cT/K,Gg!I0M6w]B6tlŮfZ,Yv #Vp6nD)Q'뒅d SޯO qn/ }pK/Ns|#唓O^4Ev c5[u{^TfUWs]]{o3@ 5qc5~7 i^u7bkW,Vtr] DA-C wr lC($Fh,EZx=&F>,BiF!0/7LX01S'sщ;Q2K:ƶcUF0(Q{(+2W,Nzzza8Gafr*ٚ*mKzSi*-R8zr٧&`##PZ>* h[ض%ETD"Зw 5J(l*stav@1 Hr C\erzUsXQR)ܬqi(N2v -EN| -7[IJab<:D`%@GZH4MoX.n_9T:N}zP  u| VQB"DYA`(*94* ! T%V\zi/9D%dY3&H8C<:}|XB++Ht ى-E\H#.,[#n<G'ND3ti(b؉gsC100mKVu rW7#-IBⴢZ_HBc W:s=LP%ls oOfh^FX6ڀZddDQD3WZ瘞d8mx^˖pc%TxyaV18Chc.i bjT%4BXQH:FA\b qmO2XA`1k1雥X %D`;p؊E qh3o@:LA@5 BT"eJ96)8ZZx1 m& "s КP(V Bcjbs #G2 d!b\0" Z+Bu2qXZ!CXƱm(Ky)0mq(,+v󃚢IQ J@q\J"VHa1Ƶ\@UHɤ-~Я|jkX^Ȼ6gclIM6| ]Ek3]7[bvne. ={P4֡uKˎ^4- £J0 :)T-hM _]EfQ}b/UkK3'.evtL`չyYDP<;:nr,͛ᝩti$MEst>ϗykyj%25}ܷ=W3*:ԧY7~ > v8>.A*~3B"u7o;mϥNƔUYMCU_b5Fxt ]-M}b|[G &L?ݐ$@ycзqAj,l 0JQ4.HsxޣeFN!E#؂@EhSd%uz˶aK@JPAHVQDL`zr\.G*! -R( < i)Ъ_x kFcʤl1fg X(M) 2=}}E "C& '&Ȥl8FTa I1;[b0GRAHQ*Db@i<*Bh :Ba HaPT%TtIkQcxFGh1ag媦aai(hXfLi7F@XOEQ=*ֺG< JL_ \m҄Հ(ÈPEhI{9l˭x:+\[ JU) -I>' j5>EEU&I!e,C__SDJa il0Xh n*T.UdF^,t<]^WL*XY g!̝n-ъӵEpvbLcj. nKͿ`. Ωݱ^moxn~bگ㾝W4M׍ij'j%.XIݮfQP=L]HZ ]bdQj\hv 53-0~ W踩AQ5%hHں~];ϯ ejǤiI^eJ5[CJXp-GE֘wKi;זc>qp.!=Myޜ8&ZI5ClMX^Y2׵̒2k>-c n2(F犭RӤ[JwJy,-U'T;,^ХU+ò`+ԍV@+KMҀ0L [-N2mgBOjϼpZ$7t3>WDXkMrL2v"57СLLyi2XQU%w O8Şd,֬^GaL\!! N¶c%f rBp!SV8zCC Q4Xh98eIL ,ƶmF5kPH&FYfg^zr6= Z@! nld(rMg<7.Xq]rl*(U||bY i_qX?S?met)Gnzb`1Bjc{e;#2Q=v*hߝR$85Qg)S jvU̮ỼK raWG5㚺Xu=-Lxf#f)FrVIz=DZc6Ll6CXFX$Mq\"a LOR(#qPi8eV L s &ˑfVT*"!R@+tVKԜX r,/qJKpRX2=y9Jed1OTU)Ҟ9D|hҞCu KlG+G2#r_ '"|'i m@Ζmت~%4!KJ4*(h`tlyedZ޲D& & *aP*!+d]R)߯elG.ٙ8/TT<u 31:Ҷ%̷z3X[-O4Vb(v=RJ֮^`{ule@o1ƍglS .鸕u^~;"Ѱ^tQpiƍ_B 5*T *RP[?"tH|)$Vi.V@- ~Z'P \K֡6ڑ֚4ٔsD^StbvOR/UʷSStnnkWM,cu|wm۲ Tij5m5+eoZO/%O}AtPZh)z4>@N Bʬ<>vr?_v\*`9_oi+V45Oǰɽ\[gomߺkR4$,y3?Z1;SϺy/L[O1k#y%Oy^y?7hSd-ܓp-% qZ-1?boNYZD'059ε}r3:)N ZKXg)TӬY*igB[nԀ!CTʶX:ZQ/$-bt[yU4 RU2qIRΠÅL,W1јl8֭'os?(-i,čn-h)9/ jzCv+T z}lTD+-[=7Z3q8Љ% @wA2 9>F]x}T݀rӀUw7A됉J<BDJk5#=_qq0Y;jBAUJeS={| EJ  P1;;G_fсD)1eYxb8L>\lj1vj.Ch ަ+JY` ŸGS%' ( kF8Re{, ~LXdll\ssC1;;ˆc\044\o穧 Bvl?+.ul/"Vߵzxŗrٟ)Grr2x~mn"۷ŗ_ q͕26??{'ظa~O<ơXB{g" Coﹲ/Zkn| ֜vi]zM/sϯ_oۺ^~280UW\1~/;.+=(RƸh*)spyo˯oO>8`+/{}wΧÐm[wˮlx*;x瘝q gyN]?=-yػo9-MrOmկ]϶;x9t\q5l0/ѣG .}eযoyk|5=pO>dW4R{w>EFlۺsyVJs=w 3;;Coo/\x guV= _[/};85W\Ŧc [>Q*۸]y?ĖN{|}_?^1cQ,شq#]7̏<GGwG]yg/x#oc޽|c㔓O~\bMccM }9r|g~+Vpӗ9sy٧9tC\u5[wsv=L2.:&?c~FxdEaiu=Z/;=lv|O?=}?)׾l??sOqFo ?=svS*n㹝zigKߗNdQNZpN(~hIj/ygW@2`|iz{Nc0?C_ވV2ɩ99\(ͅ, RƖ!0<:L&0QRb."vw2qU[?˫{1=12@0==`/aZA 1;S`b(CqODݽf)n5W9Vxxn<Ź#ds򙘚@'0HV{xI['7UEBAah{~|l#`!@*j%ZkY IDATƀM 9|ΤU9gJ}3{+55T*p@^^7B-4IRء(T|NLO#QWh!&-UoK Mڤ[I6tRRynƌ-͢iKtFC`OɤMGIbgᘆc$rn$^O КK/\*14TkW9o/{|?|?r7Pyx]]]|K^x1|X~n5<]r)J יm[l˲y|_JTg.>2__a!|??}뻬[w?\}=[L};]_@__ =XC|S __:<̓΍7ƎeL=OO==lxt=/>:S<K~=mxk[_A,qۿ‹) US<>Cwwa;%/'aÃ\kk`:==cn|s-I/{=3nGɏ}ήn~>8w=w_q%g~6xXz^",G?\Kӟ җXaWTun>|0Mg{P'>MwW'~ww?B ?z-o7۲x`:q۷}.6ZX֥]D\ ^J}[msCM^Kʶ |co󛧟r9Yy?(n}4u|yzxߧu<·_D)lSd;ᚫyWÏ>[nƲl_-?~);3bbb"{X˧>Ix?៿}?'Jo0es d8>47\>rmعl6|^gモ <{smMbmu՜~LLNx,x'!]]=|?D_bqz[/\.י Nis֯B[?gHsGw$toeS(TYߏUffTIj0HeJx~/_NWOy+MSFJI&Ayu1<, C){Pm^y-/ظ*C Ssq 4\)b@2>2o\t$,c Aog A~L(0ЄD 4ͺP&嚫ges\H_rSH ?ϸ30HOW7^y]VQ.ow]I./}lJ:.XffEkbϞ=SL&W_zLMM14<<)_s s@\b- ;eJT'vy.?Ok;8HOWFrPW"b?J_s5ײ`<:;8L O~M^˜AzMA=7oAl߹Z/X@{.\C_M[&͙h{.ӟr0gpnnڴڦ019/}N9d4̟7& \Eh~/lg}\p %g7B81Z͝O{{gye'xϻ&~[nlp;99QLA]@6\ǂuN~jõ%:xU.w(P.y꩟+U[{'_&]-n?xQ7*w׍3t̔8B)3e0$͉ch9)HgRMwծ`|n1/Qv]r,m`H -i tt-FFF!p=Ӄ|)eMOjO8Z(!,S #)e4 < ߓxB( _ga;iYMTA+2ã#sX+Ŷ2qjEێlGY0V~-\CqoG\.p{#ZzZ(zUMLGu:tNK.Gge헿)'̪W&wWh"K駟HFq܀k޼:ousw0}},YbS97ti e\k3^)>R׿Dsy<ƛĞz&&oYd}X҄<Ut 5LeUB[GᬣEqi(ymQVj!MR.Kks,]Ue˪onYR);Tl߱pY)Ş=M<)_e[)v~SO9΀͛775=yw.}7A4ɋ:8~zs^܉èR!AIR!Cm-88 (^q]+ ;mIO7 BHt#>Q;)_KG9t,`(xi~vatܡXRm>t6T-31) {Hi3dX*26'w($o`XO"- |>(e cE  N)\;;ؖ@yNQV,V^%fPOH( *D:zhh(kR Lzhf#EJKK5?%D`,rE>q;bmԘ4#]׹yV{&QRvvvR~ڙ\ƃGJXůO=eي)U.FTBg{jŋį(#8d83w )ټeS\=Κְygl|={wAy={v399yd;uRͪVqgr9V,_ju/1l߱˲ȆZi{^ڶB=Sv8ed`c(aL&iaNqEaÆ>gc 8| &&p];_²DO S`llaÀNvJ?wttkWoLѡp-^Ώ][ybb}٣-8{zZ%Q7LBp(ꓴF3gKЄkVm8GNh) iޠ-T7||_aZ8T7qf#3m6udP Mj@ |4=&&K+)tEy%t :@v2>17NAD(sNx T B}r)i (M RJ8/=LnT0M`b|TJgy(LS'egp5<tvvTN2 M.iVd-0U+mVwX[NY ðO蠕|RPi)TaPH*\ϥTtprG)m CCh>fB 0@uPtdg:GE[3*瑡JCh #PR+K e&'AwV uф'z-РP)TL0޾rLd}w366J[.ǚK.cAćBpхûǁCȇn=ﺒ gqI'sigc B}ו|ww_9sk7\/_W}s1wJZ IDAT  K/0/ZSt͕rC;t:qf)=/tR>p{bqw Y|~ܳ|KqK,2\R}Xs񥘦clllv c_Rw=<0+WSOEXf]XdӖxuK%zfTuX~<N9 È `Ek0Mx0_xq^+xGyG8iJN;k /P\߿/}V.[n-4Wp=w_8̳&8Hw9lyyK_bއ?\svPuW^w;sҊ|w7an5D{7̛3ضW]}/w܁KNZOܚTO2:6?/|R>zˇcwM+zǗ>'-_J.sw?J"mC?LT3T*g=$ .qtCw]n#lxaNZSO=m_=188/0M|h-ccdsm\5̛W;ߗJ6my >DTwn%W `|W;N?\FFsYg7O-^q}ٳϱI P] ySGqi9]ISȌؙq2 ^#c#wNo׵*;/@adT*l @lU {hQE>U|O"=~ 0u[%FoxiQ@j̼)Q()1 \&)CXsgqsq< ald hoogddSB|h rwQUIU*ҍ \eJx8yJ24Bǹ2p0i CGh5yM70\q=O^ 2Wa( P"|RJ B+ u42<S?(CǴRCNM6דFATuSFD:dx LZ*c"04_ %+d`|h(RÉK'@0%iihk)K 'G*o7]ٴhrTKdPJUJd-"0L)?G+#L+7t0HjB0Wvl5pHͤ#N{N%Ck>p ̛7r1E^;^dvb|)n1>z_|P|a]œ^vn}|E}RY 磉 G??*7hENtUu* 6M-iu]"r0p=RHkҩ eF(  BC8M}? @(`(*M!"f]C JN544b }H8,2BT"kg{#2bEk4yu7==NaCjC1IfCb:;]UWIMRU_P_FZFq#1R*V)82DKU՞ÅcɖOLMA73nnJz: |"^q-/dLBL71=4]!V*CTR 2Ϟǖt;f,r{^ .b!yo߁iX޵U(ٴi$eY߻ݻ_f鲅/388T᝘Aqj )=R)MA:tw;.}1<2a( t%}W4tM E3PWyhmk(!FTJ.ReX5,C4PH4tMG C'M*)mHץ(eTJ _A ZRoPUZEEha(taD 4xn`8B'cP-m))]%ChHۘ ꞫQ= Jo% ޘDZQAeҨh3_岡PJ3 h5fxSD6mX>@O[vfǁ>$4OD7 t]ᔊg3\ (E&eWRݽ=޳O,l2vp! 'z2qFG38bi 'Im/qJS()m1q;.)q"} d3)N>i%v2t{ #Cxj)=XϪP6uP3eaj CCt "@\x(x=.u <_UBíGrt{nZ32e:B14 B9D*'dax2a&maf!jtf~3JMX?@UUzT3FGxɚY *7Z, !m,45i KZmj:fTڜjVXe6fHՔ\W?iխWc!+怄_L[LP{$i(DU=bGluY{XGsQdgjg?4RD(}aH &]mjyE25h$u  $DTDv7W?%BL^=j|X|5˺}GbB(FeOFcvl0 LQCk\5D3 x M!cBԚ TAzGR+fcJ57hJUAxmU}-J2kK iJb&[DG3Ete^&3"fnD.s2|ÁqnY,X|So ^<߶>,^8O>oUáة4ãxeð8<<Xx)Sf0vbY)~g8 GӬ8L4!2SAG{'TXeZa1fVW@B-2eX>t]b^mMhzI@&>G@e4a`* @ʢ!O<-] CD @Ӄ`J"uu_)@ 0L $Ok8iض㸍rfLc.>A fX(%_yf&oώbt4RMw+0QҫPk 2=f>=ZdX8hs,_|򟠖׭ p]bRFP2x4$@?/T$BZꗕQH)ÏamBs<)t'#tN^@{x^}ؙ60qM7HBٵI|/311eYO0Q(R\zvd2Y6o¢KR1};l;sK|{!39YD}l۶rP7,NYIgGᕱmR!(TʦTrp]u0 6Z9Q1CZ𥋮WM 4C?W D tضweWUthfB0KPGAٓH<x(_@<V:Eΐ膉o(fdtJa8n5l|E Iy?2^4jūVLco>^gr٭ȑIf+<~r%oukYO[~mSM,uI- 9Қ|x)#;A pg'dH'@cNaZK"^zsr9pEyrMTWLPoDh3D ( [˳ R- ATtRE4t]` ЄOٝd`_'736qEVd2 |hϿS7(;.saKbM(Ez:{ؼ%{W>N3<Rf[:(aYJ긮Gbx" Б0^o>"mfVջۅXx ,,(%Zyc8[!X\F&TU?M!iG-iOYl5mRD]}5뷣r ]a#x=VY`ty$Suk̕dR&xf"sޫ#bB46!^oـDG>G5jRF (OTe+rT0Ay22Y٠&FLꝕ'%Po(H}/ISLMMav sdr:Ne mRض8 GφiWŠ~`j;NͺeQ* 4 311A:!:>IA+K۳]{غs/"݅22X9xH]CSt|4b+X,:^ݦa|~Oy <頛nz{;8|0g5_2 S.)(l1Ri61tEEvb3âsioIe0U BQ]]#Ooo/R(}4+N5MÉ&BH9,Q,+)t )rBxR>a:LMM.l] (lt `ll ;P($a6FJI>G7H^T%%S3R~(:4u`hv:E* {D$JQ#=<|RdYO9n2(G3֯3_D|6HRwjjNf^6gA5ͨY2kqn gO4G hp՘?.UF~TM*](~OcI5[s!rџ,oJ~ճh;1UKgZ.&6ÐfY7J y/s$Mki͑hLKDE[G$avt$Z> /gj*mmftxiDa "V˲Dzd2F&p4qC3l*B\.LLL˞={hooSNT*Jعs'J%v؁m۬? /d,"B(.]ʾ}(|-^&3wL&Ŏm;qVP,ٿlM[6p" -[^SVg9Shok6SlڸerRF/n$w헾;t< &75灀+s!w?w羚i&eaRJ{T*XOb+\y2|^6ni|gΜ9`il @o_?l]7w`?=8p9spb,XaL$_,THENO@LǓ(MCJhkh>v4Pp%JYX¦\*b&_B3 lFCtq<,+Lk5#* mHmۚ-EVZDe"Y5ui$/pSK,aP/LIZPߗ[m9MjnSϳ-"a͆umi6 C[r@3nfy'9)9Ll|է4鯠Ck⾶`J#J5Cz7E2}U(V;q֣U8ZH>d8}WwyY5yhĽY5Q!k"WA~ : |*!Mh_"w5Z1@'>=FQ-畠fN[Tof@,t$eg=A.A.A&C*~{Bq*Z Tή.'сA$NW|i@E(&;֝l{zz*uڶM\bl|+AlL[V+CLGeGPGgI`#)`nwbN_7]Y_=M[d`4t.$B\%@^ɣ >!I/[_ IDATˡ{ALm[:C_wba 69Swɦ-VXK/m3̳el۹"eq'}ʒC#LLN/ 4)8p*288Hq@{ h ;br١\\ba|lmv011EP\.fP(099I\&ˑdH(g,^ 00Їi8N\!dxxud޼y,Y~4f.Z\9s088H__/=]tіI-L]25N 0edJ+, \׭h鹮jiNž9ME|je 7NW`kDyV;Y|3.iMixj夶6uߛ!L|6ilqyMⷱ5t8VYyI}/ʜ:B lZjWf'oz,^C̫Zn5j}"b֮izݤffi!ٌNSh8k]͌(C~ ޮIc^huǚ~o/.jR$_:; HRgSݫ߼EO}4ך1 %!ZYt=]Y;GϑR+`R}>Qz|HWW/\icY)tT*XnTBr"D֐i͠ 3 VYv 0HRY)H)I1۶Dkll 4C 222={io$mǴR8*eA&ch8m.^}t3\Dz hXtg5xq+ϥPKўKa[)KI̟7@g[SS 322B6T*h"&:` i[\D;E.ci3.\(&I:yܙwVfUuU9=}` ` ,dRfd&}]Z3LJjKh\ A 0WOOU]wwCdfYGOϠ]ϟ?_</xK"A* O~Ƀ'bIuz!m( eh4m{}N^-kԩTʨJ OC7UՈM˴t]VaYj`0EQDV2T( Jʋ/X__g0psjU^&ϣ*Bu)Gqnj覆)m`4FQej*PP&$AȔ4hB>Cu u]T]C5LP$M"/4`N^LxM/.; i/r*|eT_Fާ0/|9Kq*88MvZVEy\1vz(oG4yal]/m>߳μ꫄W{U|\4_&_?8oŽ8q_:%e%|uhԼ*: '_,H4NCϥtQj$TEEA/RE OTMrt{ytH4$(*q#$IDAaIP$It2NڷvLur|;gܻA4nV&Xf=C1LVl"{++i4( Z-4<+_ {ߤ? Lbt:q{ű kWjTHiZF,cT À0 IDϠ.Tn_M*ܺr뒆 jra 0899RT޽znހZeniZt=rvm޿D=(a55LCuS4PR0" Aa[Tt*Q ׯm ɯ۔Je= ]GULMѣq= łŵM:.n JÐg" }C D&Jzu|.ǣGr}ף:""@ݢZ*:ods֚8͕)IC UP<E7Qu=BL%8 oLc#٥![jgiZP%,^V_b\Eaq:'mMQ좾1W%a1¿g Q݊Yz35$0b| .r~~ͤ_}ܙ4_5dO.{L(66<ҵTM](xp 6uUo%Ę V!X N ", J? 83t$EӍz"$ˆhhu^$_g1<}ŴI8@i$E!9>>ZcoEJ%t@Qԡ$b4]Vi0M|>kbl EUոr ab6wŲL:lF>;P(y>r~OHlpWyg bVl=;{'G-nݺYNM P >{9>UTW֚|c 0svJ怃ZjƏ~H`s:|vwyo߽K>_IJUvys@M̓r./ۨf֫ufUC7 d*v;+esMvESS*#JBueU eU۷(0 h6X9># YߍCK7^eu. ,xQ&)Sןe.y@2u!P~|8G?=IO'i pB$ITaJ)LJ`Ei$iAEy&^ࢨ بagSR)4M%3a n[T=?iJ>'WMSiNT*Y99I)0Z𺏎m۴;'~F> ̢(BӴ[vrʠbײ8lI\, aE'u]Rb&QcHasǻ{HU?Q hfן 0tI<8Bz.fìmWhzԫuL9n(0pt+Wx)z=0d hl#gI!'+pr|+R,hH,Epn\4T4!V%93G'$QJhJR)p0p\EC-(QPTPr4Mu MS(:vJ3Pvhvo8FǙ$"iiFc7aB## EEEU8iI eʅ2"00FnLi$Q,!|,]#}$FUL&恙Ϸ ~s料:\}k%?/a_D[R8rgp懜]3QuMsh\dž9 9"<闿/׆g8Z2-=}p\!FS9Ok\|OuV:_ispltSL]Z.@6W# 3iĬץ 禑3 1׬v5f{-οr}P94oMjhhU,ON#yq&紳s^)t>$,1fl\flj'.vOU3avm^e]MN+ah7o] x҉)Y&ˉL36.Y\U+o+[[>ﱳ}^&vg\vFӧR)%eڢث:9ɮpU\qqlڝ.;7g٫<+W ZR(x!Ç~oGG躎u<ϣl6yaPUiOBPsU>C8zY>aP,)Jloo5Q2{1e~?ݺu/^PU 4 Q1t^s~f?࣏>B &r۔J%޸IqmRDˮTJ"2 Ze45 G1zOQ.;=~T-2Q5^^[^~jYj /nYTq/o.[%, I f l%ȗFg9./ץ ~w7u ̷U9ME#b6ᗚ/x&g-@X̦{yxy\,fR:; ,O^#L{U*JcOf94EϞ= 0R_iR1|cM7Qu>yP5=0(ĉB0@M\"shuT*(a4Ml𐃃z'(C^GJIVy!mf}? c48.nM34U2dME7M8) 6V%U%V4nB ZsFYfo߿j٤b ȥd*X@F!EۦhmDaj '<$x|dg1=n]`cI`Q+(^$$jӇDGsJ>f>1G}dh@0xrzT+M]ϏQMqM D"7j_%P+N"8յU2r()S4(2o[ö Ð[$IfGARA($y1aPV}oݬPȍݭgB!gQVc֍khgc`TJT:$)8\ȡ"d0d{)rf=iX-R)1 %R@ T"ш ICC}`W,{&gÙ䥞終1 !_XCLɗmύ@`mMYQ#Dt޽KPX,HV'MS>#>|HETURV]q&?``B舷ߺ͇>bo0)*R*U6^ayvy[[X?)z )Tu8=@UR DBEg@lseG8>謖e T  <]4OFȲ])7sr*_XhEs󊉿l_3Zؙ4?v"͜Y˵eq',z=@yWb`6K4\6?Bl5k2 $o۸KբT*li66=6nZ7v ظH*R1ezh`@S4h0 4I(B>n1i@R QDhN49>>qrmj&z}elxthP_Y!MSlۦZiVf9\||?@hbE2vBD( B(qA4p ӧjhjvcʑw2]$qf7>Ab ++pO^Tz4+tnDiʕ+xA&ez}g@Z#W(tEwSwh\z"޽FF"#s?2󸮇3~mCr9OX_ߤ[x ӟlJֵ-|/>]!#IU<~;| `*f!j:QPy1GGxGfF âRiMWzu+! ^o,7gϟۀ3]ѣGZ-t=yNNNO2?{{EaU͖t1x_.Ytu2/wlz/ZzeF"mгxrjbu97ef*tKh0u\:)>6́ɣ*0lE tQ7 ~BOB( 2=+uS'JPT$!MB,6 %dl7Ib8AQ]  Ķmz.=JtHCCQv>1 MpU3 ˆJ B4H8qJY=(*AbZAZI^8&! c$At|+ #S* ]4Ut:yTUq@M|?4J 6QQ*`ń˴ƚTqyUw*c(j-4E( Y}\f^In8VpF*K(FJB{qJAGt8Dun3tu Rs <\.aJ^b!OVptt?E (~Y5(1L$fFm$%Iʔ]8 I(zLQT.P-R UQHL(( n"4 o[$1 Hu)DQ /@7L0LP50 llnq;\^'"$jxQ7 ml9MRt HeNZmL#G@*ZM3N%#ڝ$!+1KeRLJ\-*NE 0 S8B _"2-9e8_ES܂g;b6W t rwW_=ErENh!Nd Y,ІXDrQ9Nh̖qZd:9S>ÒALi0"K/$r-qS圠v$g >Hz[BuGtxK3 9"N/3I,Tt3:/2KIr$!9 F9s#FFϺL϶ \:1Y)3И?M_+˜&443뼋E qgg2Z< ^e4M i+'ߖoZ425uo\Ŀ"xUBEg,@KKI}A&k=EJIfMӲ蕑ʻnT$X.#TZB{cq`iM+Rx,HPm߿Ot;$ `U"eB%"rʓ$) !˙p0Mtàl)J [4 Y]]%ˡ( v;3-7n`cs묬PVi;2)ܺu0sxxFvE4NӡP,Qw!xl&ϓ)׮]^s||L@JI\&"2L Cw`YV !Zul4͛(:v7opUTEƍJ*SVWWڢ)P-!XoOFO\"gVj(7V }D%~6tnݺmi:}}0P(1|B-*2GG~6no8F!RT|ͭk<~AԪn\JЩVJ>ƻ[1M[ޢX*st|­`dMnyR?ö TunݾMΝQ$qZHv:ׯd6r]Y]]òrz.HR:H X_BD}$-R)(E* n5\ݻ?3|0 Ð-%^XgoJ鸞GXbc*S,Cc[E660 k\ۺJ4uA7[8΀8IC/teR21;ݹwsw~uxA prȳgeٲ U?|qY}$E O <KGqܼ9S%XdtCp)3q6㺗636$f7FB默 <4YYgϩ5V?² ܺsVR:,u]_x)wݣ^ob&Z#T ⮭gĉU#I֮\g|FvP+|$.iQƶe޾s#VWWy1˼niW1kkXɓַE0 ٳgx+++8CX$ϓ†;8}?Bō:7+.~Q'E O vUWVa5uS Bgxcf^Rk!Ic$Ami :b[nm9Ǐ?+? V*1eYh:ƶmZ'X lۢE cT!&Q\#E)t]EIDHE>2h\fwwUUt:uEUxL9>gsc~C4p=v=V.PT DD QF 1(ܼv}5TƋ$^>~$)q*I'Tۧ&+ɩ3ϫyG̸->;n %=Is1i Oc&—9Ɲ%`{>cb'NjLΟ:Y%fڢa6-Sr i,!'e|ŏyׇD|&xed^,Gȩ3[b2ߩu0qn_9T]Қ[}:ݯl3~&35ަ;31_8ciƝroCF]<ӯ琉I,9n4ˣ)3i 1539 Nksp$fK: s ;eyMi ]y.u5WƉ}גr_k [{,h%1E 2]Rs=_?x + #0H3[g$$TIjII#Uzr(~eY6;|ISi4p\/^0p](04.ry ЉSI$U@t{2Qw|lm]ETY__< aKѠt)4H҈b+g[xm۶i6mDQD nz ]ױ, X#B.o#hFۣNJPTPh>PPuppH))Jck+++gF4V@wT53ح:i$\04Rang}Fy}J>@ 9"%qzR5RH~Wl$ b0BA29hLXm4Ï8?ǿOU'|D`E={fo߾RMS$48N)FfǟIM4VOhzܻ{ah&󧠄4[T,`n!4BA4GF r9mc+Uz.I#=훷}mtu= )G|3nܼFF_YEhB>g35NZ(HVlo?gQG I]kuY_is=o?g81)p*I(cY$qHƨ UU UEڗD~l^_سt^r.lyI܋SC"\.2pV8QX(ԯ,4~z>KL=SX)geQ뇘V̳$ TMG74H)EI"Jܹ{k~;?^wgU\os-@prB/r)OYfY#eVSüd1eGNy} S#ZU],`˾ K<h8M8/g^, s1w2,eίb8gsbKfθGFp8s_W_"p8| ə$y"xzZ_\ė;X:  xbQ^>ϋ왧:'-t 3["xlPկM7B3zi X z2~B(45N'a0p=J2x0  z~NL @SuG n hwaZ$!/^rtOx$ICa{<|FAMSIŋ8>V4M 4zDQv-Ztt:$IL1pɼ m)yrm M% \:'Ԫ%y`! Ma{{qptU$NU(*8?̴\Jg|@](.>뱳ޛȒe}{DY뫪W^g%8$mH0WOO2`M2-RАr3/oܗCdfeFFlCʈ{n'=q0 NbUhS.V~G 'Ge9<~K\g/|N"nBOR*W#6cn).B-; ]/>Q (F@ӥ`6Fv`0X,t(]tM#}( *BqDɓjUz.fD\/@t>)ӨxO>eum?}@(A$?8j#!&z8" xt0\OE1?%#gy9u97WL9Xw!(n!|U@_p\<儈?C-+1A0cA_Ε;6MqIj6:FIL,T HUP8LCGIH^*QVT4>{=4EQ#gb08>>l;uD#Tj }(6L8ԤMK8NL^wkhgB`Y__.2pXMP`8"e5MKUk:qFT$Х`Da4ҤJ"L;SuEM}A0)h0Ic&4x$Ԫ58;ILd8u] q,1Mb&^DZ=t c x6 RbHA(.s8 Y&AE3 DRt]677SOAPu8$ } <!عqSC2 JU0$!PP ICiwڬO_aWM6s̳De/z+=|9;پۦ9n/aFn gY"_ѐ9d+~nޅqyQHCgZ2\NM)4~@ܧGgI& Z7=6p^eJ茖 3S~x.9Ϙ3O$M @ _thZK,$t=N>k"LyS,1'Rr4Y~1u\v~m%ӳ\c(ߌpvQL2Y2ud!y_h2T{% }v$T0s-iY|i~5W.D @3E0_"7d籟0 <۶fAn೵E\`;b6~]^yCr4 >vOf{{V )7oDylmmyzncY߸1w#Cbgo Bܸq35ۣ^_`ZSڵk4M0Duh4H8I.MNNN(+#MRHPOX[[u]>#.opxxȳW,ZTcv*p2 "iB )988կU(wu] u4x,E%Ĕ͛4Mw>w{p||DV^} k888u=VVWR}:x]"zPUܺΣ?o~۷o ?SPLL+o}w?yħ|yܸN7o$1vOmCVVWh:|/XY\|oW#671{{w;7ni7ߤj6}UT'lnpxpDD|ߦlrD=?G<}]ըK<4L׫PT=#qJSt`#ÌrEo\ @)7?9uM&f-h/ L1Ϝ3hc$D’rf_3-1y2̖gYic;)tggN"gyNBb, bsǙQ?͕ (#W:n_@fߔ#!fYHc f'1u#y6y{Yf x //\Y"O>>Nff0rnR̶MѱBd8~L0}j:9>> J"VV)V8)Tb" ~# IFϽ0& PXY_ C#EđC bRHT˲,666Vlll`YASNN|4-aGvlnnQ-&?|ݶbsܸsv8n?\ggg%tc_!ym?@c eT*A8==`)xkۢl Mv)k&R# Ո>lqؖƍ-~KRÏySVז5 ۱2a}uDnzkغ?f^EZPv4j?Rm>R*{M^dkgom7acc~ÿ)7 B+(II;Rb`@xWXE#bc<^{.Jf㈏?~P,:4ܾ}7w/UpMj"A[[k&.(ՒCjLı aa覉iEAU5TU#"Ir,=]ElXt]F6 .;hGuv캸xk_Tg~ڐŽ6آgҦO= r|s{efM{vs+y݄yp ff_fq6.?eK4na2(ac/Ao%\auUn{kf2sI<*&Og)i3z}nᭋ7xf2晃eQ^٨`sb"<:gȔ"աrtOUn?3~ R}ed$1'dKF$q7b6RBVCt**eBaaDqZ ð ,CTUölR(i6[J%l|B)>6Mz} T.iV(@4|aiZf:u̽4JVM"!bQuǡR,}$ضP4MD)IK B:J0HE!JT/P N`](lvmBh躁tU3I_XPH` H)Ӱ⊊$Ri&f \%}|ߧZqtx֭ REhppxk؆BAR/mw_ZU%6;Xdl^SVkU NJmU qABVebh:OXr@JNFDv<~reXiZ8NbO?" By'a*rKUxK$A&T!;d0c*z ݶxOӣNo# fWy~|0Jh[&?,) ZL:f/>s꘿śOݳ!̧϶qW2V }8s/ }ymaJ^{.gR^\ys苚_y[ _ x>/Z^QR^E#0{b*&4͉;w_>uBulfww C˵*mRHxt;mOy-b$CߧaNZ}ÃC {{8ܽ{]OPOp=CʄcNںN$IpktMau@(j<}F::8 # 6uTU舭-!Mӧܹs]רUoM<:XW*O~7q[oE$躎dL^z%j^!vJ:`ķQELƮr6Q!eBx ]t=CyC* a#ɃO?E3R1 Aq贛Qĵk$$CnߺRK lm(nrfHi)E]C!jRvđc| '1Am>xfO"*^n|'XV ?ٻT5%U3LP5/0-*^E!AO?cu55g!wF؅"Ag*A0$cO),-*-~BQ4TPYq!FQ,Zzzrk |kV GStd4@HɠYiR Cغ΍[Je/)JHB$<,&%a# S7(xp被˰Qb)hvÁFRj6_F4/Ń<'-BrĈ`!mY>N9egŤBlEu~qq_/2řV2c3^iHL鶜z>_9Ү9P);;FsÞiϜATQ90]̋̕W3i_yu~9g8{x>6`6Ҩsm=v9˕߹gD]⟯gqͅ91=FudidRtg5s?"{}=}>5wc/EuG?EUå]}}2//@e EAJRǻiga۶ؘ0]'!۶9<Ϟ=ƍu>[[[}$umf* C2jTU$AUU4-u8Je2nɓ n!R_2c8ב2R))JQc}R묮v HJJJ)z.I:"u{\VV]Ɲ5 8Ckh I1n{MPrDJwrI0EDzKlmduu8!ns=Nxk Vb ixw@`_G1s N|n޺_oD!xj5᭷ޤX,}ohzlo_gʏ~wܼynihuzu:{{)Qmߧ7LoQ;#Pa0xm ŦQk 4± 4> GGGB}8|T*n޼&R|n߹7"D$BQx>`@ Z.a6jIB\~" m~Y3!_cr.{{j^e޷M3AhZ'Յ!ؾco22/_=sI<E~tԎ|~E;?tlΣ[TUU#NP@Ӵ3GB80Z.A`6H5 R$' 5Mr P vEqEQ(%z>a$ UH''hmıIJ,8F*JGmGJR`0`yyvC\1m(wRD? c(bwa },RG۩H9t6 Q.벶F۝DtZ[[O?P(1Z߿i}LLqaDQDcuYQb4tژAeuuF1(am۴Mј:Ϗ0-(Rͩ SF%JP@ADQR tB { 1AH{p}]k 5aM,'~N٢Vip5`&qNw0T**SuJU #8>9Aʘ~Kn.Ut{"ckk .a{!i1rg,-(<ݧSHp)S%TMt $#`TG,U*4NH7xGTfiyv*l,#B!Nj COVGQX[80MD0t=(!#6P5RЏG$MyA:;ISHb2=A_ߝIp~Q8EZ5ujxBô|]H}u191SfK'49s0F#6xL=!3%z-z.κ|ꌕ{4;Mw4Lnh,?#gfʜE lƹQCsRf~Cpʙ>Fs=N=y=35wS-wۅΫϭk%3Dγ M̵IzN?HUM#[يg+}~s]8\td9ҜaK(͗ӘKS^g0˟rv3K%i IDATK+ ?OV82uDC3rpdxҹ.! ;Ϙs68m(h6I 0?1KdbEá; HCqy(B"VWWv:$Q VHj-," ++B[E7, q] ؖ=j)B( n004ږbbnw()יִiN7u],(wy>Zm"J&D.RBXJPi4J%Ti&dúAݞ!4;q> !IL<C۶Y^J c+4B8NEhJ)cY$am62V5ڭ}>Ibx d*,(s=ONhX1v Y[[=ꨚ\67O(hw4mUEUvstx@E @*0 q ENNO1 W^}~e>Fz = MRkt:}zt82vnޢZK2qFI"t[wQ.|jmSNN?df~Kn#^D N(%aGx~@H I~@a8 DDA2)Rk/|%M /Y:2/9 K3o\%>\f:DAd/;dgm3ϳmdژӴ<9tfۙ 뽼]Gl,$1EcǴeҳt\Ŕ2GpQ$r]B<$!Pc:?[9/*\Q pO/-,Xs_%K**c36 XѐUOb.qo*3!ϴgZp\$|鰢(DQʼ@L{D7-N wޥnpMZk:]&o2&k+<J"{{i7;JedzZ'|DE6No}s||LV\*aܽss9<<4MnӲqK~.GGH)T*&뺼Wi4z àR#_NLTUEN:kkkH) ˵kX[Y__lrm߿ϭ[QUMppp۷OxWDQ O<#O>!# [ׯ ytrBP2- ˤQxoߤnspǽ^2o{!DBDHE뱲!6p ;7_fi)|l.V.tw;wx>믽gOX]|G$b|zSoӟ;oiMVVOjw8DJJo:#V묮2ז G/~GMu׿:ǧoSWw?֛~>yiM o|MǠItnfo:.J_x}>c_NXW_h/i9~j>nk&?_`:e~LMQTU7@k$ ~O(B! T`8Z2("4tv|R/U7 Srv W)!rQ,,m֗-s.e۟ P䂲:Tlѵ09.:j_40{q~z~jy/ˁsfE—+w%y%A/1#ʣ4|FxUoWS$gFspH9sjpTRV![+T :2xNOOX__`O>۶999p0ֽ{,j5EL"ItBvϥ5I8 2FT5l0 U# ah*n* BƠ(WSEI)%A IM3r>CғpйyN3/E2# fZH2}\;7]D|^`b%F픓Yz(T$'y˞yzR{d\X΀fZ|Wp,'9'5l04/Y[Te(0 `ii5}DçT* F}:A1BM"l0 **[[mh Y6i#et`emҨcBF)E^౶rrzha%hqzo-sܹ!J쳶TCUQ7xK3ÐOB_:&qbhQaMJB XV}aý۷t}vvvx)?ipuڝcVQƍ4t6i:7Uȥ)S>=bkqjKw99>7^Xt0 99=R-$1j^CS5^BSe~Qu~_H\]e_˦M"hmycu|z^ x:< _MM ,Vϋcas4$T B#?@i6# H#%g_eBvPV50 AKK"=%A( ;`8m5!Q**c[E:BE(I  UQ ^C\jhB (b {%CW(:&(R) R"Lj8f9S,Ҩ^Pt0,_8Aek *(  (!AL4| I,0 666Raij58fcc`0^p8ZRSETeee$PiiJn`C0J} 0 |c8i5Èbi$I@{ǰcui$hbk$\pt;\ܤA.=\wHyi؎N<>0UMHRyd#&kutݠ\{pm:!vƵu:6a>?>=&APU?G!Q`K ~B zʅ*ǵ >|O8iv ak CJ)T)"ɣOƭ۔JE`w?ҹY.h5=`&F ӴUb{>I,YZZVqz򉑩$_j:#G)|%S!$/ pA "&_DEĩ`^4H^<ˊ C[^q"?LAd]/Gbq=*\d~sQpѸfiʃog&YyױŸ8+3w+͞W汚Дf}=/'SE 1Nʴ!mX;M5@rp;^]\v>qݔ"Әϻ ZD8a\-_*KVڝU暩bA;\lnU+[{ܧgka}>47]|_DSm5M̤Q 鄎F^KxSe6sv.z'̾9n}d4 0Ղ,ȒrAg^gP6C$2omV~~5C|ЋgDž8.x-<䨕jj̖MH#骊*N\ư븮KJk.c 62,۶Q3 U?:#m2ii$q"=\*R)0L4%IRr繴-:6 z,C"Y]YfiU R@ߣa;6wnMYZ_e'LJ|Nա89e{{0q 6+k8"v "Rf -'MR?|/Q,?nST l"U9K_u' -|>>Mo<~Q_]ԇbr<\&blqfnW|\qNGd&7Rxy^K| ]tXľ3- e|,ޜA܋ *"׷hgsyyy.2Tfk=+1Os oڿgo6wͯY~*̴6SG3>+"ΤasฌEBq?d\̓Wvf忝~՗9V.YN儈ӿk?'D/}՚@}i0'hTKe4M#IY2't /SHíkLRF1I:"]X(A"T$ ]#jEU,^p $"j0P.'a'Izi"_,0Bѥ$I0Lw8D w:6:#)h4%!zG(2695Km~0iy8C#s0M&}$u,f( l8QL!2Ѝtl<0M{b޶FI?flqN0m0D3IqxKT*>iT~O)G1P #0nb{maEc aZɲ>Ւ2.)UOHS}$i;T*ќ0 0 0𼈥e\wH8V(t %i)d")8VzFDW5"I}ABU43zB`6m~ӲB1'E Ykl!b:\,3SF!o\0-y;Ws ]u?S=}9y<A4ƟWEԗϲ+#]n[F!F%< 1α?Mz3"(KYxSJC痛#q&fEbŬ&9-Jdz{\4XS2{(Wh ljp"8ϫh>i1O\}D]vٴ&|ٿ /y>{Y[007whk,NzAs5:Oy$fnN|Zwwr!⿢`g΋M8bzf5S)gcB˗-3.B#͚G lL$*T!EKX8$,a(*`j*I"'HeYQ'FZ.Sq )j* [?־ 8PJ4T$qLNףh;Hj<|_v h`R.Qx!˴m^}UNOOvE>BׯvBprr6QQH 7nh4 nK)$imll: a}.qcA:NE+_CeYܹsI}?hܾ}0LMznj*$E';;; 0{= O_y!PAjVhhr@V6??_( 1I졨*a"PT)$B;0T ЍPU(I! ES Q(TF?BHI, dc5aSKK55Z,@>V 0t,lF CӉ☲U"<@ќU1X.՛8 i rr Ӧ/gyΊ8߬I#ӫwl5i1v `󻘅Dߓ0v$~VϼY5S}$&k~F2's#l^6gL;'#;usbv0Xvc4 \]qϊ8/CO?% gӼ\d<샋!?|Z_/o#|E@_]0MF Ø G)e*|Qd Q*H fP$O؝GDf֑uuuUOu$gGI[~A]ٚLh&lEJ7eieYe=#cH8qbh"کgI,9,(1yc2 H7M$²րBeÔ#wkp7O9>~O</_O?l6ãGX,S^|d$ܼy p=VU?kǸsNO0&pmܽ{n$I_y&NNNpppoh4{mCd<5!>|ܹx?ѣ\.7 2|899`?%K߹`<#l?wO_%;|+`q %FvoE$OP/L]k.1Y6rY,e.sHư\.U y^' J)QRY-X9tI\ S%#$ ,|YYk1Ae| C!P)rkΦ3ie^EzŊLT;eYa ^UJâ`8,лa̻ VVK/)>02!w=.)![wMA+WeTQ:qvճCG #ng_ݓv.eqFm4$88hT5H-4TTGhh8G? *9ch4Qf].}[6EQ1@ 0NAYT U8CY(4C+ 8fLOgSLS,KH)10pqqt 9q||Ǐ֭[U!n޼}$IR9ŋptt??Qvvs.ӳeQ ?_/wŋ/gBܹsөjrǏ,K.k!0ϑi :_$F i=V.ò(q;O3/snb- / d<쏁9n ɏ?Ƌ8:)681pB2̱\TA,!#Ȃ⠪%xY8$P Hʚ>GP`#aVJ^ji `8򲊓8I F%2DzXk۹@!QRVl}X74c(4x-TY5njV a+@x|7CѴ'qu)-scL:6i.kc"[ƈ|͂@lNjzTؚk:63e*:̘f&M]0ҡ;-y[Jմ`+u}\M8Nc ž2ԲB^>MQB+ZE'zz utA-h4o B { NCjY$8l u_QQ^D$5kғV͏Rz%>|ɤvLDUEQ>W_}z)>3$IܹHQ;R!~x F#H[UM&|ǘN5P%/pM *EQÇx9=tzQ+9)~`wwcH*ADj ;99Ǐ!d$N.. \J1Oٓ;׿lopr>+&1n)Jw:~? Rsqι:V5!YskTmMR`?DDKM|c5CUoU7Y}njZ-߿"]GGo0p>31gLFNgx5ٳg899˗/g{zyÇ "|8xep~~kٳg!LJ( pz(p|| ̗H %2y,ػ|7gxut7X,2!;%d 4X. "IW]Ŵ?7Ǽ@pt,iDV8dpJƞCI_%kYl6ُsqw5X%>҆Yy՝;oa"W.2ANv oMn[\};E][]Mڂ@Kcc"i(j{{{.#Dm~, }$L*!_MMA 'gVb bR@`. f3p1kj?Ey>߿)%NNNrfI믿ƃ#u%,q||۷oCJׯ_͛8>>ěz@W"(:ǘ/f5`uzz/E#8<<1_o^x X寨D)C_F$}\LSol:sy^m |BY2-gXꗯ駟@$%Nc|ykYHR! n?v0]8x}S\, Bʡ3?*#SM}r~FM<*uOsYrHY4,K0:XYB璦?-ݨw68;>0ؔ7h5om]YȌ2;Ǣ2Nu9S&pJ Jlag2U Sք-mӌS?M{~E{#U{ / /9}[#frZ3mpE󏴩Nf;2ǒ}GsqKW {LpӕE^ӪxM &dFN<q'chV]dBզ>fɭ';oA(r,KՑICs:!Ig_i,TJYrn}P/_>cb냗HD )0JSH"׿3x (%41ycA$믾X.1LX,7yvuo~@ꆷ1 KKkp102,s|Jm'xXK8I<{5D瘞@JUbyLYI$ GTeL>|e~,Ǜ3MQb4"IAy 5j/R_F;!j udGiaQ/̖ ]K\2yQ ;!1Z`z PP`b qkȲKc:eA[h{đۍB[[RJoOyWhk@ ҋ*#HԎeL()9ΐ%Ε%;aIRjeY"K%#Q?$ UMF sRƇRD$I8E TD0L`R]$#L9AGD IDk'yQXRGیRe%Uǟ(8{'w1]^>ë3`M$CRKeQ*P),A@V%HaUGJUNkB1haDjxI@!t1$ 0O,Ѯ _ t='Zg H8R~{l&AMxJw-]W~Λ03)kjfMgq[O6h^ݛ(˧Բl T|Dqe Ü/Bֱb(d<sklyOFV*"S[9}ԽM:ڰ.BF'* FZ!G+'b D$X|?j>Ml8yUQ_ϐ%cA& 5}mIe4B%5"Nə.o/)t3=KluS3&o{u\uq 1+WaņnhIVϜJX4] ZΆŵK OSAh߯C U]еB-m@ *(VpPy`;6Mz}0iZE;7wnbY0 xׇ HJll d%Bty puÝv.M\Mptd|gU覈d 2eaVԇJ껮:O~㚦`tC25^ `V3 wpmi im(V ? }9 J}:[E gD9j~}IJX9eYNwjo:X'P+05;`j6 Y['q} lO,P?Пɀ4,աuA>8.B<:xkK#mAwF}TF#ϢR@fhmb9\IV?eH4dπB c)&=lV3DŽNF Q *܇1#"&BjknbwG]kԤtd_к,bߒ 3Sa2mmЩo4`ӾH>ק]muko4r'ė-v n9_V8NdۥG`PZͤ-sS26{F6i Xmc9 H2k=FP-]Eڂ@mnUa5Q3 I P$`_>$s1gK,Qo1_u@YTsi?Ŭ 88'GllLԱLb R:ϕiL/`S}19vڀ96knc__YdbkhB{9C߹vCkNws5G)KOz_ꛁg fő؁bf4ЖR ch-39=v֯PD[{18I9V=3EuA /aR'>`Nn*m} ($.zT8j˲2uQ|:8RJG׉&˖[ۘbw/bUop_!d^}pqKo ;U+ео yGBU#hwJƿC(x uǼ!)s!4a@WJY\.),|89GY>eiKJ[eEG9R!"w%Ϟ7/"&H18X d(J"$pVYA@B`2WK~.dMBK.=fє1SHCe.K3z`GMwX.Op]~ԡԔSv{¬02 E~2s4n O1 ^cmzW}ZS_oRC{(l`:SdkbkpM}eۖ]OgPhYt56"nr}Vf ]_(P"mbPW{s^]+O50(H[s <~EQᫀY>aUsnO ^uμ82G jq 0` )gǘ/?o_t8==2g`Dvh3y bBmnbLO@&Jġ Ld Zt@c&0#.t:k_uMr XJ|!_ 'b 7x8%oNrjŗ'\<Sۤ>Қ-}a-7.9R1ctTS MZfԢ@lSETR\07rx <+[td8u ר),g]n)L"ηV=Oj81}uS닮\nmCSqyZ>d=qz|nyݶuzn<\&O[Io4M:m)P x2ԣlJG.;;;ǵ*|}]M,]"ƕkm+h4i4` EQ>V!m,[xRNs2AkB RL-+`8tS^D>I_o.0b@6P)6M?X>_C{i7E6@gxe/uO+hAw+{E?tޤ=-T!]r s]^.w:h^N-m5$I0cC<߮jU#4'իWxmPVQ֍n,1L85^@ibX\@(em7_}M{k+ M+T `DȖ'( K3c<;8:~%a( )8@$=9Uțb7Ƃ6G.t¥\+ΪggqVw}2;~7yBq(D ^_n#$_UM.4MwAit:&"R"Rb "BϾ?ϟ _7H1ƌS(r$:$7N(>1ܸq{x3c$"Kp-di.8拧}LS)8g(Ki6 Ȕ0 K {{7|X1D$Xsp(Ji(aX$!Rp!P%Q='c,KzpbXD,'ԑ&`R([HK 9C#K3dG8IbYp')@sq IDATCI*_9' P;kƅu$2wI`Ԙ`3 WX]Wum2=n!)ueVƘ峞ވ͎ }ǻSuC9a?S*a!|By 7 vzoVTKP=!N`1t>@~3yɒl+YcKu?]ެ,Nͷ)U]RySdC9EKͶ'ٖjq W~}*f X J;u1q+ċ1}Բc/K֮fCy^jNkq$Fh >wE?51֦7Sָ0\9l_̉{gkc'E۷q*َk[LNJwa gɌ9i|݉P߽/(ȧk };KAYRb<>6rܕ^3: Txh}e\,DD( y{ waZ,!RQ[|#w񻯟 X.H%`i*R"PUF p0O>l:Fx1F7P%1~>'׿(rx8g$˜,~A_fR]&!&QuPTr1>q0 yqptWoqvz3BY Rl,B / &@A☤ Jp9$#d)0W" A*O!=D]zA!,‹޷MxSȢ8esem* Ὢ][Z@!З̛z߷moRVhE`K[rFc{+ p /L}q>yA~^V^Wڂ@6?J Ooo; F%b1ލ[8|?O?w=?HFw>|W/ɧ  7ϿGo=>~A%x5<|{xcWI\:E{ 0e G)`//$&;cKpb>C$fe`< $vvQSƃ/Fܻ{o޼(+r6rͫbc6g88= g88bt4Qmo@)%8"I \b 2c`~-#@2}+k0OӰ޻uuOYxvnb6d< &@=?iɓqmdY>{{{CY88xO?o޼ŋxʲDNᇟ~!Sf3s޼@R=cΝ;ڨdI#q0,,Q[8;?AQ> )Qw S$? ~`/HY̼Y!K QJCb#As0"$ƭ wzǧSOs\"/ DNHqHK%AYϙjsA>2'L $F#sɽ܅;,ԊZ8 Ϛ1 Γ9 k1@=BuOr-#+_]u֓sL XU0HK*qH_(뗓8f#+đAJI5fmBsav$ fM~YVZbHV]/NYzqm"{nnuVZo&{թ 0̫WGP,6KSiͱHwp=Q7ߙz!Kj=ֆR.FV,^m*AG THwq7fk"}/u lKݴikmeuЮC7a+{S*![+$8==_a6" ylȲ ӧx> "El|C<_/<4ː 8^yOhf39O2dܽΧs$\J0''` xl|;ꫯ =Wx4x<%fY\_U'I48|''"Fy{| dQhׯ^O>ƫW0=?<{ JY`gg[7ptxCޢv+K8$(r$ R_S䜰{';h|. S%N/r(P18<d i3swuCT1qcb13BER8O| `j@0@?&E8Utх׊m Pb 4Cǁ4Jk>g]iWɯ-ek-]?x!OR>͐>k.ڀK_ixӶkKZ@D8JuJ<֠2L64eeeY }|>oҠ>N9c54 e+!Zv[;U^B Idg/9ny??~s|Ǹ.={{oQ%dYbwoBqI%1&;C4_I"YHp>r0,!SN^`4%qsoLJ8x SEߟcww1L8<|۷oߡ(JΝ~}y}...9vwwqppP &P)xeGYM/?g< r D?.ʢD)%~/Qf)wpqq(3A098@8Z1 k `Q x\]D/]dK0A"FM!b)$PTG.fK9lŲH i !R , R+H9@vH-p@*jIaZMM8wWΈ]3#)Y̭u?}B\ǚ3v i]dWxiWV?г0xv=G.E%k4:}*RE5(Ҧnꆜi3Cib M0#_W"mKv"̝`c5om|v?K&`C-7N@G =(P=~tsd5v^nh;>c@ſ@3~l %|{\(U1n. Zf:!V]N7|v!g6MM,˓]KhKos#emVmDxǜF%~/o~QA)cLF4ò#MHb<ʪխkd W],*+vIt*8IG2pْ Hb>xލT7(Ib4 1ܺy  us$AB$ eWV`.s}\ \@R(GHn ul,Iz1M0EQd B!K ⭯ כ{-qd5tɜ:*bHy) ɐ0*@YbƓ4I>{( %,99f9rYȑ#; u[6ށ4iXL{mܶ崗m0~4)cm TBy!{5z /3芁D|!PkҫoK7u*i||ޛXֽ$clwv yE(\ NC60m@}j>|ZS>-[t=A LCy+,C8~WH/c@jkrY`@@(G8SF89;|O>T2$JBǩ9_,Hf\(8X.P[[$B(rpF RVFe4($ui"F l[^PU_LJ<ҹIT W@TQ2H`)R΀(7SHy E^"/ eE#%KybY"/$sXe!QJb. IB5qKW5K0Ҝ|gCb-ž=DUD@W5ޫ~bЀEc{+(E=Ե M,}@%̕r%k( J@F<niN 9o-E*+70[f Ws${k^b, X1[hyXA~e՟7-cv}6a:7o1׺H!hl< Mk7{u3j=7I6Q-o2yuѷB:^zEzohQ[!9>Nu'MS&"eM$I},,Ixrk9#rx|(EQ(K$(JuIXHY,)`rc`q"Q0^)O9詻 HP`r, HIی3Yu -ƨcDW_[lȲG/|#Mu; I"@h/..jK2$8oF#,K "U})gTZs!4&-]ebgti ]J f<d#b0j+ gjb<+`4&0HF!h<1w%msp$ I K2P'KMSՅ/71d *`Dt)3RVQcTyl,\w"P^4Rc`8h+4؛\q`fF~\+Nl[& Kvx )d>R"?]멫.I =[pqdx#`L?WOӻ-kd?:ޏKuUfqI |.L7$:,C_r%%B=Zɴ% ;MmM/Z:KZ凁puڿO>Vcc>?|KF/2 aQ蕡rofjMɬN5VhԍkÜX**WGoZm)N[}&1l,RJGpysn SYHVE?E-6Q|!`K*`V_U4W~J3((vsrd}8þv=^@wt(^tMq+{KgO?kYp{ La~h`.?[W11 䧭,K-?Q4Mbb@$Bx-]]Җa %d)ARbUTV(B:FZʂŽEo.es-Izê#F݆5ҚK?m mRmu}Dej¢KGcW޻$ۗ#>v*.8؋_XYbp߅[xm :'9]2C@P j{иe1e T86[TzF tXC#7 q{mrfe=Fc=u4oWB>bmVK,x^}ckгt-Am[Q+ʠG78@DbQRQ[t4U>p#'ҫOQpn(4QV+`FF"1:5{|7^MN,imCmQ䖡]uz2]"ρv?0(Dyp8̖K"t ";]y]K šyUunl0~ E^ ^cT3kSUW@C"-RlXj12[jS x[c|d}f9fߵH";p3xXRPaF^YnRo+3}IhMaϺ#xQ}̓ B.E7|GЖ>zߖKFX)p@,6N IDAT en:vdb$ 05{bƺ۵:e@wACmeLڂ@Wb hqX} RJ`4ZkARG^'uѫXmz`k;ze 6`A ߔʪ`E(ó3, :g$YRػX BP>mmi8Ah]|VI7`}TcDmx8%zt%ܝN{oK 6Dm)Ɵ9SIhugQ9,xUX|O/m[Xy i]gp =vVӁt|8<}g $ juS~?>ޫAXniKU.0%W߾ҖjuC-| < ѭl(N iGU6ˆ! &mNNtB S`}ӛErjDr8Yw_DY@p rsaz5ӔX~V⌌F.'* Y] qdrϭg~`*TVAEP(x_9Vsqj">&yA6𱊲"ujՏf5y߇ Z8ߦَ-=]"3VdoP̊ʌrB^Ui W1 p\c=(%,ee{%~fL3&1X*tNG$AU7>IrMa6LO^z2zmus] ?m'ɯ r{c s&ޤ3/H1&o\8z]:`m)_prbBr8yϬlAܺe׈qB؀W ]GKۗBRޮ@P.0dt[?miKם P68x @=0:\!LJ<1N뛟4@y׋\M@#Q" e`Baa)G'Ϫm)A ~V߷?{ Y[Ip}@~J VtqO_m'!_39&Gdc0xiH537^,f!` Y 2X c P2i^q `%V|mlkY0t }'*;\wtfaӿG`K[蚂@ Cn얃!ԗoZȎ[hC0zXie yi$HjEFs]0uHpG+5k_1@1 gKW`v4g_P=<] (2I$9r]66@9fg{e\aV\ijlƭZڜ* r>ټtm9a# s]_ƻ\yzw\6xd ,2GxXuXZjS}RmTu3 i]SΎg/o}Gٟ0wɱΒ0_7[:7y4!0}g<zoIv?tƱ2ŨߗE'.Sy|i˧-}[O{ɽcw-|Ⱥ/7| ȳAF=9kL!Wzu'fz]M҅m"6*6m }B M6jkH$@Z;٣>aҖ6Nbp~Ga?'lo;M'GW=bv݉gJ mg[ePX=2#P^qt(?϶|bL:շ̸1GUjԲ[35rs\GƂV;ܣqrYpLHn*Y%/cpԋ0Mdbǟ%tZ;>zwlaҙN, ٟ7kd3gucOH㷸NۈeXy9p]q . r~zG+$[}]6+U)ǖy̆gia"ѻR'lKo7nxlL-miu ` Q{vdL^ v}=W./JYce [/CI5_c,+*ly\2tBV~6H*?n-Wo[zZ@jܬrxû1]l5f*WoF-m:Ѻǡ7"%BVѼcꠃč K3-t(yB f4mn6*WGOmO:g,):l_zVG:4g:,cn[b@/[ SѬ*~zN@P:#('sY@V]GdBP}m@Iu+9:g{4ÈSgm_t mՃ:4TQO\r[^LJه0ȖW7^Wx7w YW0X[*Sb``~3̐u%;}iߝۡSws r2CD-h7p9"*?[śe&-k-]}dzb. 7w-u Ж-miKdoOma)*ӯulm/k:hN(1Sgʿ+Φ <.<7ų}5<*2o*-mѻ_F;-h eZ}8ѲѠ,BSxpܶc -Po/wUU;]VwqY2_[l9~ź;y5ˮ*bNm?Cm (L4'+s(]_?KH^^I}$aM`og>]^[fy"}K  m2\k:u;2+[r\j*h8kKU;Kn;O s >jb1#/ +MZ^G܍ he0l .qzL ح\']6_g.ա/ʊTWLP7zS~#'Bu{s\c5Lsc4&XˉMI:^d 7m3Cf[^ xNybsUnӐ'Itikڂ@JzEx/ż.uxy> G8 ͡.Xcm@ O}#;u>LjhX~o/⋞pڡo 5_[kgA9Gb`y>LWMˤP|jMafnL׮-c@h?2\e>_{t "~v-{o.]eWS:fx;Y]Vz>gqGԂ&$lU'V6KBo4]oW.&3DD}?.\O@So,},e#&nҏўdK'u-cE,o̓|ׯ_mRA^6mPP,*W&ђ/q2mL[sţPmڡ5 A M+o|!;ݰqzoP"C-±WI11v'[?81ê>vKQ CЦ3fpͽ(}^l5KC{63SLf5BB^:U/4=RƺBY:o\ /]i.mynGDk' (92P,^\^5=Vˡ1З uۄ?0huf#OkV`vf*(j$ ?nz5KVi,en{Y 92N8<9QCQ[u8mr9Zvy?L[,}/a SwiTZZumtjFvI{}Ɖ}\]biO:5Ot52)=U =-S8&Zh& شF:#9L$euG7Kt}ȚF~`|Ʊ_5_P^YXWg-+73ofag@vf$(bܗ K\h1_5q|Q4'$F`6a{Ϲw߻ûtwuuwuuurƲgK9mF2+a!0lCrd%,InK%SQ 1 0yZ ((\*Ud5"lKB h6J3#^kb1=6:`rCiHUIQË\4˟tO UUyM{K΍\z_GARG94ɛOnʇFӓt9?.-<0u'KDJFV:L3eDli-qX!o;u<[{G;Pj|Ld=I> \IESQ@V<TML3x}rӗJ*< N;)^B'ąGiX:L9v3q-s눪G_,Ic:=$^"pF>o y@;I+qA"o6.0;{nn> ۱U[lc]8Q9SaJ5thIGhFctG2k(yYcI/-m (t7{K/>_:Kaѭ7S3kQucaÃ:d۴fLͰ\8ӦBiA%W4$ypIQUb[1Y`EG2s qyAwptqnE||g.he|=%kϹyBtyb>wIO)@:t0$nP}~-;o-cz؈,۰tux6`gVtFxWKLgl?MSqrA)EIY`wG(6@:c^ͥѡTbDwv˶|Fl ~qz Ym :jZS-C/ο֎i iףN~VSn\M،QkKyhcG{_L܆OLaPw!ʺGLCze{KJH9Uݺ6%&y("*EСH:łi=L@^gp@K$7.s114 =e*}FEX|t eodBN^6E@Њ-<ů#)e7B@ByC+SPę֑z+Ca'7C|P˿,UMԢ=`Y*L(j2q։;.EFczE6[Dx8$;g* I_mVګ,M'ɨ<&ʬ«˜Qh XW;L#wb84UwqE{ AEyR4$E _Lƾ^Q<.ޒ^l}U۹7N{k{}3z=.4p܌ز,7 ˓^\ՄѰ^qPZ0>xG@I:Ed%8%!GkСC:t0ԘS: a~:NE{j(ٯR/yHMO`7ã芜.k=)^H'CD̸m4 ݕl<]5QMСC5X9v$ Ma{9M<uLK'E꤯LM)~|!M%yqwiJNє)rӎ%h<ǡI /TO7cZdH fTjͭm?k.շd._opJ?a 9ccd7.T<+Ϫ.Q=( GS ]Τ4T4"rY{ mUx! eԙ/$Iw\DTckٽ!o҄A]05lXlgX0M$3,mp4NF}ee2 sW.Z%t6ت]ax*zGb(kPPx]jM} s 9nG%<y':cXX1K38<, =Jsdp 2ۛ+w&#Rǁz'j{>hxr 4pq˜8'Υf[wr!+ESH+`{_8|h+*'KRgNХ=FZW j빮 ΏXbxYt\D$QʋDjqdGW8DJo\%#ұɖЉh&tA0%(V28U_ywΠпO:˾[=w o,>:f j\Vw IF9ʃޤ Gx7nw>9?N-J3۫BV, V&/ $;9ʿEc#]ˋe%wX9.jV\6)-GGrQl}K{]g\n RZL׽/r?ȓ{ztUļzaJ%6n;E2U28u7x^G @"K}[@$D犲d8|byu>vaiL1ԺmҞJ|nT_rta"PG O5HE:uLuhvHΏE^Hs O=5N& 4eHiu=CYhWn7rR^|e1˰1ב5$c5՞sHAuh K@sH(J+/U<˱#*r䝓,d[q8(]~zQ.*߿d#qe&՚+USAS^(Z̗E%]١aD@NZbhBqKLxmĔ[6i 5(5)QoDnQf mȕ;$Bի(*|YN% uΌG =}oK_BKrElԠF+/ݵCE<#lih²6՘)JHf@7琑$GN )(` DKBXoUaM2{i+T댧zQ&Ҭ9~1n/.bgX/TR`^+vڸ kn$\o|QGMma0N2Xem~2(M,!{ox7ΩghۄBD,ar!eWk)FȟSRObU>&h!"iX#H} cmӛ - TA|iݢ;'X)C:n}[0G ;ꥱ,F tF%2> Ye%9K@\86vV.Exeǐ`?QM'U`ɟMtT'؂b$n;ewCm$s*HN/"KDR";#v4Tu`ΫrkDY%'CVUlk0ct;WߖTb H-\cgy|ոcu'SP|gwb9զeP g{άܬ3bLBFʟ>^Azm$ ghjP K3$ X VutA&!Avoڻ-P +ɠrN,8fF D`j /R4k҉UZ:4jj2zt׿FMg 0Mwe{aO][6786 c;Gdd^tw9Ra\/̉zUk8nvQOH)9pz ?k'ؒ9<4z}q84K;.4ک8QtBt*Ǔ6FDhy4CY"窔/r\v}̏[ל2`Hk֊^+Ҥl0caƈ: Rnx1I jnBi_ Ktup_hB~imrf*sw8.INvO+ |=q0z1tlLߖev䠢4(2ˎ\&ԥO)g.0uā0OX3'K6&bY 4{ZZҁHt4 E^7&:'Фcӝnb=@ YIe' pEJ<ZrN#(Py'N rLȐM|.miΝ< XzxXDI]myx: 1-$ڐ~t(A(Muhr$P/s}Ƨ]fYThW6=Na9Qn7IUeV;Hκ| f-MT%Sq1KxԡQǯc8J9ɉDC{ruQrHcɡ"і(sbGU<7,&J4_efO [Ɇ"߲84NFӉM\ }vjh2d9Ϋd7|Lܛӈi)%l1blǓYP95nIgSQr딑i<lYZ 4%Ճ6V4t#jX|(>MC'ďTV!HD *tICav(5d%)%A eԞ/fxbG iSЉKY.9NIڴq_tO,%+-|e><ˑ΀x כ:QZ!CZɆD1ǏZEY#ExjliDgnS5LdjQNƲYM9!/gXcnʃORjJq֩SQ [n~2qпaUZ)K,ʹ2.. G\|ejlSR~mN^(K9 d6Q,)Έ;d&~"f 0JkC=0RO%EⅶSn0F|78.9uIw{d-v)Ҿ.E\2|f>4Hwd\]:%lQ1fɐtU/a [Y^k(P=ׂT_h琗e#=S+ik&086 zJgB\%1:XF/6Ni#A?liD 1 3СC6euOaswoa&ѐ4%7J%OXq|6v&= v2IHBܔFrAYTI,AˋO$oF9MCA 疒C?eK>zsIJ<9EFNm-VI?kC;tgf꼾JOuqyt-GJi2qdQiҴ.J3T YWpLh\[А5vҦr>(etДcCR2Ot^g8+d>.ͤW#&Mcz"k^8ljQdu΀DÒgƗ91 =p;}'fn c|&ݬCQ'PHuH]+qPimL ҳaKG,poT&LjR˙{Ypnmzr_ϣbi++sNtsf'7}NJLH:~#lP2)|VKFvq,}SGq2exnC{%Gz2m?246O`Ѭ9gC骹1cXv.rtmK)fq yCY~V6*Q"e3Rww y@ -%Wajm[|wHXPsMs=8X),g6bB$zPr+Q&H\7O3 ~ ԡCj`A' ͡t9:$vbG*CLg9wfe'0J`4u&)#:, Χ|z\^%mۄ&k<\ꢭ&äR~x0h"5(sh,6DE2"agb㯄{ksyA ( nȠ0"YH~}&lXm3rd܀TzV|҇EꁙCi{ r͠*7lk\PI|5%қ9# ZT,:&0z(C/X~C/BA<7'qCV1_b*BD{1x,q"dR ;vh{V|QBڜN('׽h1EYF9.w2{xHBt4hz;EjGi(e`ctR=:t@-1t"+bl?9hP1Sݭi7"PNZGVV7>4T3/,vbgcM/ )Okz=̙`XRHYSf tSTIr!u/6Ɏ,"O@2!90/˃2"4NfoY~Ok:\-aQ^ntdx0ֈj̆Ǡ/^(I絺"YNtx5#"`tbrOt/fCCm| .* ۄ2ǝH%@>TlUG \V10rև:;JLYN;¥h$#JMu@Q# bb /x V-jFnm`XTv=YJumgx ~zp9 ^8ᒱ#c'PR*0Ҋɫk-js O&g2(QdB,6nF{(_ %=gRAjOJQ?r]KzW'o&Ša%jCs,Mp{}PSBs E<9NR]a:ATJN1hX1]4zJzVIoL| ZxSI. WZsag Kr V}9o]J %.yͅքIRyܡG^Jb}'7J c }ϝB2u%-vBmc48&epDeLpJs/ku+m[VΙaH:$}`ΰd&3QxD{ʫ+;ZWًhvDt%SK2mv yOU–tRtqʠW ]0r7oa.A2`ʑ?7 CN\H{?bHS bM˽e g=KÊ㱈.rzX c4RXYTϣKyÐ6)ɒ8EmPi67qC%-LdŎۂL2C^)H%]sIw$X =U:ɋLh׎(ަs9Qk<'wQX k3!-&ԮZ=`SERh#2y7&LSƒ˻)踔 UZ-$vALnJ2לkHB/wҌymEbQKV8{J]W7ǝ<.hXZq0ck(g.z"ֲ%cMj{/KiP <[1Rb_KJOJKQ .5P`(6@FAIc]Mķr2|_?N>J'u4M[K2׹:+qy/9ͩC?T,i2z vLEN ڸ: x;3Jiq{&v`;zu6kkq M> zN@ ;2ɫE]yZ9A:&_A;*[X. 8IߍKWz?ҙM)f4d+/-=LFW|􊮄RBXsX`4VR KwF{<;^Y#^׌I4UL^&V΍2q!mMhf@br͂EGXhbY`Sl232V`ZӓV;fSФrSn>NK e~LK]?*ұ|$}C8$+H.p| /6/]8@:A1I;M@YVhbq` ުRxef:2l[dwP YE' )'Kv̜B:9mSeN|a9:d5 c'^F&JJ<%(T% ;V3;_J/@̉dozo9t, ,Ʉk&_4֯j}yݯ7!FnfwՋΓ#3l{?M !ɮxX,35Nj/ b I+/<4L:˫%tCCɎ~t|E ONT#8-gY'-/ma#Jw]sپ!Ff<ݎ<:'P ѺSCi|_k G3C3L}M0]vR&g`ku.4{ĪC:Q$=^rՏfJ~\XX4M5:taweJ5yf59dHTnIKݛ&C3 1-%s;С?N ct+5^Ǻl|LMo-āng;_"1\yg6}G_L>f_Bmdmy96҈/*n7KikmONOcDgL7ܾIƴH/Б/46׭q T<(å!s9={7P|Y1nIFE,NNXh}/kWPӊӇp*7<.e~5!7<גZD);L>p9Vv,fҸY]^$?&V 6~{HQߎ{(r 3mngUE Z^IE~~i"U4СCoG)CN;t\t#N0;:0Ttb( b(/SFgZ!Z/Pﲵ6hH]A#']EҗRN d"0V(U44N%/tLuK|چKyQ̈0m)m[s=8216T饤m}R5tDB[w7DeJWJSӱOZnHvǥr_/G&4I{n/a-X㾙TѶz|cZ2kW>"J4 NnjF+ۜ|PP#|5ڗ{7Vt{@Tl SjYUZ]ˡLxՍgcw}lTw&ECn%mفSӂ0_d%AX39DW@*Mt:apMԡڨ۲db2֝9Z)R!5ʇʜDMQ+t-S%ѧtc6V(罭C'撻Lt4{@`<~>Jq%SJaIKSʫNI4wnI$΍vC0N҉`r 6 ¥:nTJwN} ~;{3t%,xT͚0}%3cK@V5B,UZwl,Ko 8 X$[CH0ǐVRYa*ƧmU&$DANPWQ="UR.u}w ocV?cS"VqlÞ "_pqlOܫm9g!4k=ׁ*>1P ɑa1{d2V񉳠9.AHF:xEAA G} H:kB$dQ܄ǁ_ ece)=UEKHϳG(%5p* NWt;}ssM.Bd~cp;h;$Nm1ͽ3M!9)?Z.СCA?jlKwԣӡC4CiǶ\qKu 0vbT~Tݡdc$wuPoaWR[f#{{>I hŅ:*CKc(| p֊)/@76i80 h~ *qchZ7#MMSRVN@_d"Yd GJGss]x"QeE+xWa)+"*I>Z˖GJ$g"ciW帧G鮠592Hߑ)h0itk|Ų6_ Le9{9(ٕ *gV4zb&5w{F.;0ø$@| p,J.icI|C6 揄:=Vve BR5Dc\ī``ÄlZnIz)+Ό":'PR!:LOӲ.߰QuX9$)I]]4Mԡ;;nJ9"ag@]w4NUϭsH9@rv3CƔ*vn5 jt443ю!85 < r⪳2.!qBg=tq{oy+]9q&VWc {B=sy$+يgЎKC9<5\ځCp*H"A=)~s`\.][ї{0ɾKtcRb8=c֙Q~^JqT̚5 ^e: ]zU{韽@Oo/^KŒt _§C=^7YCbWnf] ܳoGyva'xG!<(}9Ra` ] < 5ke+h OgkKQQ%V}X5TWh]7 (/_V>q/"ςR;'vK:]9^%ƫF'bj <͸|:.l^6(LQ&MR"l=nNWol3:I3KthҪ\V^e&t{\*,/%kQt8aav6&-owVR! LIzJi4G L߇=3`b`}<@Ea@ ҈vG\GžM\b~6_I;xw 瘉@R ˣt%JFԦ$L$9LQh8GsT;=&!dB.nysfx+6#i9||0cJ)WL6w4Ff">elw S=*=smģX!6Ni#׉i,ȵ޻8= n,٢]nb ba'8,&@WկعtCvZBʦ; Ql`@da9f."=EM7\pSsA+VV}O/_pᮻŋv{,ٷ߿|KHO~c{'ǿ_jEpםwŋv.>(={Voc4K/Y j1h4߇aLB8t֚N~e|.Zq dw8@ѹEOֻN#(t]Clj z~+d[̏CaBcDqC,֎Tߒ ]apc5; }NB&kN&̼:t#ix{[o3f`@7^-<:r>G﮹򲈶Sw|>·]- &شi|/nU+o{2#N}'Is77ΓNvx 77xv+~ۭpɪ;b-.ǺG)Pn&׾'| Et6mKV?7tt r[j+z,pbb[n\S׭SO=p~-7׿E8CK/ :` 3y<o}6V[K.w`l6mo}KpuL>nnXBx[Ȼ[oNok$M鴝-s.~aX)/6E.:+34QRF?ҚStںyj=$U`Xax/sȩ)}Z}Ry`qNƥQb8<[ZӒkG1Pqz+r(lNZfC߻d? X`nb•ӝ$?= O/:Ǒvs>K:"q5+l{'?~1/v/qlt2v v}9 Z Fj ~QnÓvٕo|ف^:=Sh||{+s"K.H\uq.Y;[n= ~n#%K?BL ?94g8=py/+zTW6Цm;Ӌ@sTRn~{SSHrՉ/ ;G_?t[1VW>¿4t[ዲKѤߡpa4w~1Ul#x ߲ŋwm|~|J8%z׸8^uaQN{pC5ǿxqExJ -~tD` _ -iF> V|lܰ氝,{ʇo%xW͝ sek-} .t%pu6qk'ӿN8ȣO=>Woŋw7¯~߾/?7Æ _ {;cN9C`|_<'Î;?a͚^ =l𲗽ΝP~n{¢E;~=Nxmiظq#Wퟗ-;?MiF>VKa 0g8pY}~&&&3w}مq-ӖE4ZxHj8Cݣ- >% yW1Q:Z@^煉Ak. |kB9r}L|!)0_ 6JeRofc6,`J.Vܩ"ڰЂ )wrfF̄c'Nw;V=O\:y _NG0x!ac@4nRUSqZϋCh0>2C'D㻃h<:9l -6ƪ[!U[<8<ݞ sX#k#HhGYB(i@%iD8ek ğy0鰮 A㶛{8ܟDn:X!X`!w]$)O}:c`[+ի~Og_g8.e]w/xaπYfY`š{'Ąv}O~N1o~ ?p6ppՕW-7=( +V@=[l,\ Ys9\up}]wN{z@Nc=SU~Wp+toT.OXa@;tAGRpeشi ۼydHD'6,!38?cyb"L wT,(9No߄KW] cccNhfP7^`Ь{G~?o ?o>?!^\%.~.펋!_]1/?+~K~- PW0r3銤/9xM:3xΠdKAL-P6B]pvnoϬtPEZ5.c!-eI^Jo4{_{O,kl;6R(yoJxZy4i{;q{=z; @8\>VA(VkeˑxVÎ 'ۆ#aK]vFtcEӢ<  K7fgkkjcMOLq:]~ٽ*L.6;t,lECaFw'4X}qq˫ﰈtZ ֯+.#!5(NܗMx'. l޼ 6oV?>>va%Y9yS>GY6lܐ3h߇xqaG~e8}睷{ '5==Ҝ9%򱘕@QM^&~Y>iV/Ѧe?`3Z/̦5ĴKCr~b ^4s0Lf^7RT0XlJKJ"9͈ɏUR9|r<˫Y:hvMcx0ڭ—췜?~7mv~np@+_ɰi&<9K1ӵcyLs05աtHV*cOK/  fmz\ W woX'6 84af9~ ;--?+Z ^ W?Ogzluk dtW7^v}7\J?f嵍7ʋ/kfկy,zްqcp-E;TH&v=Ps]ȘL/^ ,_~CkVWxի^Y6nHcp䑉]"_/^oXf[e| ]vƄ T|Β4&$Bzۦ{0؈Xv43.J@~<ÓdEhzte1u}a:LiCsp4>Ҹ~'au!@l))פ`Oz cib S>cT%$PQIr#D[ Z_zr\y Ӱq[YHOG֊iIv+%BMru1)s+F# شi,%N}]{wkϽ~ ,w̟,yWx߼Et{ >r1>`-_;fϙn=_>fwxs]wΝ [^w_ k&sMo= 8j;o>淞˖e;Ë^ aaΜqy]G(On{xi#<vgm.?7~0g|wUΛ7{x[NBuGy,"3glW m=rʇC|,o9u '))TbDǴ]=ta:t0U+;~c㌡tc ZW6GmKnDqXVGqȦD/s,zoTn̯T.ܖxt-T[BOCدDIͽJV*5X-!wpg(!6Q~XU#B*hMR27A7p+Y tŏWF} S=ͽGE& -˚HixB˃ ns5hi]dѻ|"qLdL_]^=p F]WGlTC̓LZ>C!_F".{o0 3&xې~IJ$p}W9.D KBFExC\d{b"/$@>@>=$:F cIBSI!F $+X"x#+[ !ֿKri1maU{gzarF@ *mhJ1Hs~W~hNjaÜ9glB& 7g@3jrz%vwuf:A(u0_. zy N&9o?d(zmm-7$%P$\[r|0,nB1|)Z]X-CKj3IVX\0aj1N:t4z2;ax%R9yd4k2.Fmh4 ;"h0b:tI'ݫ}=p~w@kghב\ȏWiVDːeZL'0ڑ  =d W9ƫ1ٰgJu1me;|ąH z`ѧE9b>h«a Tb tBVqNjdrkt,D3hW JWוBs_\XRjr. bp˞x74>ҞҒ>7xN@r{]tΆ!`/%emclX- ;*3PX,wT(u:gzR䂳L1K*0e.iȲ8LY ZZG7*F6D%6eUTxBF3ZχW9 |H=Ӣ|}Nvl3 O;?о\Kݙ=ɥ gTrTdL CMO ZV,y$L5Of0d@*/ϕ0U뤨Z-=sZ%g:Z('@l 1 e@ģF'{'6y'E\xZ+LdȽ8}<|P< #rǍId>wnhg1+G!U֣:r(Xj2.oY4v~z˵?:R9'{px$JulMd +R404({-M颙V]M' -=RMvmݮ<*6i8> IDAT]GCn {׮vfb:] ;l0A)N]gi(NN<ޟsj훚!7J ia4Ozh_2vvw(h:֯XsJx{a]O8^6n7osU>.oe^\-z녰p/-ZPD xӟ 6m=D8}wq 7o_+஻^s `wH]~=?~>֯_ɏG>I;7}]0>>Ga';o|`-LIcurE/B75߇E8ió; NgW>ٴ/~8<듋@oUXs$m޼~+nnvnOt[}|x'?{aqG6F9q8zoħ&)1^zijG<N?7͛aܹ0Ƭc0o|w0aNב_?l /`^U/ww?7w~9 ?O> ]) {W+/V[} aB8xxՑG¼qg,Xo8X8鳟;x@-gO<`]wWqflF3 rR<]]G?TZS:L.F L3QЧoA˗뮆-k }~k> 8+V_o;x'A Wva.61 LLL=w ~ -'G¹.':j"oֶ;OJ~t訲~zW>z3,X5^p=wê+.8-ꅣ6|>54qa]o 麣Kqt1XĹDFQ7kB8t7vergˎ}جxwyXS!CX{3]WvW?8~Y"q5问 '5 a'`Pbv] {=y) aNeN̞=͛{%`Oy󦘻\S֛C׾ 0{vOs8{S?fcO1N>J3&S1b2sfφU48\8hQ/\wLJ'0>{6LX ?8p/LSN90\c'Oz[?Y2f IozR~[e/x _:'?W鑰l=Ix[ %K΁Ip=†M9W_ /_S^qÍp%t2za[.ZxʾKo\trOooSkvv[8p'bk:66[̛G&`ɩ˫iبCYW*Cf4"3,#rfv[c9vgC])6<7orc~X}|sexu?u.+l ZGb={6W>=:G7C^ƿ\ys{ysvWfBi9sY`vڼy켳KWM`_ r<S4~ӳaꕰic/ ^ԋy&gUW^] l-yq5W;NXB8p_y9gKz8x_ywZuLLL(jaƦMW̝;^xY31Gj zͰfpON8C`oaw]psfφ~]tYW^y̟?V#χ#pQ]&ٳgG?]pܹs/M6ӟL8#<\p.\sUvZj8p/ٳ*Trr<#p?kzh-l8G>nx8\~jشir.^sy9/2~yuxh z ;Xzm88s8w77\]vaڡSp?t1+y?8 ^p!fz(}p7?/͞?Zo1=zqƉ'Uσ5n>qœ#q^8?$8v!iyVu6/~8w*g~k|{oZWtv7\;.^p&_['ΙKt= .cFv>rJvc:hN9f.~;qNgχeW}>Qe,N>H {qIpYg@⋸?`ٚGus8`P4g6޼LA8sTez!|y2O}?y%k[ׯs&5{in[pߪ5xa.~!xaLWm$I#Gbb8dD@~}aw,\}ݯOkS ZwcuXp9YR5_z{9` 8;w^Rgʔ\jgZmOf~ȥj|e]\Y4ȬKhHmy)kTJp%BJӨ\!(kME pR5n9Eru+i ֎9M3[e$fnG5ȕ[=8E N~s<P!~Q_(_CAŀ?%6>t>{αYGig&bͪp8b1=wނ;o}0]oۂ;ؾm x f͞ غe3npq'#0kmfWW\[6kefW [lﯿ@5j4wC$;$\agvď;8qէ>p䜣sڿ5غe3>pŕիW.{/G_+cػw/&M:\|9ƴɓ4ϻT3~\+޼{ôI1t}:>_٘Ӻ7ߎW C'g& kq5|8ƏVڷ-Xq/ĵ܁?Z Uk0~ԁ8q͝wVٍ Nc~3C/qâ8x87k&=0?GM?gt\.oٚq3m^ze<ē'6nĞ={0c$'?0|`?xePxa.ly9L03n$#߽IÊ@Lpڒ[~4I wT1d S689ޛE68_=@jG[1yz&[pĜc .GGbYw;;~.mf|?GV ^;zM@6>}p8Y.V6,6@)p@9OO/.Сà|ģſ2gs>ŅiUyg%bÆ=fv<a1h` <8^{U7 ^p׿ݻwuaĤKqFabK:96{DW۝}1e46ͦM||с 9?n 7>f͚N|c8l݌jJ(:;;qG? / VYsҝHn wxl#8|شy#|#Ft~8)Os8sktvvSՖ_,V> 9~Oei|_vك{3[b<فfO1_Ztk{x%0`L׬Iau=u kc?p߽̝c9rW i~q <^9HN8XO=,m잙 Mب^VHӌ-=_q[_s6ZPr1k 5 S?\q],[ޏ,R.}R|OfƩgI%>N:Mu޷#:6?ֲiӳZ;bNK/ב6n|^B/"ݿ{v–͛gncǎiK_W̚u$?0}Lh6> ݭͯ)/[6o89OJZ%|۷ϧg ԩűg(L>3_>r'P!C1`@?9p w?/ ;_Lq̔3ټO6;l7<8X~-v|Z'mv{9xr2r';~X(=fx?Cܪp†'ǝ܉| $Sg#$Nܳ7V=0})Η:΍gr*.zktrhbT}`15m K_3gav~Jb`y#9p ^z Qώ.eD4)> ;cnh/1k!Yv'>0g4hs¢'l?28 'O<.'vbȼ}޳~v<)'b.EgkצY尽A֎Ǐ9']1]I;>e hSNŹ' @U'8jUFDHeB% BmW0M9AV[*bh!l) N|VS?85.Wi OYtvpoW$n]ЇL b0Leا}*Pprrm2C"'oEFoTFpĐ,ѨcFPzAϠG`#p̼ë=*߶u _ˆqފ1c |npbax?}xV._z8`i@q8ȹ7%Ǐw ?m&ݻ_7>r.Zp>FtķQ]=.p5N?)|c߻o/u7 "ƌر0 _f%`N5//Gy-淿q.ø2L,n݂o}5R;ǂi:e,.}c|cdH`ܘ>W\Cc}3M%1)}Э5tw7P8>zackqOmre +&tQPJaOb0je/UM7&χTM n5ڪ~fNamԷQ]]xכ^Ǝ y7RSIA3u*Zq5FCʵ얭89W_+lھ+׭[=K/o< ׾[[k$_bՅ?Y'C߿8˿9P#0|]槗SMX3(.RqzҭU>tT{ ;5&ޞD+o<Y ^\qgqкk]YD.8uXZ `DׁىQFtDLbذ/{1vxtvv'vL6mx?~+?;k$vvb˨Qg׭p}8g\sO枣E#a֬#Ҙ=:UVilG)`ǰ{n̚uO; C:T蚯Jsea?=wcaG`v]3ܫMבrwck=mݷؽg7?p̘:CgKtG֊5+o>(k_2~8S |Æcor:fdruu8B@N_r>O+VbA^d&P#KHaP+pb5aWI+{Gác̙bF5 G_0 5mIbl={p=.a IDAT0{ڴd' }$(r:_^RPf=cOڧ°C0~(5 Fƀ@ ہWGMkbkp~1|L4 6xƌKiNH: ;_Z曱0S_-S6 T4SN3giYtB)!S̋JycZM"GyvDڤ!6"˷ [Mi?dG9Xi/d!Ց\wn^Ίq3Mk m̳m襓f%~ob8p~e<'7 "ߋ߃}{b:{Ȑغm n鷘t" a 'ƱÈ{,}{n}F#Imcq!SnZ|_.⠉':d(]i-]bmDʜOĔƗ0~8eqpp7K/w^t{&C?Q<8_KތG~gؐ!شu+es[GΘaccse&EC>t$ `Xs_Ievlxf#:Gxx<`^8>o`򸱸̴E*W@P}Rݷ=3Æ m?7݊ N;Uصė#v2aZ跿DZ柆|n qqe\G=]/b/woDװ8hXsU͚x#>Dt\3f֥KqGO;Xܿf >o3S`xɧx crfRɺquo\{-Ə:oץ!-?)"*Tw8Z#EEJ3r2˫)k;(s^,ҋu48sn|$q5xU8NNB`Q[ٱ"{uk8Vrr{T4:Uoі;Z='r&  mٌ&r9w29۶n}gġSgEGg@[~8W#&9GfϞ;c8VM:u:<tttO/A'awt/ñhx'X:+V>? 7m)q с- pX㲿ÏLʽc;N|N.'MƖ[ݍKKЧM矍ܷ>Lp9 >Ld.rOo8[waD?`p)xѯw8'9>#-cSO_O: =mKÆg7&{F [/;?}6:oxDr6yvq<~çLqh(3}W﷞j 4j'C^{[W_ߋw>.=ܜ?V۶%L9<XrQѪJxkeFl9WBARյq^C/!gSw|V_,9VD -%㤲8{{~7w7}{=d|&kh’Dޅ,B_Gxӻ1 o5[P)_1Te{Ul햵ȏh/~3\|e8ᄓI)/ͩ{%4Y5,0%B;?.qߌA+g[߭穀/ϯb9 1 (N}={O`;) u]S9 '+lj΢ȷܻuހӏ?.-C>0ʳiÔa^ W`.4n>Yfy/%P$b KlϦRsMfhͰ4(kgbvGl>+g\saU2C׻h+kb,'N@fŊ"y}$ l2jAX2"ݿ ƳQť'61B )HD\=akbI9&tV)ȱOW 'M6ֽxA#Cҷ)Z5\Y:tCPmˌТt( -rkڡl5b(wW+;u[t~z>kbHTLjR[K*To a˗'I?~B/rUn,Oᅳ0qvO? V?0q4ww7͛0sT4 /Y/a <yG6S'O evny}$o*hCmъu eA|F i4FixM351l!np.ޅg+;l%\9ʸku.4h <-dhjtv5f{N> DMdW ? %%9XoU7*4lnk)E9j]?P4E L<2x(ލaS^W{Q$cӘ)-d*ۛa=<{{q_*䚲zуA ݻ 1|pv)`t5ufR~(tkaƣ[-s.?CpI'pkZ?17eVS!C=eb>daC] Zy W#e(tx&ͧ/C*6gr-K(s .Jߡlȧ˔cڬZvǘqt%I}J ¤)|g@ *$ZU5؆bzK0e")3~:e?Vgs0H<63U=VVFsKtQ֕"JMvLY ZPNxzݶkYydDHA*1 G,3Zޟ$4EtQEDAsgs'P#*M/b#ʳr޻h@dl˳ )C;F&zE<$^qʒH}]MYHr =B[A J-~ҨsF5FxRЖ|N';!n9 q\\XyJ ũA/4:^8f@Ⱦ!+$ "N kb&cNSۆ$XH~|7E@VX"ȝ_ aNs-e+ j0G'r) nhT-t16ܔr߳n 4*'Poʑ"VVVT BvF7U9*wC@>Sg@l:*4_ !P] ܍SOˑsǥu.PX <1E;Qbt'En,Sn*zRT^Mwz6f}KC9y |zY;tv |ԧ+TF[:$or'NbiQ(7{^4{rT0uNB0G t*$my1-LT$R0NIFh R.KGK0?gvfBcU`Ցsnė$.;|R+.I`n{4g$!5[fH@+m?lޓr%K],i"g˲&2P{F &kynFc)9܍Egmj wє6{>t_6EwfE5)vsl4)[(Q4a0n ?|ߢG=%[߁HG{_g*d?D\]cdIܖhJ~p,ɳD^qk-[K G!Ξ B޻MUs $1wĪ ЄzȮ;E"#GD %"K:QٶJPrK49QE3,O,2 $C,{)əw1M<:w'"tM$jQ@g#{=pЛG-t;@X`2XтE--`Bt)2(_ %nt.Tʦ?7K/ -!` SZnny 0ohtH,Үi M_ -1d+-0Th*'wY{ʍ)kCPyc$˃J& ~f6påɠN9T1t|.ނ]1NlJ6QUF;̴i"''u6I0?_oN"óUƒɇˇY,z.1'  9 X<v;,"H6apvtV  ؚJG,j 6d@D)A#3&-=stV))('^V:j;\= +c {2nlYh"Qﱯv=U/ TB *T[[CTPB *A{:r܎t;+,A#_0`Cu΢VZ1+ƫq}Y-W(tWN%#t)wyg XUVY"(UӀVL5L}f d7*K I\\Z&L[<b.V.HK?vR{NGiTh>bS uLw\ĥ$dO"tVvN%hJۑOT' LޜwOlDi&+֖6acUK?Qv'm޷NY@ «E*Z[*!ƊKqŭ꜠;Pl!vy}.G#;7chVv=4+$h!Ӭ_(j{uC(l^9Zh ۅN IDAT١*4 mc.?)*C'ʶNK4ČU\ ƨFQl4VOKBlLVҸ`6Y-7 ܗkjvֳKuS]TA<%;OJ4&XEy6CsPB *T@/xW:Pi9 y&n/5"H+U*PthS7k>㏉KOm闛Eerˏ2ݨJ&E*]xY|lw˭Hz[1^ZMyq|1aCmzZPX+EƠpvvNрpkѹ=sl)KPsH䜆Js{Qܜ}BwWw yG63OS{jɰۑHvflzalKl]!]> ^ 咋6+BqK<+m m ժHVZE^1J/ɲsIÃV~פޔう?L7lG^l>vE[:8>̰˞ fj+/Fb _YuyTƻs T+]E7u=M꡼^9n;bauWq |S\~\4bT3Qb )O=i)ԌSؐFe0gəUB){h@|啘 '٤w!L#Nũ{%^cs@+:Zhe5vB k/^ilnґh|n=K-3ިr~,6PǃͶՌv'uC=VG#YGq8)8i|WǻzQ.Ä2 .~0)H)7@~. @-q, JzGqh9.ǫɲ+ y;*jm 8l.Tp;3H[ zrNKO@+R"{c(ׇx}ae:U?̴_\Jk&O\ ytJ)L-HOF;e,eiYYijn-p߱6 B:x8#0 rx.3uH:p"`GHt^q̻2l6'$%Vnڼ 2uTsT5/Ф2oTLu QɡuD%7tNLy$&x3--'4[핗N!̶H/ XEٰiE1HuRַҦxWV+#Y|({!&Z.*D{Lx $ (&vxb9f@vPɛZ""2Z1;LjW~XG!hGPhe#r'bxB{~#7Y Ě5v Qn(2/H#ANcEB7Q(f4 z [Y~ʎPz*}+mXHhSp J?H44r byKiݷO%WuAYW#-(+i j&T 2ūeɾgQkU#* !uUUaiTN lŻ|ږ<3Otev' Znh9ȯu0Y*qsmP<)\r"!5:]}?{B$RIn]#')t-[i )]BW|*k*WՌEn`$9:c]q_/^`P1lE6 JVJ]2Mt OljXucvMJtz&Ƭ'dMǷ;% D}Vw|^Bm:)vh~v[s?gS&M2sQaOۻϊSz\X9;Nݱ,r`N;5}.lQXϺEB|_QK!d/ǻzwwL*7dь+Ýh䘯wIOwzz).~ O/iX%L= V⭯ArdHg ;dxS7qJ6k@vԎbG^/Y>])ţjk:)(]v?smw4}X64(n~Z5[1p;ZKpe)5Œ6@G|Y4j9K+ߛdߔ}`<  o`mP LjfrZ-4b5dEϕWE$IL4Z1N%&Nܥ1A,pX+/{2ub}FzY-UsX^ ΙX/*(孀إ !꭪ A[:xm~!ٷ]|Hzm;K7{K\ s0h&L5"aH.7O-Kml:(Q ݧzDjK,AE>i/p-kdNFT$ewŻ֭k1ƲEk9d * Y "v$ch(&\]%ޕ`K*@ ݖN ltJ *=hdFnVSoN *B  :_Is+T$ǯ4]$lVM=!>2};Y_Uh{VX i.!x ]BXkZ VEљ>.?oF+WEY>r-Sy2k'k>r6Nmq_?|֏s|ɵպo3R@{;4ϰsٲ2i{ᄎ%윱?)ikA=1mܥnXY&:t91dsW9e \&#4KÔRb?pyXcL5j sn86wKC:F|U+%%Q&q 9Ϻ}Rԙ̶:6!杳c]6#IzX4S*/>5oOK`*\ЏaM>JIݔN PxFMBpPA=ǿJ{[`mHQ![V,[+rUUh 4pٟWQ-75X4@qorB^e(=J+}'VpW\9RR^Wa3\7묡f egH(0lbhBv-YACqzQ ;czIvA[:$!g\E E~øh\.*W3j],?؏|+7JhH)_=7rxg{V'uIs#f-]܎">KL^/|cpsˮ9\SdnЏ.n*_JoEt5 1ٻ4AZ/1D$\sPzt2O =$]PʷgHv#(lEC2;lkʉ&yzQf<3sTۯm:̋R'I^I2?\ShGNX>o ʙMeH6^VCRm#M]':by\k 3u;a{ҹMJde(9VﶀH=2a9.86o-Q4 ?O{-^96q(x}:`_ 7\T`%x _칸F XIX!^ݬ~}v[;*עJ7d]'G` $[-v6EM@lu_RΤ)\dc`%G.v۠Xg-DzH-@ c?CB 틞RPqCGLN帖v (!k)ŃO)fZ!.Є: ,D%}*TKh5 *H)p̚Yf%U)벲tޝA^cPr or 'J>i~]^l~۔ a$ף{yCѠ+M)M!^'TKn03TV&q׻fv#<)E( r{Av8JXҵH;GK_SXQsucv*AwYܺS0~HbJGc980]U\]rŪIp׬rE%ݜuY1a=. ˝ XzQO*Q%\Ҵ**f1 rDw8%1) 앳)GkgWiskmnj'4Y˲W$=!ˊo@<&m3{fZRsw=ޣJP:hϹ;3U )`_L7Pj5"~7aWr=ʖè ri_-υJ0qhfBV:+y7rD(԰ta\CrbWk#dtRRzN9aCT\.Pol֓ڊBFmJ%\\9gIa8N0o9DI E)Ψ0~Z(<# 4~^p5ϥU1Cd[n"SclזPwnAǕͧYlܿlև4*zZczKE(5P`EF;|0孛BM@z }1#@7]KxYgcliVysPS#(+DuNK(_C׆ ?Y['|rOαf<QQ-W0.C1LLibhAIO.b8& Na|Zsk!89hyyN&$L"e䁶_ޑDgH9fuR甫$P5iyhΒ8]fih##'gQWYV[zͣɓД1pM zϺ<:x2٪WG+~+kVA.:LvZZH9U"Cˆk6SN\z --jxq!R<%]]8qG@PmۡM@7JL*TPBupw#lief+;DAr~t^ c?ؒ͢D^ *TPEQ9q'&QȽ=j tU K2<˫rRIck }=Qe-_Go Y. &Qpi.ގNJks9<yoKkQn܇iG%"joųV]&SlV9*dbVŠ,rwXV"4[pu)w\^* ϜxluX,/0-]fmKZK cut'' mma4n_ Xt6,ٙ1w7 p_rwAG}6W"zMcW5o*OkKyىuws[+\jސˑKҠDNVD:Iv4IϪmʴ @ sՒG]49#ZZ\x!zs4.|:xw& w3yz7^[1Bip~ stk`2R r3t^ԣʤmI]Y=mNp7[(dDX%6y4tc8oI?xWB=@T W<Ͼ) n3KY+cp&aQJ?rX/B۫7Q=5k0DhKŁ̛J)ţYuMkIvAh͞*x;Gh˴cj152ީAb#9UBF9MKQ 3 b&_e\ryuYrQ).[tkk6(x(ҀaK'JOKa(6Oȓ@Yy\X"pIwa,KzM6CSEiHdc^(Rȷ{Y1@h#CY6}'9}e״zPtI;/bЏ%y~)Iy}LН@ףlue,ϫ͈;Ljka6O6L~٨uh!вyq3dFg͏3FMAR\4I/iG»poM(w=} ΚlDblh'1"d1)n?r.B%7PtV>ͳk&1TKgK\QS:=ΜK~5\ֻ\sS2=l Rvٽ+EF0rJؤ-^wɳLG<%>qYfܸ{2wѦN )p[^@/NZ8cgbD)CbҡhOӺhF{vCo@0(HBhatZN%i5և~yrDKqr ~9B:X1+e ?:Ic5}$z oPB Dpo{wWW ;#yJzܕVPy#Wh:F4zBe6M;q&5Ln'ncnn14l(h0b"|!J;)-:MpUh,j*wZel IDATs8P&"˝c?=WS:G ʛ{˛ӛES %*]yUq$OAA92 q4Il qA*$o'6W9ڲOk).S-?z{Z }mrA=̡HjHuXU ̲M)(:f,'YNrbzGG\j0%P< $iGZ·'|GbO1'k1S!aQz/rqyy9i@Eh{4֔1L)UĚBǧ}8=v|U)D;6e ߑ" ˟;Ӂ`ѕ(1&jUC[aK^:PtDƤG@35hKoL?pU+%+Aj.ǿ37Z.St]~!LcBn%^`h8mNoOY+&>E曓`tenF&nxnD^oA,ك2W=TZ/ڣcMx+E-i#Ee&Qq2+{!tp)bKGak0iŨmt)H&W ܓsԃfѭls|$\*Z#׃[%;bЯה)US_!Ngαqpa"@"3BO_あ:b]^}(ע|.{Q΍whš=O};%1As!B.&WNgi4Į,Al%xQ42[{Qv+ {ŝ/Fp,Mj;y\s6>=w&By;c]7҄񊺟(6CObٔ~H sM1,o&uOs4fcM-z7OYQڋ':4gBzYrc =}dƍdye2'ji>Jޥ!'NPe(9Xl>r>l)qԍkjoTގgg˞"g1P̧UNVFI3=y"Əxbz:~Y,jRS;pw]H;@ShH0C׶"5EW'וwWd1i8'K%϶\ܥ9:wKФc6yCf$}섡O^a)K:=oNzďO"{:(}ǧ @ӤT&\'mUMzCPJ=i7|-]kuH$4>; NrT:&;r.4캣GlE-1! AN?yRXU5ɅcSr]<;hjS#5vnYQ+jWq{ ]4vo"SNJPqHD.EGV-x63}F;/j/>-^aPhL_iZ Bz }xT/whL,o sqql9\7c]pӶ''Y 4< ^?.˃},aGa|zqkᙦd6훕>i?nꩋltŶd@{jI{yB⨡6L[Mml4)1˹;q#_ֵ0JHXxaG`WٳրR..H2\Ճ?S<Bm"OӠ\X:f;x+Oa , P@D"t\ޒiB e"ZG^O~to\iPZ3r=4PE} t;+2Zʋ aq Woyp av `<M!s]h&No>OǴ˃G!Z8Shڻl. 7$+⨨s; ңֺF-cVY eӎ pP!yN?qV)<ͫlxoѮhk'~ę= y!mi,LM.J.y',iVOn p>(#k-YY`bO>72:\|O֊wp)_eNn"^y3IzHn{qltfE4,u80SieAF /VoT&MgGfk*$$$2;^/2ڜ6"_Ohd3$YP9?&< NSIR^ ?hF)m9W|;7;my6z=)ifQ}BgHs *9d>k0[Bm.=wӿHZM͞piT^]5;U%}ifl^/Ei|m-bV2:o=Jya^ <#0?.AӰȎHH M#xvUY,B %OB)hmyn33]ޞoz]kW>I2ԍ )UVgʫ5r/&z|"҇HgJxMuf QyuP WqQfj&Mniv_hjQ^cyԁA, o4AeWXv)@kh|I<<:5TD*ӄ. :=' 噚!W99~{B'q0~1O`C&!wbmlUxϱ5*M$t|TNuu?ϫa EctyMZn9e\`0-@s>7+:gpoW;u#btFSy`%yz*39S{ cwl9ٯӝuĵ+onPFzAt#nϨOH3uƨ c9Ǫj[.Ѫp?yO}7F4}nD= RZ,_jJ[2," Ƿlqq~,^Qqh8o(MC7>g{ZEAפ4gu W%rRa!kU"C>ZIW|_YHbߛ 25';uLGlď&(~kv8m'H)w56hǰ&c%W ]8n$,39sYb(˛ b0VnjԋPri1Gι^i0ze>Š%^q7wX |w)d!H=4(jBNEL$M;x(ODGQctLNʦeWH5؉MQO~O;6qÍ`hcǿ\ڸBn ~].hW4gBXhvA=B.Pz%.cS$Go2cLNR$H9 9VahGǵ˔<ABf$wDaepF{:@괜^`qT,0Bnҥe,~m(%,:ΙaӋWoMoö~I 3f%2 ᳚5Kj3GoZ:߻Tr&)m"wv~Cii!Cٯ396m8"Yx֟/{̵=wndFdڿM1ƙa O}cMcOHzMh)_6sU4 ̸Y)yˇӼ==+^ga%yG<lHGPחy츖ѻڤyJٚx&5X6y\s[Vd{fFu7ṳ̏f~|(?擆z(-Qa.b3$Ȳ]U3z?`qҶQ}g5DZE|G|`ZC.LRu&L3/bWP;ܵ =zǍnbpmyK!OϮW!GzTbU^jk7dbˤS-0 _8 _Elȳ j /$ ;X?,15쫆Ջ۫&PMm0&,b61?SvYjr{WdMTVJ~m"jyL*eNnb8.*7ڷFuT=7 n­syM$^2 7c~|W;((ٲ~i2k`!hbRxSA3( cyO3Wʽ/WY9/2:8jc3V 35`{}c92ӻB͎{dmxV0JcD @cՁlKސ{o==^Nj4^9A|Y]k2#7y=H`>ֻED=/t~ /ƴx@o=f+=nb>= x5?W'>wnQU۶^7僊}-4̔SMfL,J.SPz1}|R,:dk;䭠ԓbɬ_9d mO!k}d¯xf= IDATms^=KʥA:6*Z C(`.䙝.<]EY]Y.$e꯺Ag-]ur6Ưy"RO!ɟ-|cco"ssCGچÚ@?QYwGmt襺[/]#0n뭡d.Z5x=>T QM=_mQ񉼙qo&"1mpm ̧S^by[Wc˅FbI(AWE}),uBܣt+Nbt0c Nĸ7gaA{y}>st/A6?PȾ9,)^f.KĠ-+%c!)_f/>&Q}&^k?FT|W0f\a,xz KL'?-g"JM' t KƮs$'"~Yo1?GVcD3c2/iB'!Hv'?Gѭ2+0~6R1/%y?*r]?FvuX&)C9 .e/؛!ONыwH#PqkEol(Æ-N#3hx6Gsx3 GX971δ}&֒x Veq6\D~,ףشRRljvZ}W~<*A0;S?3{FY=OطgɌޓyGgdWřgk4ט#hPH>l CkkovHXeUi1Lt؈N}# mFJ[yT;q|nU7ys1K5}yF?;1 tDJ||~6uތ&:/Jy5]Ld%G_߀OFԺFb헭wN{JЁC}fY6NctGϯ/G9cZF2^/ R+3W28s^yδq3mDr UA(ɴỎ̃9NV,>Y?gV_DI+6^kP]WA"Sn^٭:@e7 a^ޞBuxmFcڜUӊdwe=gV\DF0^6KYmt Mr)F46vIufZCGuɄKqg[^q3X~LZY\^(/2Y޼yd /AJhňZIT_u{Y|,?t^5rzȸl[u{؛{c0qϭxgU\$7Ȟ->>FQ7?I!D.tҚi;:[}oV72sٽXJmӕlKĤ[W$P힍T`:Y[q ciJ_+Pi.Wf^.OEu}vSL"p]ιƆgllZ>,WJ 3yQiI[mxtOU22m8lFѱ*)3BaF2K3cIDOdY؆I84 }"1'lG&yHپչׇ#;כ8D}S+}6K ϱ[JO?qoIZG ?I׷U[J-4A椇;+6@=Kn_]jwJTNm(uRD =^N=/ڧ@D]ORR/qNk=/{P7~N2tiZVvB/pהbZtS{N_MdgzݴO\f[=AVԧY2[wtk3Oy~>{1%5e9':zc PKs2G6&p my7yRt[YY^JvI )wC褢F;W2f~ri]7׈TGaYx=>v] 9X z/b+++jWۍ4v3p\(jv$iꯔ($.Gvqt}ሖc?|]GO~RucȽvAR-=->xItr0f~ِ"~ϩ2%眛qV"?r, קּ_N5wk^e/]6/qXIm?8~.[Qg­ ڨ/d?܌gs ==`z8E){PxӌtoȿWuWO=Ɩ1i+)>uL(/cfe8O߀Rb><-SM>.D|6[\Z je( A6:[٭a2?~_;2ČHҭ8if*Smu9,>`s0aC C*x03sqc];ӒLwәͳR9'/&w_V?X  GRKLY= ko"uնd2ϝfabUJL<7dfIL+OJJŸFG*HqMﺍw ՔU]_0LF^ /M?u4>ERཹ=x)gn;熍;0=ٷY\7bODϨ29" j}&sAZ`B`yfoڙ"ϝU}(o'%\_[1cP|hWjeo\m:փG0|g^WҹRm3ܣ2kO)֣{Н^!705.Cq,{4 $vYg+0~pUOA%ұ 7Ix9L|)khmOrO#Fyb޳ث+zj##K3iF Շĺ}oah_re"cր7ɾ}淗.4 |h^5Rccgņ7x0ҋ4tS$-LM_|4\Y2W^*EQ7v؏VF3H#?XSaRzȺ|\+Z@#A'kU:վ8wf辒̵F8+|VދXC@xw˪`Q4u"e * u,okxJ&0#FM긥~E|&R7ꀽ2/3r²0ws}QF-:M^p k[c9]%,,O/ k;&Zz|LJ{UsIHk{&a~yӃLOi%X#k0=H6DZO?_qߴ/6-6Ɨ\ڳՌ$%1Hf<S59UAJb'Gq MNݓB*fC"LYuJ^سu=9V3sI%vs/δ4ڦN7yՒ^֒r{x^g5zVmzwߖxg $QpWNNؽPӌ AǟKOe5nO<? [.x'g^?5VZurv\ xoφrDRag)X-;叻v($>+I~%8<[W3ϕo \CtC[V+79n?e% AV&e$l\i]G3dkğAsBJV= sKܙ\Y0*VgQBsњe{P#QS0=k(Ie+5޹\0& F*:=e0h{Չ7y/7DO@OV7-pnƁ(5ϐe3/?ôZ*~=Aɺڀ0>rǍmR-_1'}Hp}t_ j<5?Nd:i:֋Q3ǨT7WWDe)k5<]?=b}NHΥjBYl}]n|=;;Rv8m1+/Wr^r^{7o?^mٯ5YBek%~>W "mf,UWfnDb֟ IM3#+[9D\۽l#H,2k#(nsެDmV/L ݳϩDw\U-xo#uvs:^=5pt(bI4_7{xmvFrߧ+2ڔ;tƓ$ML3Fq8Lty(GpN ÜVigx"[Bg#m㾚պkj-@}~{9}](qm]Ze~MӃ*ρJK}[?kG6Wsze_Tm"xjջ,Z!v>DD/iLC]paڸDI/~uo^}򭽛#KXұ>0;\!uwe>8^~l}Ŋeӵ)6oy}¨~<Gՙ;Ε腡\^( o<0Q/3<u214y OWᎱzqb9gX4gz0A>{>IDKf˶Yʏo8gL|›RЬۦH;ncgp{<0'7O㲙Dj:[L dY d뙀 Vbz-6#=%>ykC:an͋ G-}QֺrL+rkȇ-UMAMzg(ɹM4,걫l_+Q{v^Ąe>3/Ͳ}innsFitgV=V^Kt72Hz8Y)wN5³-c-v>Ϧ$Yx]~l>)AL>QU;3lj(8A5ʻ&&n(?$/2^dGlb7=펵GoatsT )vPQ??+ck}˧usmeDG3iz"dl_)U =#)eJ6V"SG3e t(Mw )RO,8}GFX!Dfl K{m[NL1a&, I8U>q[-9LѯH͸{*S-+*˱K)_x^oHo"2t2{w-T7?463 刁B!:2Ç:.SlÝD~"{ŅOM)Aj|E=%+FEI8~&k sj,9J~qo'ي4vkFF_N3 Lv*i5`ǑRƌF1|yw Qɸ4Q>|Il{ :#Jښ)18͒'aת'+wZ{z}uq֎lSVχUdF/s9]|?XAګVuQ8V7#g AIsTf0GFrrfadT̽ۛf&θ73F}yMB+ݯyоq*QO16d}p _i>nd+񽰩Gj h~"K6Li}DOr< G)=ޫFTһ> K5}Rpύ1~OεH`7uOyiQMzTýc,~ǫXCfE6"N&t7d~ӫW |XJS;{geCß`tq]'pu#Ј(ZW =gA1n|cTRGMt]@LHgCkV$DIC|dE{F ֶK[紩g?Icc ''(kȨoW[_~|n 7\eyCVGNnY3"z_^䤝(N#9a<2˹92l 9ñvk+WJ? 4 ,t뇿߾ qk$)M67lS&6vo"Tj;w%(GUm`CU$m7~p\22wtvn3[޽%hN ʵvt(SRT1]oToq]D7J"JlֶƸە]KyGтfp:yD^=|yYFc%^Zm})Fy>yx{^#܃bE`7)_#f'`g{)izD,?y㤔qIL3Ź[U37VQqyI45p^uG=zC[Lv&}i |Ό!Lkg }c7ң fM|'/u-2>I#NNyȉ:_~f/b ԠY_ʼn**{zZNPmYq^30(oHmemHy|#g9NWTu \oزky9'Qvj:R{{/7pVʕM{an58Wo4 ߥDGD7t O{ ы<Î)ֽ~7ӯ{{ ޓ`d<6#C2 5{$yyV;SjF^xO}=\D_ßƯI`#: l:s5da#3r%ܼ'?F>[pL|0`zutdþxf W3F9Sa63^9^\/l"̗xS=8Ү>ʻ4JJD_)m"  ~qmcuO#BR}~t#ھoD?ᄏ9鈳21!s[-WyuyMܞ^nނyxuOw"0 H?I"}Y2J+"Xum, 2[dg`y8ҡaRVFd\>b&8ewpƍކOA/:CRe׊QvUmru> }˷ՍAzēssR8v*x[{USnb~296cp9e57q\k~_Yo㕸NjXk-l[VJj;2DM|뻛Y7.o֝Qܯןm?>-2F?*MIV~vuu|= $Dgg!رԓŶgKU!klܤ?u%^&}ny۾2zۘ[.y=["i ^AU}l)'{b@)?;/ ҞA(8't> yOdݻ ~OW?3S+iA'{djns6 dpGWɦ6q= ʙDFh_CyQX{muOg( SNV D&=9-; DpvzV΢mJ*)%Jw_}?я͠g_+.L֌,_αQ{@D{0?CD?k/ٟG۷sb&8`dCLtOV x'MA5SugGzY'P˓afy F M{N< DίDF ~^@+v(O#_m*>?zomp}7;t9H@xHy G!6e\~b - ;xG$q֒0{މn?/N})0<ߞhh{xE;ѹG{afch3tϳHwY/ kp#o20]k1ZC46>he6.wHk"z!h%FFy @D7b1s+ף0I84HzIr}ƠA4swhy5#P/qgr uh pIDATKïG3Ɲ3 @{ŸU g0+ᎄqf(Ơp+Oԕ 0TO~lV[gؓ3A<sy߽p{d?: oQܫn}xR oq\7YY5wꆎ;|W#8rT% @Daส!xGah鮼!㬼Rp?2\Sx5 !XUayz} 4/e)exމGd^Sxq<-Wfx๼Fw.~8`(28oi)| >om|Q|c"A}}40źz =`8)p0=olQ+0IENDB`ticketbooth-1.1.1/data/appstream/3.png000066400000000000000000017037331475632104500176330ustar00rootroot00000000000000PNG  IHDR> sBIT|dtEXtSoftwaregnome-screenshot>.tEXtCreation TimeThu 21 Sep 2023 04:16:30 PM CEST^ IDATxyU9U=3d " ["" zY(,"U/?+"%ٌ,, $ [BBYgNwOϖ>=S """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""]tuz!="""""""uuzIDDDDDD{S`|. rzH_gC+"""""""3P_Ec-׫&"""""""WA-(mGDDDDDDDV zKhGw쓈HOا6 AEg>|& 'wGA=1>ئtQlGA=-jGDDDDDDjJ dKj.;EDDDDDDcmN.;;]O7f܉F ]̴G ԭàdln4t- jm@aP s%PKliDDDDDDDk&~nnnUAPw 9dޞ<훳t->MޚhK6cP[C ~(""""""қ%Tٜ@hsCGnN\Oڛ\HlsjkUA&nTߴ6ЩvxXw{DDDDDDDT\@Ֆ0hs @5jmOkŸH*<͵_oimKDw 9:"jmӚM-""""""6l_-U ;U-?HDDDDDDj퐮򪠦ž^u`-}F2MCUiN -?׉2-!P{@-UzHDDDDDDDͩiM\9TGA~Wq45PKCš֚ $xm b MW/c~.^7ޭteU@ le+_ז^t?UjjYR*h˖n_/HDDDDDD{+U)ZX.u @ ڜȖ-Siz[BAHe<ЧʟA[:?P@]1'Ж!SV|SHTQuK@|LۖS<1t[*_O@8)z/âmːbMݹ\{@+[utoœl_|jRNqOʢ⪠n;@mzPqOu$jiӾ8tɞ """"""""0 _]z?s} h2AGSAenup- ֖3~ʫ@W_=O>> :s/6RyXXeJgk˰n7$@^)4 xbJ?!{W~/n#cɒ%??7 (4(JV۠4jmDJl3U àIF:g3˗/1cfhT +&<Ȱ`͖]z@… T$""""""5꜅  Py2F-N)Z^]lPU~<) oHC=`aSO~N]iS:9 YՑ -=La__v/hުt:M] JꮈH7W__^@<,,trabDѕfѐ֖*rW<ӿ%q DDD C֬Yƍ`AqF֬YC]ƪ+ \!K-FMg 3Y qq}#:)"""="A~ts\ 2knJt{9jmv[v< 6:)"""=W}}^(뻺""ҍry+M ]ZMtK!ڒ'W&}S[p"""KtnED9\PP-Q<hiiL^m<`x{tPDDDz6U^݊m4^x^u=\/~h"f̘1c }<,[ƍǴic=6s)?ڎ-Vxꩧڹ'vK6QY a u׉EDDۯCP1۴TUU1a„}?ϼyXn]IYj=Dc2c  >l~ŋb vuWرc_駟. ֮]˫ʸqJ( y4h +Vॗ^cǟJ7n\g)~z:,3fti[:n3j=!*Oz]DDW$6U Q=Cew .(Xn_|1/siv\\^NW@(n+JBoFeQq73gV\رc9S>'̢E +W^y%_k~F2,s 7㏳av}w9j+̙͛3ywׯƍK.amzŝw [sꫯrWpw4ȑ#8q"o/r3|F!G}ġO$ YfSOqFveN;|TGu#GdΜ99:D"wѪ?Oe˖1}t/_ΑG~Guuu `S/~QF.)烞gyw,XرcK㎤R)^uN9BWK.ccʔ)<\xDQTX[oۮbΊ+袋Xbv稪R$"{SSSï*_۔K.ޚ~;;pb/x-=c8XҤZMޝJDD{9?x^f͚o~?2b9~[b_?~<7tsr饗rmsr50|N?t,YŠ+8cŋy'g?W\!s>> v}wN?%|3gg>=tQaø 1cK.;f}Ogf= .߼yXlG.lWK>-],_ u]9餓w "}M7݄ /'vI?5_3l0J~ӟo0bϐҶ@%""}JG,oԨQr!<ocuYlDQĔ)S tA\z,]wc{9V^ͼyMB;l`>q';I!a|AaRs׳`Ν?Σ>10s=ǡZ ?'& {l2o<3ydo&IN=T,2dW^~@<\diD"Quy[V]2ItSih~GW?""ZY o|.ZarI'qwiwTcL;| ӧOw){1}tJۣmBs_""ҫ9蠃2eJmc/|>3Əē5g2 >z+9}|EqAU7nZ^u Ę1c >|8?9Yv[nO>is67(iϡ0x`ƌ%K0p@f¿mv)¬Y8c0HOrUW1a.]g9C]]_VZ]y\yl{[ңr^ 9/DDD<;XޏcկV0aSNex㎅|-,7`>Op!Tވ#8#{89C裏㢋.bҥ4icܹMN.,3rHva/^ 4=l`С=z|M?aÆ/x>ߟիWSWW~V\~BIdȐ!\y晅=؃gUk$fo2a.BϕW^_ܶۨrb$""mt@y#F`Ĉ.ssOO;ѩX/O2f̘f9s [fmipΑf2d=7ndȑs9hzXf  j:k֬)^o?/^6lPmن:%Ky;#_ iÙ;w.wy'[o5'N9צ/3m'#89sڥRjذa]n;@ N6STa>J&Aѿ2"'])NQ[uGyZWCJ Hv7 N;5eY~:Atu7vsEDz4iN RTWwA:~"""Hg$6VH/>] =zMЛB 6UԋOmmmWwCDD[i1h IӚ#}T* f(!ADDDz3  DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""( DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""( DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""]jΜ9(i[am(x<#ϰ.y^WwGDDDDDDz( kAq)_ж~z:(>hj&b nv}YVXsq1~x;찊0^x!>`z2+\O͛W9s.;ޣx=uԒ3VA<$la!(|(+?/^̊+Xr%cь?o}[3d;G}3% IDAT}ϟ?ɓ's6Zfٲeu],]~իW3dzkNGdHYx衇XlÆ cv?fMt]4^{m _xz-VZ멭eL8ޛ;lG_~BٳYf tV[[I'Tqa?3g6 gѢE,Z￟C=s9QQ{z嗹JstIESvۍ* m@gq_}ƍyWu] %+~ /4CCCW楗^&gqF+qӲ,[J~˗/g'.vꩧ\yy'ꪫc=(?ya11osa}HϢ`myg}vIۺu;JNy4j(eaʒ%KJNjC 1éq϶n[>EDDDDDDz LguO=lmߒjc \r pQqM71cƌuyBQ=P&MĆ f-VT:E.iˇ&SL /2uuu-4~xnzk1%g֬YVb :c9 }ԩW9WiӦ>Q|r(뮻_*~_#뮻6X|y1cp0qĊ}m"""""""Bʹ2m4n֒v؁C=:a 2ZI'ă>{WXfR{,sNfm=z4|A_.T凍c AK_w),k峟l=z4o&>(Jau5ZbСmz,A4Hs=ַUҷ޺m?-L~QbŊ6%;#/\ g5j{'sHϣ`[RuGѨb%oڵAPV,c7n\I[am)pB,XP^]]]V6dvqǒoƒǵN;5Gi'?[3f`޼y[ |vFsl6mNJsB@g}6xiV21M >ojYϟW^-2x&L& ;2,*W>tw)`}K?Ò/KT*őG9㷨y j{y7emرyG?bԩJ[x뭷:w""""""ҝ(Dvە=%??%,[~ݺuK<^^RS|R躺`y|o+xFX1a„E?QN-(Z#>wW_}5{/?0gyfe_{ϭy^DDDDDDwќ@lW_-i o1?d2wc6̙39sf93}+veφ -;`vyF~5ێ_~p}ժUr)L4ޚ}k>%! 7]wIӼ曜x≜p -ok >Q۵^˾ߪS?C\~Nlv 6t:ͳ>h!n}^DDDDDDP%P';e]' O?Je}x*R,aҽ| */7yFjjjUNe2V@x`^{[oo|O}S裏xgxٰasmƄ  |W1cF ě裏/2_[#G,}yC!P'r饗84dڴi%CN8G1o| i/M==أIM-Tӛg}vaf7yd;-_w}.ɐ*W_eٲe.ZOxۼyZ\?N3ϴK.ZH`]`Ĉ\}<䭷cL0v؁c=!CT\_:Gn7Zˮ7MsO֮][2PG0a#F`ʕ%Ctjx~̜9ErJFg>P__d̞=~mݖ5k0fj+Z|I~ay}0dĈL8C=#Gک6l]w{glvMN\,LsϱrJ>4ÇgԨQ|_+_J>/"""""";T>To=i+\/^g.f2Λ=YDDDDDDDd2y`-.#~:Em]Z:w[DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""( DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""( DDDDDDDD@""""""""}B >@!HHDDDDDDDP$"""""""( DDDDDDDD;W-~g%<'^|^ux\X .BGd-x d^ q.¹0BApaA$&>00@P_fq DzfppD9s" 㢸Q1F" qQQ.(/]epp&3Q9WLK#lo j_d9r$ _8ꨣqK]bՇyg"V׮,Ƙ¿( cbø|aeqXƀϷXxbƀs8q$>Ư3g" : 1Α{aZuaL3P?a$I0`}֮ZC.Àl!dpQ1 aDFDď!Y QrB""H΄4"ah&̐|jg}g۲wS;x$C>5."H7e3diZ?~d3|j^{-Vj' 3d`ٝ=vۑځ w/eႅ|VK2 T i.lޯj8|6ft@?$a 'rL#|<"UT%}7۰60j!qQƮ&r I` L ׏0L`2c!$mt 8WAQc111uTH$r1xpivk m< :ْw?W7b,qH_l"+L:3A˯5&tF_qD8`6`wlz3Ƃ7Hf0& pQ [Mk1ǹrDECGd" u/0?wcɛ2 +V`Ŋ .~ V}Ο~\7XKo!/%~}~v>$ی?L`:?7S؉pA_yqe w0ߗ 1klB%S0~'0*Tc˽NlZp6(Q\D(9!DጏU6LӿdHUW3h`ү O0 X ϋ2, r4d6706z ;(p ~ _MC& BBˆ {s rԅG4Dq}dOMbmWq*z~>o: 3nw^_K_zCr^1)mthCTf/|n?+VcŪu׸W35aKoγ YtȅǪUsŹk<婔w`[gfp |]ݝpPRA юߔ۴̦()@e (hrh\ƘC0pƱ6S'$eeg,Ư LGThcx^xfsEq`9.~_qě,)/K5 KZR$Gu~T`}L&z(kpag ߣ~5d#CX"grafsa2[Xsd-jwx/` 8ϷsνLyY"YΑ j'M5U)OH`3). Ll`<rq <3 DTL#d" $1G6āXu!sd sQg$ `Lk}HGx> ΐmh qQlo&j]@$S z,>G>b=,)5Ú00x'ȆD%2 !dȆ`Hb` 74gLlEA,~#֙dµDQe;9Kqfӗ}nwe GT+oH|eh^N㣏>b]ݕf?G廹'_B' EA/r6W"\JDG$U\E8W#ů:{AC4{6ޑ8cfCVZE"0dj֯_OE#*ȸ81qh/\an<B0%{$xOXĦR^k>^"H>22QHx>ƁUN.r#F0p$x؜sqgL=HyjҐ&KD֚(W2,S9l4t}=+֬㓺 `s;֋CųZ.9^.Ζlp^N+ m[fsmo/ cPr@7-k*?l)m%YO\|& !UqcxXK&KQzil>dӿHKv8| y0aLx6Gd u bBu>QԀ<"A谹kcQzj|듰I, Ȓ|\&c;=rQ 4w)灍 !Q4*:Yx5Ϗ_06>n|xz~Ϸ"U<ߏ^1A>MgD}憎&G:2 t/$P !"~{G&=_GdO!UŽ-qP:c!u YBˆHl$D߸i64dB'X0`eRdI1_ Ȓ "E{X۲7c8޺MvbBA e E JBD"%4Y"$"0 /!Y$)5!< @0m]׽u_^kȇ1>vU55z5k95p/ dKAJ6Èu{B{N9U?~7y:lmwv}`=H0O&8u\2wjw׶Z~kxwo ~E݂dSl\hAc|ʊD_Td)!ٴHLT&ftlxT=%8ޅ\i!ChFތBОfx/klV,3.rv(!v=2>V\4 xTY o8[ ln-<qu'LUX̏6}"mVaJ+"R e)JS|FHQM{VJMĀH8 1(E։/ DϿw޾o\:o6UTw'CZfI)H˴ ]F/TqbrT8&תsy3On :y!u^/g3Ol,VKTJsyhCa="8G" 7 u'i n7^3;ca䜷rp9E!xc1Dnf2F &U+' ׻Q! R1w蝥H8M7 sJ S˿򽿉O|kW^yolhxKDp*=l%с4$ w?|:P?^W?.o=z.ۦ@o@ `_b^:J??zW?qgLJ!Eyޘ 2COJ(tZ}IZH .S! 5 S"Hpsz)RI%{z@%2M 1Y]glM9ϙu.$/TgєMGk$@*J bl cJ( 0Z 0ĈX.fD J Yk_jDEJɌYwRdu c嗟[ ( fu}2i#]d9 n44Sz`s4='H'.QJf]%Qe"iw}#98/h1;csT]l 2ht__S{2 3 [۴7Q,"{A}E\E|%1JVؔC:ibWM1b"V}B4Wmkugl?;X 9|m@TJ(ؚ:p߉2@ ??|ϯWySߞ=!E/*%g{Ct6Pl/Q*MwiQK5q.HpHcTI ި&j(R+ri`nBIU+M-T]q[J%RmMhA ڦiv`8"1~̠?^w]7 ǿ9d(\qD7먵K!UcYM^[e"H[4HA/#Ͽ1%5Āz<ƍk [o=d[-&ȧx׮-xhS{ȍtiՊi(;ͬ,JRbXoH)!@"-s73_t|D}ňnĸޠ g9IErcxstdBlT.Bt {r 5~W_{[s~QlϹ&VĘ RlbƵ}r}0r>|jiAJ*Sa c)ٓB`=3}-w5JV1?} wn?G>{y;66? 0y\hDy5xsOIͮwoOO{Lw!\u ܁`O?胡_B%(c.ZRQ ZSBG P 6VgzzoW fӷ`AL38T:4'",l[R(䐨T7.y:T3RH"d "&E' EŰ|"Ede،ܺ}젛Za{]6[9o6v]<9$/} @k@&c|)glz>(1zfXmS 'Z!r5Ék8=:dʮ=5#|Pj`w.f2SRXYtT+;fgJ"&eF˦IM;w7oxW~ޖ+o<\d{0ymDxiKK}>"1}BESÁGqߣ5/f .-7O`kL%BtTS-x"hO~%R?A֛77R%}O C0Չ(!i%$k<J$}n๗k]8 2t멒}4С*f@7_2l ̺u2QŃH*;O-й4Vq~'Z<DJ=x/͔%Dҍ|AkUGʍ]!x_ Ց  (yתtfʐNlo9Q]"(dƉ' w;>xw+Fę0)j>Uq*mۜPDzr'?Wn?{.峧 ]7k5vI"k+4˪^ E-88_(Pke&t]X`>Vsz3Zo+/_7?w~@Xgz7+Ab m%m/GMR贃-k[<_.Ԫz&V"z*J.+xh8 Ul!Us'غ ,\x;uF/Z-K"ed#ݖZy)>gg?~_l¥8_փ5ˎVk BP!Xd5aNJ4Tny߸hj)>9 R s i޺g>Qra5LZ+W Y ӧ qttc|g{foɩk)Œ9(lu 8jSf=C"qR *u^40LJq!3:4vp"]l3جܿB΅8RBIJey3\[j#H ^ yV"a}0$qRllh.HM0܀d=;n ɖQiC/5xٿ/*qNhcaa Υ!!M׺!8!aP4!$B8lUxi(thPiVܡ2OF:PJ Ȭ;LJf6T*#y+A<εuӶ^;"o]G/UyCk|$e[ _dSԶʹZc~E-Bs{G~{Pk fcT:916P+I+S*#z3qt4gzC?- )v6ynyVp=q^Dz gRE 3*mA< PwBlۜ]nx hdZb<>ۀ(dm0#$j^[oFZv:m1`QF}!mok ,xO׷@_M6[V1$2?Z2[b ̀&`E[-+_^-/~oc$̪;{/Yۦo6QgQ H̏nK+^u0Kb.ŲQ3aYk(ð6 ZꘊU5M5B R?V7# 8Jf1wMF#GX%3,yimܾsB)5sOUJN)Sӄb6z"؈[gb+xmN`YYW{~['g _' :;^zqjnwzbFqvb?y߃@??^wmŐd0bj &5?uTz="*ѹl!:iDdhO?~'y'= $)&vlL,؜qcRX3U,J G+e= ZH'YeRMU-ۅ7^O(*_rfl>r~9;+=p.ZC-hcb{2J*Q[PHŀ+D󊾏qB̌LV<<9Oyı2.期)51L7^deN-~Ir[\4&=[-/P}I%xL3wӘ+>VZ!n.>lKƻ}WVkA}cT='_U.w lYAW^ Ǝ;*0cFRlRa3~o?zK_y rC[[u!uqҔ]P4X ddz4(-rNw [DRR)Z,<:sV-(%j.ԒwKҮDVnEjīIPQW0G 5m i mni+g%6EW&#RTE;3KmMxoؒ;daJbOsӞ{>=qg0M5v9z\@*bhTȉ4K2xgh˨Gy;^ifEc)8rg&oz=:7*VuOD] 磰I舏t}ݹ =NL9%߻|` j<q?[,˟}0UJ6nc9]4:X!x":zo)a|s,6Qۛ}?L5]LPswO|ܪIN?F? L0''87pI,:ݶBc 2.tzŘ&s}qH  ZI hƖu".R ,geo}W}Oy!0SZ=¯6VVZt{WXckιpM>?րs{mzA'CMoV1Ss_|_|\3ݬ2yf8=_SJI xYS[lr]S95O YZRg:{sst >FF6(Gq^$ /,qop[w^M):K 뢍S8߁ò>\OXw@I7Wnpj=X3xŹUa\$ T]pԒX+1::c*]/LCE'iiDZqO8M*tv=cf3B4ݶdr)ڿ IDATCHgUJMnFJub9T(ƠmŢ* 1QXQAw1LwՅv)E0#qN;ݺu;ɉJ+/b%O#is,7M,fa̦О;4HqjkϘD~1UR Qst$q8>|7A<9KdZ>AS2M"iȩ2 Mewc~^pQj6Se{T*U a,Nȼ/8Z.P!t!iO8Kn ~g(߸k27_ɯ̿sRXgr9]pLbg\vtxtζ idFNWbdGҔ032/˷lUU`lJŀjՃ{v{ƅ|h=Mׅs.m]r?⚇ҡE?b"m߳yN}{]wOr7=}$]m/qvhr۸{cn&KA>X:|6ZTL&Hjf>/,C.$Ե=* f"D#5ɒE@0`>|ӭ5|k k/w|_|goqz V̓Fj%%dAR y O9T Z)x&s(SITQX36{ѓHԑ. v󔪸]둂ݫZZ5 jh>+ڪ')yҴyVb܂VJK?u8sT %t=X>WԾ,=4x1وK-;wx.L.?6`dbqjhm?Řx9tE}oFQ\qAVB|ss]Sw nʭk(h76MEKWÎ)RFgH[Z3:}=CC|@J@`$4 (j!\H1!9^FJc]zVZSx22qDU&s*UȞ <#&1 -3GPrSw\,HυZ&jh5 *75jyT?~#%?o[L|CH% *VxUu7灴^;!W WFST >F\8:t1`UWl윉 p|3PJSx7:;#NuDk*Vu9ߪ98JMMjst<B쳚/Vj@XBs`T2)"r!.K$̖auƒ#p7ER)YmNX,fquD8b5Xv5G-K%BMbӉ(T*9uEc_ Ay2h xW(ksH$Hp Z9%fBDg'4!"*f~9q綒 ɬi{*ut޳KCe>m@4 # UE]5DDlSNDLcJXm-j*EMP ]G)-*0_GsddULzシR@ѪPvDVЌqApbyNm eq@ y"nUE1j5[7&Z_JَYr w-0Cڋh^x*gNI6wyE.SbOӐ$'îȷiS5BUcXi۟YXwq}| |׎9;^r9oYGt\O0N4%JNɀXbC 떦&-pԒ's@EѪ RMغ[KKڏڀivXUb9Ml'w8~욁mr>`; N**A>-`sEEqblDe3Tڵ8H1ܹjF>̞ٷ{>Y.vT/m>W946a,jX2kh\ثŮC5UUv)y {x>ۿɩGi v6 3>iZFF9sm۲\ ),\hQp "[LxO"}GV!Oلfg34xjJhnE-= 4X1v(d}TP?V3RqZ).xBətzQiE/Vт6lS\V/e:/{v|i' \ ~ً/>3t/o?a[QEZʠ"38ZqC] ҘSkQU jSt(ʟ–[Z}WX)7o! Mj`"ROGuUN`,+Jml*Eʅ+7agp]G`09j:,M DM UMg(%%ib"aSt58WpsBz|c13E٦Z)] (m\,E!ĺ %-ݧ+JǙvc~.W1w&R*f4beZ^~El6ȎȌ50 &*J.rIV޲B;k??] zw>u{\S޼s G%1׎Ψ黷 bt\ 82N#.}*iJ qym:G p;VubBn+Vf<#gt᾵ T@p·V"Ԅ=K)&^ *XD)ҪlZlvh { z;EZ%2L]LW]߱`d7{u&BDw#3q0mo. C㹝~ؾ->_d2}t_lʫRM'!cW 3ZyGa$sB}ODiA !Sfc[RV*yzX|+}W5s,\'ʯɓ㎜FJZI5B!YLFGҔRcYϐ71Jn`l}hkc/ g/t¨,8ph˜Ϋ!fu{>t:TW|Wq6~GrO;CT yo<rD >c2FCmeiJ/Y<:L0)Tqnm&a*&b넚'ěvĀ#~>?{oku=Zk{c *RE8SM-LK--;6Nt#1'H(Nm V{@&%΢Hk[Ýδ5snlY2DU9{:{ַ7#O 5b ʝ4!`z]:Z\ʭjbn `Y4Df?CSsݔgO+n@#0f( EY÷1D!י![YTe)+ܶV ($7pQi4g,4K/04>[- *Y^]aiP K=,TB* 0ah_ ɢek+dYFץ+^`gbU>ԔuѽFDQeQb Iͨ $ħnEB4%Zޓw(31L]BWhcPdg2uؕ47!cĠ!8XN恭Q1fabHm`C``qBtr#VEU2ah LjKޘiXZ@u> |5ct}pc:. xiXgf gColorw>^Ed\ FT XJI\֊Q=v@YX GbҐ 5s>NKzNdAF d}`s9 *l\ޡ2B +]tѝ1[zj c]MIɺ=.]َ$nM+0UdDw!i:x:"bɗ2bΑ$ Fw@&(SՈ e6;[ 8PʒdW(Y` ud x#)L6`e WGN!G0AmtRa]6y%5 &if$4OСm_%јuZc \Y&82X⧟y&%QDži2 A.j'ъBG&P DA. K!}S~+7iV)z\ַo}ExkAi4Ay;ʡ"8򂗀2Ew IDATL&ĢMIj.QK$C%(I:qv֓)n) _mErmt&M{-_%0iIG3ܬPD+dJ:DN Ttn͚EW0󬇦20uAk'ꜧ5.Z+4!I DVRTCd\r2M7at,S52,c,USb$:I. EQ[J+ }=m'LOY[aW~k=׾ ؍9ϯXڍv': ղ7LzIN9zbPXYenˁCqEyvR*/ϰBd9p1時unYB [%|}O PUNQ5PC'reNqN#xo!MK* \USՍ7h9[ʢhuL.% ^Z : &0Ak53Eg /:4"i&!<2R-Dl0X;Bm(MLQqnݼԤiFQD̤o_okAи;1pB,cW(6/#/1_F J$ JkY!:(;`8@7e˗}w4Zd2hMRLcvvv >x^8Jx!Xp[qW1}YLΪAw8k թR]u'ȳ0 UVmUJvsÍuf+4s].uҞΛ,\қ{'5!Dp=*zsݜ$Q3%em-41i"Dj6MB>YM6KLI.uTKMˎQA7 }ҹ7%(c.Bmv} pZs1v30A$L.4z_MT1 A)3e٫Vg+jr5s o -81u h=icT;!M3$ks(x{U %y7gi.g*d8%dM{K2rHU 5KD̝4BE톎_b#5 5mFN)yWZFar^7v-۠t*}=gT.D+QL& - #8Z Uv+'UM.H^/c@?AܓlPق|#;z Q³z \xNA !V{C e4 &fkkq4TU@j"ceiՐpgJgz]Vv}r0&ˈqg?Y>Ow_g6u]tſ`0_UUg|_?()&^w_~or~Aq9h4:SX^7VZS ;.rr+0[Ph(*\U#USRԎPՄU|1"|="15VNH=^AFV,4֨$D5_}bTh}݂;A+B9 Җ0Sjv@ ayA=bmpkނ$q@-a.U,̥z2ʹZZC\&HHAVt)nOt݊]M  ?=_oZ Q(&Uq4ѱ;KWze/f9ZkloAEW;. UTUDPMq`4ƘdcW9tD養>ekgN_k_}/7ظb,PZAv ;bw#?Ua&o~;N(ռ⋼kFCN8O<(|w?c?S|C_'OLddV~/.T}Zc & s=2YGo9waȕ-2{JaFI F(xHpgBbƦwChěsk2iZn.7)jYQ-Soh+m\ W~3޼h%~ t, p9m.x 8 WƄIS*D B7ÏxKNН7Hx*.6ַ􀧞zqQg9W7X=:˚5v) &ה.0Za4!s$Љ;5w8Ï֘ᄐ_/l #ښ4*$dƤ.\%IdIIU(V<=m$1G?n .#ԈrB2x*d7AaR0&AKddoفAĄW #B#r$_@TFw {ڻgn~<O}k(Mw"G[Ιu^׹yǫ _/-#w#s{>pj(]\5cjY Б9ƣmΎClnF(!G[aѥ^B tpl,bVtbAyƎXvֺ0<Y -xICL0J 6Pߜ\\gamHbf$u2 Jx/L ˶BHߦbml!L(-hxhDL]uEY F;ts$FPdyw;Wd<@,,,sQKԵX 2 N&31,o2)$S!UwZ)]ԃ N̳blAesTCjt<RJ4E!*Jm$ $kf;.T: /\RseVp0.)>: cic'7Eiq,xQ3׻/e ӂ97&g7w~~S߫i}[ci3̶7$beVDm :>lP|ꃼ̫\xՠFW*Q6`@IWTBUҮ"vZ{8O+pvKUQ /!$9wsceTK^uN (vKz[IKۼ>ďf;Ȼ%O`mmt*Z',0?Ϝw=)gOOI6xRMA(JdR 1RXYX5Ep{hQd[b2cO9RzPq Yb8x~k뿡oD;G3O7#M2t -19廓m ЇŘڤ1Қ1p*/\䉿ex|ɿ/γque0؎SsNr)"I n#G0{Hr2eQBt{]4ꕫo&_?}a1vۭ,p@7e"> i 1 X^Y-EQ2Եź)S$޾\3;E|Ji>>;wjN]f㽨;D[gkֈh@?bViSD( 7GvI@5X^$IiBVSumi/1 ‹"hcH$.2mȂr%οzK9֙Kx%VVGV[j½YځP{iƏuVs2پ̦3x˶*֣6I^$C2ƕj_+D(]|j;k پgQy>3[H섶Bgi dE;dB`.GDi7)NXLHzYI(-s`  `4l]_$A|E˗)F[ɢۄGFDXEP('[P' qQ1ܹ(Hi=ED54#"Pi:~ҁ4qpޔ`l^Y̩;(cjSy`)O@%)V+A5ÒQW(&INDY6kK~,Mҙ>4mAV'HOEc4 1(,)di & a%C09bk-!7L}Mݯ͂3<ݱJ?m:Li6ak"\بxe}l[+ac!JSBd 05qZ)ef0cpnYǯ)i9N]h?vƥru_\ȷ9e{#`jfn{]tp͡nƪ'89qAh$4~ۿ9.l > ";Y]w;,/ &ƀu5W(SW -$Iږ2D&I ")P[`X$֊28梦\,1(B@GV@h*e  ktR-tA9SU㘔u9\axsҸxD<8H3LJJH :SRU|# ΓNޡ,-./cL:#OIq]a +$b&#^es%Nc,=cauu(xظrƿd(4PLƜ;}+kkqQΜ>͉"I1/"++c<䓤I2Ӽl\:-<'ݛ@C鲸"鲲B| IDATvf2_[loo,TUIQL^077O DŲ,EM[5G#FkIS%`0( (Sc2POݻblfc wr4Eh2 6|M0]ؼ *K#\PḬiHbV?.5>B00*Z`#I wHEA˪ G P+LYreι{ μtM$& r-Ks\|`1Dl٨Z F  -b9W.Ne(A(,&|} - !_\ ('[ t1'N0mvOy'*n сe:xf&f3{֦0] ŒvaO#)DܺEAZb4CƜj.xD%e=%vr` 8.@R h|AA;lNF]Yn;0v@YJSDDQ7HY (԰p ^ƕE XZPy:Qh1 ,.릸 {Ge-`{0by:9h2MX4YKLCP8v;; Fxg-+;_3mp̫\]?-GoØ)1+/5eBqQoaIl +6ƎEd*R5_\(*6eAj ^ 6{QXaLASD mY}ycq{O5R@oy/YCHoK#+gGW6Y,]]OcخCB 7^53A)`r 0W}^LYJsMy}yN&o^yKq7v?O~YAg) [֥c Z4C9pAvOx_O>2LZ=l]s 'dW+t"1 -R /9bh' w=|G.^=NN%NqB.Ǩ.I"21PGx5fe1pxS%2sWe\D'I<&&f BK;j|p '%QѸ{Ҁ1]wɳtb8Y1݌yz4odR c9 xoZ|4YvS@)G],CŤf^&цu( y2),ױ&ꡒ3))X8$x5B LWi4Ƙ٪)%hO'=sv׮fgϧll].Ч';[ Q1::E#y4-kqnIj7kkMLfIX19ln^eem~ϭǎbG$_ȳ>ˉ'0pyНMvloŧ[B]{{ՌyoG{}cdYQuͥ+W֚5ԧZac<G :t M³_Dkg>^5o/}#<1Ͳyfu{>3pa~~z++.^o/~K,//++,--A |s駟OAh8dk{kH .;9s |C|1kklmmߍd&- m.lHՖF:4*ֳ )N:;i,$<&ZGF7nC_>}C8hrI' \zoqs Ic2sCL.,uY :@|zM}tV vExUsn#:!1Zpe3mo._|z{jCUք3KSVo;Ae$a2ܦFnjg 5#n62e%\g7=M`}vŦqBET$c ݀ XM ȴ sLO4($Y,A)Gw< VISf82) /HhLڴ%:ŃobhWt:`L ЈYﰶ*Vѐ㬋V!Ed9XS.94r A(Kΰi =MJMuk܏f"CQ`Ilaw_*t#5:=`B[FwW'yWj^ޟ</ہ8ģx;N**EuTwغ uQ OJ=b vzY^W{,ͧc/ԔXIKwVń@c%M'7!4 Ml"OLulIX`woyq~$m3O+&aSbҡ*=ʔSxB'by^}S ǹF+ 9OR0 6&YG.(j @Yx$MԾ^2<3J:M^].lN|n[-B q FmbM&Btu!6sE{%#%^4/sNu>~;Ǐ*J)/\o6ַ8wwub z&0ן'>1>FڊgO&yu:؇?{px`0͝w?3Y<h8D)|<-J'IRS|%Mx9r]s=Ow}Yָ*nymAݿáCLApϿϿ@~8x\.]|X[3FDx[磑 tWp*ꔭ3?x +wq{5#QZG<ŀ5|K 1bbʹ 'G=;يqQSس>I~‡Ҝ-̑pnqw/3U6'p2t?oQё,c&R*YȔmszdv6Q1{o焨'}* \AfAup2!؂ _ŧ𕅯1wpe$.xA@Il8ʀO[8rUڟ|3<3ڬuJC%> Q~+l_ҥ-Ο2BE3.ƨ&1ydF5R>>}_Gs(&O6XWBmQI ב*9Zl& (3`<Ϩh`C2."XuB\%$:i J`DZXְōݜɤG7,>TĒ(|C∌e`?xd&,ƓcՔe4*Yfȳ4$xTk$TeJũ)`iew< ID;ʇPjV;3AJc;ʋ/c@)őGIɓ_<7UΟ?hśDv宻NvVXkFnǭB~p޲Zt= Y֡۝cnnGkM>|Ņ ,,,w{ ؈qKaW9uUS`<240? lom ϓe~>t{/|ńy/3VVZ+dcs K+Y{s;iYPY[[c46,7.jZ$~- J}LJFX\/*|-"gMlg {8t.p1$ EhH(Y-R8)?V#RJTI8RǶɚhJTE%ӢHS)qq{{>{ _~O.H*mb}{}}!xz0Q!iDiT-QZ&v)k(rB1, d{g? p3 &  ڐջOv }KF}by"$-aN'bAͰ1DIl]ct^K[W/v61"!Ph 7ަX\f:u2Ŷk D$Zt'>,*&@D7ӝo NG)7@W>cqE]|Gy؄;[II] -J&ACS;yˇ$ nҢ {I$۽tվ^ m{|H ƶOMirKl'kmmZ%5 PϽN|[]tڒ?ۤ%VCH$-RKsBT&+隱kh&()S ,Jl7ݦ+d ,./[j:lHY'0&Y`¥yv?rFS:uME{Ob5aQ*FjdTx#QV(v[K鴝@K^iku`o:&69r+!U\~M (18U7.vpϿ)"u^!Ec E;BK%%U\"phr*.?Y2/=s5]yrMnF_ߠ[Z$Jp

jƃ)45P<T3Ð $⛖v!G:~s_,Zxfez ؑH˘N+fMD4Q*D zP`sKf&PmrkUCCfsbL-hc1„ 51Ƥf Jp!W@R&SHEzRZ8s4^Lę}oæ=c0ĠqFae=e/KL1rK]m=m+)JՈ笐-Ս¹M6s}@B[`8dBݥ_H,2Y[_ތ.\86W/]K_2Jk-[7n5"B0ojʅB`scj|niq2I'm,,g$&KC1ef$-˂5667YYR=P[1,--~7X\^;~pm(>"¹.?qx;Eiͩn̙;9wyr67!^Z*t~*p_K/]baa{`!wqyœO?c{)ڂ07)F)^bWDA)2y,ڞRudhkc̠][5 H$\@bbX4Jq Efu krt!FiOhgA&#$ Y[#{,r2{ns ^P!0К鈎Ef% iCWai:6#yL~y Whn&I%܍4=khknCI:!.4LĩTQ+-epc(ҥ5c7g2x#?_~:A1o/ҺeuZmVk5´rQ۠nE7ƺ}1:91vUZϷs cXKI8P&gReZ`RJc@Lb0: ֍IDZ}<ф x4!ZBHlEg  eMND%6W $:\SCPE7_U W& E/7M:EΉk3 ;Oc<2EbrmP֐ba"7Z 6Q 6ZCQؖ}3xJcλd-Z0z__w6h4{ sBT;GF Njrw/bq^lnLdF>;_xOZs#H>u4\ݩpS|vs/ZC=:72Q!EYKAMVW-D::]3'|}SGy9t뻓ˑv#K]_}| CM-c0z 4s2(aV{IWkֆ-KqJCں_5^W( 1de VA Y[sd15bDr$Vx]Ck$W9#$`qƔkK!~5`"My>Lb )zIbЈ*~*Oi/" /X CzJkXXȩp;0KT96Qj%-sM( {;_uhfW\iBYE@0XH@1`4BkCcaa,S_R twd2/xr2++k,--1я~/~ӷ_O"/2f"KKöh"qcfaa%<رchߧ*N:5q>{ĉ{}gk1?<"x>O%)7pV|c|k 9Z`|Ҋ IDATuv Ă)d`dBj#ъm{l[\Ek[$!b&+ Qjss4G? 0sH|@y/43ky:R9[8fu#x dJѷE|}cEa&5" lO=6ؾ F ,zoF"9OW >0=`tûVlF<'վpFDέV2jbttyi60w,!n Tu" c豙a#ϲtv6ncMSu22S{qε*]4!H>َ[=A,eS pJ֠ڶ3'Fy[Ib$ 0 Ԝa3D".ι$r5Hr*G .g)#*GM EgRdV KeR-X^-)sT`XW]/bpw3^#1͸z}UcyAQ$&[1EN$"H?s≤e7;Ҳb@YD+%ݵA)8_IQ!k݈IjQ$Mk$yF[)"`1/ئXɚ}yq"vq@^ȰIEgX˹>ءbKYs!o;;sg OCo?Kvyʄkɾ~g3F*2N6Xu)K:rRtSIF7 W_$/][[,;r_a*&  5isLAn92T_< ('SX~|_Gӏ_KjI:{6K,/{bS #aL6x˻YlܵqHJaC)Beaxɟ|{,լf2Oq>/h ̤#@ Ħ9z9x Ź YsSK?pɴۙPڂCUP\h"$3Klon!"mEwQ:y`HQ12.رu\Le)OﳾvEYoB Ɣe?@ tb8@~WFĮ jąt/5!+++,,,pqLSeh4_"MӐesw}7o{[1Fvy4Ϣ ҠyhWh}kwEI&G^cTޣT*3$˰˖bPbrA0M Um5bH6CT:vr>/ jQ<:tm{ z/cO 9y";;dW2( 2Ru$ђVD})zRVQQW.o9ɰ47(۞O\O;/éO^%RjI8so{A>s_}? O>/qe{Wx1Fz.Z![eC$ عb"… /tc*@)iH"p9~cĩ8uť%~G~K_cT޵9!Py$Flnbeu k3:L&( evtmt~JAD|VQWZo4:ZG)Z޵{tիlllp)yGx=\<4<7O.M`:o@bӶo5Q&VG) - b)szYP՘TQ|C{O>q=Mq7El>QY3  cegH:21BJ)W+!)ƪ;l\ۥ< ̐IC Bg9y=tT"MfF)>RMn^&b2IT]lLj\[*oR%v@9(sHt} kTJH?o xD8Z`Ƿ5eGcQ\byG3 DȲZtb(+'6HtW!&P̦L ^|f .¬vuj !%6P:$AZmVK-;\)ƈB3U mCHvm ׊baY[_7}ǭX%t$!*ƕ'ST j,M#Va MlO`M9lD'U KTV3.iuh#hd{P5adšLY?]-Tt~Ө ۔=u])ZԪ`YoV׮N+X'!ځsЄCA;;5,UgC/f@)eG}nvnUmUG@G_:[E"^+Br'ldQTDSbRUlc'.3 Aïrx(0Gu.x?ėラB?_?fsOl_"&Ӕ9 VF)XJ#~~gyL&c >YYN,|$6-K%-}o:_F6hNX%/?x{؉%𶷝e21`ƅ T3G5o K6Ej15J06[T ݶpUMOةѺ$0V. ehZF+EhДD |Q*b[44 @Eww @E_N7dbm.-{$kO0x[FSM5)3^ - T(e%OS`嶈f6~D?o\WLEdW,u5ND4@M >s/1x}F{{sDvz}ǏOsu}4u]U=N9&Fy1IB}~OXe"3VpMP%kk_4^}˙ZQX^2,֚ =f /y'B j* ThEN>.v#ţUA:C0BDٽAVv*BҸڦ\eU@A-+- Sa ulEa5FR'aR%]{NGMmD:Z'`(*>$Zr뙇 B]5)WX$[uud#cq$68*Ghὴmm#=[a*np'EbwƹKOF+4#ɚ?NяmQt*ј^h2435/cwu[o@!<1mF$]aFecbId,d`>9ZGŤv0c0~}&]ڒ׀.mON#b=IcmJЌhvWWPR-GQm_"J'im+%B~'1qI@jiZ][WB_rc;Ɛ`a%PU^˫K!XfbP9cW^Hz5-PY+Y)3P:_K#,}Ӹ55),K+E e{U{@e9oUC LJ\ k2m܍cUh@ сHq XE DChl!:tqA@ ]_Uh4YFD0i,,-eya!5FԵûlV]d2a2SU+R >@IwXKex%*tLJ^\֩Bu$y5mpSk<8ѨƷEEJG| 89\beȠGK5ӃF/SSJV\uDYlQ!Lh%.5 atjm|0Ұ5ip6#[襵uJj5XYE|ȱ(Fé>vqJ`zcaD4˓O1&Q Xe5(a2B] v&;uJű}uOn7y ;4 u]>L,)rW%}L*1:2ݱ I u`c]r-Vɫ=8P'77ܢ DȣG2&rI.\ąHPc ^ɘ6<k-Wo{Ynxw?ƴ4, ;Gӭj];upY(XҋX.`ddDD#k\tbssK/ 1 iM&2gΞJDʯrqk|{ǿx4"0478뚺 !`e8Ry;Ƴ4CVk2pIpQeVWW;~c9C{11FʲdyyUF#MoQU3| ~Îرce֚ .p[R)Wy!rZ57Ʒ8CԺL>ihAʿ7KRYc2Ɇ}+1F)Ԛ5.V$U76w wcs/2x!Z_";v腜 9v:Uo5bY{KNDlYx<=mX+,O|j 3If`oLMH dBTybM2A! IDATG6n:']H[M_b  ="Qd;)WNa'; q?)G62A#q4UJAKHԁG5拯oyJ`CTk.8#LJC@!C~BNsR$l ÕȋAQ7 {wvdr:Ј,IN{؜3de(TU^x)HcO[C7M?0C+(TjY*.pk7x[K,_s~k {ɩk#PJ/ ^*'k\{`c=}%>/Kf`m.u)JbD(!,.&iCEs#k,,e( FgGS8>'~`~U"WX"Mv㜹`2ive)u JL{BL@Bk$B11`Q&3hb @!J t$Ȍ"cL=8Tԭosm{A : eHx&1/Hڅ1F 9]ؘ4"IytZr.Ǽ):n*% ,Rsj?-#pQhht:(5)bue 94Rݜt3xɲ'N̋={{{d"֧oeD-X зshR6^e҂)IQlHL!?*V "1ƢM$4Ca2y扗ll]=Ou:EiE V+Lj%~NbMcjcAP-OJk4DzƲV&BBb x;Z :&}lHD\4E LE BtS\t!Yo %p 8t . A%E (e7(|vՋ>BW#ۿs\Z)mdmݹtaai﹋NA!(fՔk׮sU)jPIxӭXZλ±Ćk{ۛX^}L"N@j[T!ZbayoyS/sԳ1iv_9ȠA4&4KhE_4(R] /(&M .df~rԖF&0FX[nYnlFy2r:UG,"դWKow\]+"\DM0Fazgz~$2lKW 59 y_j 4Nh07lC@nPn^GG~tԿAU-u\HFA+hZ[Fi`{ ۊ+%*j17V2VN?{wqcS_a<wކt2{(shG) 16謡\^gu}~|sϞ{KY?Z2MkF "$:QZQV Ġ*'M:nx45 cr*+}t8-!P:c0.қSePdĥQDJN_M. q#&XM\(ޣ U ѵIjְ#Z=ͤM@,QaZaf3dkE,Qq0F#EYey[t]=5ك8$2- `Qp y~L^pI #۠lj )$"[f]s֗ϹB7Ӌfչ瞽kY (L cD F &"wI:xp|P+bJZ$PrкYI޸B= ,̅BDѴ)quZaFbZ_ENWéș!Qu\6g}k񕫔.~c2.9r6$M M8Xh$%04 `a:k-HHN=dz{^ؤqjf3QQ%o?ۧ99 Qq}̎!uJ''|%w˅ dSN(}R׵,;~K/\=5[Ȥ KKF8{#+ ᘼ WN7Gn~#}\hrǙLіI)Ef"Qׯ $ZbfM9..b$!v\y)7^eWD@ւ/kgw3:37i&+M]7i*ўu9;$FTc촏5 Ɍ/]&[UNٔ|:0vFk(˂h̠(89n vH^Lcb%%u B /^` lN ! VI c]2TM4zpY4ŴAzKɽ"\n0YA""1tc;kƓA/=JSv8WS3󑳓ʚ%ZϚ.m) ^>Fx&H:Aހj^+tP3ހCktysfF{ r`xN[p/_[xco[w2G7y1?|i3W\US L NdjY ` %@;@J] f+&A#Χܩ4xc|nBЉ% 11x,6Fv/6pY֊JpM;9\ &'T[r_RF: GkZg4% Y%Is wFQˤjycuJRUK}8Ӻ4=+,@N%{I K9;PZ_g}<`z|Dצv%Qgc]'Eyd!/J& Zڵf4Q 1USն$֌c!!g1殻f8""se1T/8h`щu(bkGI34hRemɛlpZ["&xh,G.P8ɬ|ߺͽj'5b! wp L6QCit0CʢR`fqAi@mR IW;,ZR8Ti7B kMGpr,aB9M=!uyԚ%(I&C23TWvq] ^+tc/{oQm^ʱIRo E|&aWKPN[:Z$ԄCL~DրhQڢu6D0Qm zcRAo@bִM<+ȭEkh4:L1,bVBt>;I1Q0D1bLn TA1m;]>ПP8sL2 cma>9O 홃m^ZsO2}0vN%zQJvR]5iK2{Et3-Y4[ԎccD[EֈBuđYIl] U96JR eS>o3u<{1yuL41t #hn(.\? t0!Ɣ̧ M\(6^BsM}e^>p}[+ؚ/a7kŽ^ot+rTe%`&*"*Ia.ͥW,ߡ^ %U/E}N/ޱs+ӊ^򆕂([FD"F ['>pߣ@@[(~7>o~OOԗyrcp̼ų_6=rNwBz^tO)o}yy!"''SxG=a] B֙屷oYف@ c Pk|?o`-+03.U: ebJg$'Jd'-$PeՎ8P-U]C mҨ>3.*^zejy)Q\k?{Y">")*5&rS? SIPR[z=CLuFfT" m 9< dЩ"(T6TDGc!)MM(h}K;Tڨ#m3< QF1),gIS8 H̫u@kQ>z鵐o8k-KtCZ5+ %`-,G[.٩!r^QDZi{q}_OEQs0op!*SFamaC6ެíF{y UP1{ye 6Ìk;1kC1|f<Ͼ@DgpYcd@|\&p5^x1UD^Ι5|p4ۧxgkP'|)Aa6r=11}p!#^!_xvƗ_lxy *ya#g;ϿĵzDyF}(ByQZ@6 x^}U *X 6-S.WՊ`U.U( IlOmՔc_vO7cr6o{|ӟ:lC੿.+!u%6_??>l~‡qO-8a,n8-cp0%ek9J@bQQFCK LMX)tyF"vs6q)a[J}v0mJBNp۱:uHoUr|YYZJT]C⟹Ҽc2K(sѽH:`14:P] hH~oD_;(Π\I(v j&VgY/6`B[#1(#Z+| J%NYv2a}EӶ2Ҥ+p](Z`'\B2$bЅ~(.\m e1dHS⊒ OTo8}s㏱џ[*%zΜKNYlby'"4e#wXy>Dd.-;瘬Mf3k;=g, Eٳ;믺#Ę|kd`aʢ}9i߇"/BTM@wB3E{ KS:LڄG*f9B*2DxC11ЗmkOs_ѵ{jTo5vw8,$aZ8*5.L3}B$cc`#rg1Z1V[MhZHS)|NvI]cz+dYӳlD"߁ @,E@ œ IDATiZo`8MT1RC"\/$1+JJsR@)XFī`,PkR42S D"=пaY576MJZr=i1hbX_QЌl1z ԧ;hJh/1{T6#6/RBp%~M@D͘^/"3CӴI[P1koukmS((IF"hAw}rZdmc&y1A#Uɧ99MVM>1Nro~w%CCurRl(2eOQe.x@p]-;K Ӟ"˳%tŻt i6J!_V ӵpek{nr|<5-[k#9&Zpcpe-{%)4޷=(@6wtޒ,AGu}<,rq[|`>qtRƊyT]iZ AnYX6Ò2cm4>viZ_kSCB *(&+2< Ѩ`P~@11"ocEsAf]U·/so?ϴY`: ܴ-^nâ^jsCiڈ).hO;_+" z]HE(/'[T7gHAUWסfc[0s%\P03ٗc߶鐛{s"[9pu'-rs6"8j"/_&|T:tWMX/?ࣿ!Mtg9Q+kYj؜x |p>{%R"k7i9jR>mϕ,{*0I6˚:|`B~w Upp$z2tD Rxz@eQ7F/7(rCh֕#W~|᷼ m{iY~w-} ÞŜd윿?GDB@tw?ŧGM`Z@Y陵FQ0 *C|(x䱟ewg{i 9]8s=57'ĦZPZh-hԏ( ysf{+`J<ĈKksxų껨Jz߬sũ/vvvM)B\rgYQJ1ϩjxz[m_+o;u{>IbIh{Z#& m@;S4mGb$Jl+zc5TW 髴`f4U -tf}H#uν8jIm5Etc996k9IN: dF)E A"UIs!!PдHU#UjjT;G&Eb#.i e!%v$X%._Hjp;_ 2͐{~DXnW莧wr~Vip_b=%%ݿ*?{_.]A^heH2(QWc p<LdyAp ^F{xȑ^Luj9iRF{u|upr-o$IǤ7,v s=R͎eb/-*fZͰҪ}b7% hzEL/6\@\bNN(&3ra|]G==f~t|ZSjfUW4-I.&$ MB&L(!ȰtG%E^xγ"(_FJra؈x&mL _?dxEV%r;#!7)]FpX::sx~SŔqTw9a\$BxG팱Y Ft6{3 %;B5lT6C\>Ԅ#;[ۼ$vF̐MynmGu&͙'* %z}?bW)͜yxg7QC# :e*9&&_)³7 x|+r-32y>qꓢ /nMy~yQ\l·CXJdeU$=gs7v[\ާS[WX㵐rO!RU Ibx_$y;ɟk|3ϲ}q kg^G'$J˿?ypf''b0_]'/ȏ}} Ϝ]v^%S47cq+F j>KUIsx2@XbW]A 7yiNud̷&J&9٣oJ#Jڬ;쁋T1)!1r)r?:s 7ub><;l{џ!Pu@K%ߦ$+,e1x=xoH2D_JD\/e,y!x ֶwe6#AŔJyNDWSq k [80ŀˆd9K#Fc b$PX(Ѡ a7 @RbU 8{ϛؽ"ƺ~}Q/%ip1;:䯿\x"܇!Yi54<"#,Kkk)<ȋ~ F3hX[-XF+ct¡G@$Z.6779w,ƘㄦiF{-7@t7DH>Τ ele2؄A4 2yYD4 t6|S_:jB2Y[CYEЂ`|>w5րqUX-tp~9<7o9O=]L ІL: OF]-nCku5HFk @;t YHYT,zE-|SUzHhuΤT ,39^ &NY|@b?,*j ?!N[U5}ׂ JƒQ`$23`'>ꈶ3VDe_aƧIcZ41 FcAsyJ\kh9'.`J{&sd!|FhbHFt]n*f){I>Cw$ 9ةGH Y@C/LN&H0bw#v}4% 2ǜR1tJi]'PI} *Pߥ@&ESeV! ĐmkO#U7 m E7sGL vGGn Ri@<] !źSE5w<7))2Gڞ4@[CӹD NIqn@6o's,em'vrAWL=xGҢU F8^q/29i{ڼhmh}7*>͑)Yic$Uy5p@ŜoJ)R6Ч>EØW3"/>+%=w#'3Ӗy]0Y{()r5~EY]cz06evȇ9'Qn ܾBi[?C'gwY_USzI_ݵ|9D<` \FXn-UmqբYp$_}x%hIh -}$?!u[w(УuѺ%(6;O?ea*Y$t&=&SB3bBa#:BSw;wP3j)}2*$Z ZĔb{]7&J||[=CiP3rgQ1rxI{5v 1ሃW16;-AbC;aK6 .=R91^~yk'Ш kSPـ3wam-mӲw||?Ah-%:G!UoaYF1yzm4m3EH,HJ%ZYdǓb`>K4Ոm$-.yĚ~GbTJ3jIO$]AX1&fh&L\`8}%c>-TϾZATBe7-leQXF1$ ֥`PN]bzP]@XI2˴՚{ZArw0%(!*+*r6:J-Xc SbrK)2X$}t-uzC-̑K CT x[ &x}Dz?$Q rOI)=IHf:ƹ72+f1ʅ&KSz6(kAQMظ4ԃdڪ bb{ST=^>(6Ab`f2X1q&y]e9se|/*V cȭskZ,OU>۷>" )#\^$SQRETɬW G)4[ft賋( Q-HhFP!f>飼* At$EIz{k ʚQ),[/Ғ̭CLZD%VP|n#'5Ǖgf]Ǵ#A/J(Ÿxd{ 3l JI_wt!CG/|&2cX:es,CkM]U(,Xݳ^ìҥd r">ba_{umC)b=0?sX)Tє3kFJ #N|2nzPN]f˳ǔHs㤦&#Dn $4xQ\ԣ >)"zݟrW&1cupboJa|G{s]#i|GKH8憭,' n}Yf>5o=]=mG#4Wwٿ]&K&dz#߭O1;HkIw&3nrthrR' (lKnyL/k ЏykE4ǘ@ eV<С*^/.mq|/coJ Z2F뎳wᱷ>^8ӳpm}½]hoN% լ/֊r1*99DdzJ>L_E}ݘC|sLP- -7#tH21lfcrALD[}gW%%s܃Y\T Z ƬBbWFu<*Ao^k8 <1j4)"iSx Y=J<, c E^g+}P;\[Xk9|zkػumHoug[4ղt!~MIgTBzjbQ!C|D2T?H#[dpUkpѻ[{͵0s<-{-a`1V8Z,8љ&3M$B?A">$/BFA#c[J:҅ȴU3"1|C7! ]/Z+Pɲ,:%7-&s!bP#]ҳdk 96s̬K{|"i" ݴ)o:S31J]*mڥG0%҈J>*R"S:+iVPH(h BpXF16e1ʧ{w<* IDATVL5Q%`DVXO^J2z g+3d[Rr`EmGYm '25WDR)/a>U1#4>vqef[!lacTov> 9L^Ĩ(tH~JUv鼻.0Hi5TCuyT15а=PXTbh8r- y{ ۮﷆ=w $@p)J-ZhvɊgpRT٥TTS\ySyp\IR,S$8[H $@@Lwz>{ _ڧ2 `Uuݾvak|7/3W?4/S,[v5jų7 ^)A %7g}8ln9!8&={˻{Ks $yQ&R "J&Ea q1oQD._~>t<&Jֶ a`)坧*:R$gmm(};`ț^aq0EpAF%Z+*T"GtҚ5'lJ3)][J%yz+up%\ڜz >,LCK,R*{\, dXX1#q~hbp!Y5cHgQz5D9JM IM4=[RM͔j, L @tE"=8p=͞a%!shf$&O+#X/5յ=#B9 ](ЖY|9 /qaQsŁҬט< ' p4A@]K#e ;"UJp )elcch@azp7wFiq t$\tpLO:3DX|{OsxO8wxqyYo oJ$BMfC)°?0$&1yŷzscF]8g8qCyy3֚#`QXFRDU򤆱,B !#6{(aR)~U+Za.vB͎0CKr~7@+[4ԒKffBvy( SW,T`L3œIN iC 6EA}UȩIFGtƐЧ ?ϯ@e9T>f>EJ՘)1gN'eY˧4pw,+ʬb˫sXlLiVshV(S0UV: *`m}(cػ $p.ƈO :͡e@ERf<2.ז Q(kt)SɈڤCo.D|&iftvkp*. lwx8x4 >ٳ[x !2Ȇ֌C2-Z$f* JM] ꂪjSh*uY%WA* stAtŢxeWcuR4ɇ "^`"h%G ]eچP)1HtuL^%ZV0IjgK&L).8{04nlQVT͒ gEA#Jd)Jsb2߿tns&4P(Ӗ [kx{|Ĉ ݼJCh<3=|ꁋhRZ$Px}Qpym/oT(Րo.;GcmnrcK܌DJp3 !Ͼ/v4 ܜ-TC#> _wj mX[Jx`ܲ 1cm@q#g&AWD^2>`?ҿȁQ("JJHdJ ?p~soI' 5.)s%poO?hc]U'sϽ%'TH*+/W+#B ʍYߑ:yp+p&cKmx:[pYBk㮣(kAEQцTTt͂8b?_z0@)Ep-k A$Cg%Zʂ :!l7ߤm![ҿ++&i})ʂeQ~e TeAV k}OM&4Hz{ Џs`e_+Fʞ=V&I**H̔=ˠ6ԥkK~BX=ʵjcո1j<ŒkFQn , 0j;Z0PffR(6 9-ж-mۢmцFB1Ϙgh ZKb$,}^/np 'o1躎tFstxkWr-nc:[CD_Au!]KCkkYlnL* )t^ЦDgxȤʎE33&2 ˒Ѱd2A]QIVt1!&.zD)`6SxSL VRFAq`CR5ݏu&Dڣ)Z|،uD6m UAp3:0Z1JEt<9a^$ӓϸ|g9ȬA~}5 LU3ͩGܷ9yG5y7#g6GDBn )Gʿ ۝fP5|dXE|rȝq1ω/|_{yot[,FIVRyz7`.0n|QY֥ ~_,^pp|dsCz0B@ѹ~"Cew*_?/'?I?5J)Rlhç)VDrwtJ36 'Cړ;KDoVa2d}/V.l^1*Fh ;G:y|ABe#Tѣu@=zLB=|DR=qzfwcbUŊY5IeImu!'BxEikv(DqyNpF\4A.Q%hՑdK>AX/eEglps=d,w_9I=SYH ] CLi`/)r%4Z;ՂK_T/I X*5`@H]ΈaOP() Db( ԕE0IjFln2+ އV%9*t?~is|S?6}3a6=NDPP%4][gVyH A{fN;{$s+f 6@OjXh.qeA YCi l)aM*5M1,`]P!<E  (tI]nzD}n&Ga+.LgUDn;łm V+ڦa=8fgg9>!cHӶ( eU4)KkhFqvo?)wg'9/DVsq0u֨A6Ɋ=Rڰ\qE"-=fm)z?t8Xs@ ^2 ̢Jfր@!5@L!bN3m;K` Ĉ-kaI״ 'OPu j#ͭ}xC| YWYz~q9oA\L1FJP4*Q>F=g?_xzbg 5X;WƯ~Wu5c)tg_Ted|Fu.0ȇ͗斀^Q'(iHWdKzZ:B҆TKM^yO|c2~9pa8.(G;:5-<˷t@Nł; _sW(*]RN}\_h 2l&Cw~ e5T Gz9xŀhNRN*:DxkކsIa2Y6)޺8I}}, yV('½gtNuxmuO0)3:/5k:Ѫ &n&],A^ @I뫚9b $ `DzrKuA%5b 7E0lCa2 һ2E љ]A X}1躖ӌkt ͜(ç\64=y0ݻMl9{/uYv7Z}kM^1#7|JC 'p7w?Stm=/1K^a4Y`ګ 79>>Hk4ˆ7n1N9o=47o{ϫ?x夶s+d)@$~sA+\gL9K_I.L% J%$":Q֠<mĺy TUm2F %fP* lh~-|bBcP(` m: :- RDo )zo8QH*hZC"zʔ$J/VJ)JRiVEbLҵMiqIj.픹,w=.-FaKx޵#!\j.ɾXmBoW9yu%g>+1 !h!BOH۵,چ%f1oyVMNB۴̧G,3cds(x/c>U CG<$E0+,qw, m9)w'yG3̕4j@1ݹ͵+Wݥp;N1hDJE'ϠqEcVMe\NKxm`2jD5rY>ԓaownGKml;<\lN$9Oe64mK:tί|n5٪KH Tfs2ܙ9TS2 (#k..`Tuyü94^Br3+ Ac8w\;r\O0(+Ʈaq7qzdq1"MNW`) G4A48Ў4s2\()͂. (e$jLYEr".f+bT(1ramfIײ5LI K5o>KВXGJCGk7Q(skDtwT£c/2~cAPNSS;xF8F)laY6:0n7c_&?3 /5#mm)kxᗞM~#f͕钏?h~HĖ#}_GxwLU99Пn4U 8`4zk' [QdupQ ǡ܅ 78Jp^Tdv2=pXݧ?Y]۷osD!Q+0- ~ f^[ <|UkX1:52ӌe6č]ī߭^BGΑwP$~"(+Y[ "p>†F^øD-sRB8ncL4=]e H̤t $RZWA Qخ=(&ߝĀ٧8n1:LQ`ĠEatAzZ+R{و'#zi`ΝA[%IZs )!Ht)T&ԘMGTt9!GY:'Qqg~|PP0m4D@n9i[G-_g|./Hi,_/qCx1dhʍ+K3cgWعRr –7~}ܳ|'LR5޺K/׿е-A4G:1F)b͗^z4"mT\ywo3~[ORp_`4y@(9`7y-(U?yqޣsRO]Y%EwK.cV ЏqHʨ6ޤ5oL=2=E@d8EEX<2<`>P؇C.Sja5|#Bqim%1P 6Ұ%UMt.֍fz|VI*$5 A wG,%k JL]BߦxcO:p1(S RH ѩʛ$*DI]A"[.8&#].9 9+Il&[YLEf|St)1'NDVϕW_#uyOHUo kmbLECdMӶuQUP, jERUf2N}`bdqpDu޹bzLhh1&i#KsP$ IDAT !vPSTlZpl'}8g\ayH\9kj]>Ý]fb9sMBP5]APD'̗,3SD\Ҷsby#֌ֹp6ϣmA sqcBц},!Yb$ 6ycHbHuiʂai%aI:yCa"uћç4])=h 1It¢ 4ޱc:_8x( t{/^$HQ0aw%~_@[}~ *i|6W_|Woa( l]go *!?9Ɯ 9M0o1ZyadQTĬ1,[L*J247*g&px1u,rq @hpg/a ^%5~( z&6qO?1q{;f_ywgAт PoO@ר(V5:vD4L.@pL|SOjn2o(\j7y?=  w#~ rQ`;_oKnk"I^^k8=ܼ` QD(UIQ[>}L|0/~'?=(.Ac{E$t'l̰P%r~c}e>}ԃӯ8Go];?LX͂vtygMt3FґGُP} M\ ,X쳯^v+*Gcdb}%:{L"O7F5Dq:N_C0ZtgW?9X5{9LavDE_:sxЦD9MTSdq(U#D|x7֞{`t*bzFPT$Kâ CgeI PH$O ,@bH)c6;MuQ"o] NL_4(DQ /KMYZdRS)(kh;BKRP%`"K|O`2CK(";$Q?gqHt)|Ui1099P>xJ Ua1H:5G*p0EO;IU%ET5qqH8:=,) 1U"ku]QTAMYi~}J#\!]nj2=5^=ǿ>1Ir@ŐF:Je+Db(c{$ &MRZ\ DpѣbH)h9LX 7E ڵø.VdI+D7ڥ:Rbs>BŴ!3Zt1D*}^⑐3rkҡ]kJ8QǛhcVC|KapPhD:"cEQGKa ؞I`5[|gl[Q e@$.ZڢHdwgy7yn.;.j}Ňk~񸛳{m),_x?8;^9 Ik,f 7.WJݻ׊Ðw~Vh .2+LH` O'(xvU 6-˦x:e>q5whv5`O]w}hs{h+}8;bRL$/ q(FE]rSC h *c$RNLn` 4:0"R0diYS#w6rkqz(ɒK[Z#P?E(]9J@/U Mz1R4uj^j|)uctڂ(Ow0oc>tZ-"NlLVƫ\ 8I~Z$x Zs*-z!HDc1&a`EZhzPy&u~Ecu޼c:3Ib]> GGach]ZPLbulmTY>}~L?]a'Cf E],-\M7*bcg"jMO8IVc\=\p&)R9G\8J]YQt˷:7yX:5>u܍}a2zs G{|3y۴փ蹠";c/W|M}4ԟڃRa-AYIɁvOmL(*Z8:5wI|[loosxx`l܇ 7 O7^=i>jz lyF QرLTcC Ov`)pRF!:1O}9;o<((|YGd08azɐww'l핐aPù-CcT W˟>@;1;~<7dh]#Rd8Mo(`ĤD[XIVlN. $#W)a L th pR"]H$&8Ea5*Zݨ8u,fǴ͒8!:1X@TTÉ4~(OoD*42sZaT).,ZVXS0Jr iM9OUuE]Uز.KUIi ֤x@a9yO=^*}?(Xgd>~#ڨ|:CZgɝ.%zPV=`{{믾Ezm5زl;>36#㚁N ٰ3K&Y͡)xa}F">fiNZ- ك!4!büm;qtpD{pD8S|ˎn>Ϧ#;ogh=c+ʰ1,I?mRFIƋCe,(ieq3weYt¼]#$,H U铢r~32jH59C9@%b /N)&~?Ci9 S6њOAqE#BmĔO:pvLj㒡):X} [hM~wX DQ%S[aFctӖde S&Ec"R+ ,LD+H2M[*PB)XEQ(JLmS<y5/s{Qlmx~yEdJvNɝ(0-G3l;~:wvt, feHtFêd21*BSWL)u:uR{x:1ۋ з Bj1Da%TRXVPAh874&6]52ҨV1G+bq}l^1l]&+%<"4qsĸA5247 z"G.^jV)>/~O3wAA.g qHT&u+93`"-zʸB{f)Yy:YFe{y. _#.:tN8zc|т_u-:R")$"a }qL_HK ZSSlqӵX.^8;)GXP}ܿMќ|'?sLg xQ9^.p /郴eQ /l>\ jPu=}iũe)Q%;<܈N5kq\ykm_y-ޑ)7 uW(@a͓>0;;u=>>w2Z"Fp 'ӟ ,-gǟx})$SLgw{o{IJYҸ.;s:1u~x_1XUIfxK!ѓ H= cZ0S*)m()j|Oɞ=&CVP7AҖA5"d}y]M6?@5RnA!P_ :HHII"F=?w0 PK{ XcLs$ɩT1)V R*<ةh04pe52T[RB>*0[X J>[2)g^H RO΅sjZV^)^=>z1kVǀUL[\wv6i-UMݶ8:<{;Ļ)#1XwN ( 2# qܠJ a8|Z1NՁڡ}ѣݜs]Iv5.R-޸O)| lfp/^ ]:6Ν)-=y<ٵ>ބ%`n{0SOۖGGŸ\o[>0z _|x.t̪evu5 hiNq_,~I[׹GD]ݗɠ3O?mF *zOWxz+ol{;J$A+r˨cګ9~Ɵ=w+`p/E&OقnGX@QX+|o/W/EFkn?ÿN)1d&qx|<'Y QAiI,&VIugsEʏoL{atV A IA ߽;o+lgᙣI<+OY a ZSuKs%+t܆`!JSҫ:Q?9W &K"$ziUVZ} @ɔ؜o^묬9w~=B^-6*hh(/UzUG4CUV殨 2rcQY@Gp5 ZQA(wdV,QFR_"@~Z3ѵ*EGY/^Ac.4PPܹvr@9e>s[dhETd a ( 52:On JgFلh'u1m V(~Wʵp7Q!b!/ "O_I'lNj<hw}0m2(kɍ07O 9f~nS)C, ʲCf VEBQB$@5Z~f3jJ1Y]3Ҏ[<6EKkVir-Ypcg13FUMU;j;R%}!}M"Z1R^Rz%N>=4-lb)FH$h"wަ+> 7^԰Ӡ\Xɘ/|>=^|S_;G4a+Z|ci[aFxk08x/'xEvlIwTya[/\{v饳L֖="(l!{oցP:b> L8,#*n 3[~a=TTYҔ6( O1}J%jE yޕ$P {y`yahsV1t^s "Kᣄ0(NY )3s.G]'fRɿ&񋦭L?4 a7J<" R1zɘ+ ?y\PT`KF[ct8{q䇩PSR&yT*,FSK[7ȕ<6f ;E3ft"eBBjFʹr:eAS9"[ftrKΠ 1c@Xp96YS ЖMfܾU0h#8TI0>Q| A E.ɄژaksLg) {|H )Q >,0M$Fs5uc5GTVի;m t$nZ^^p~U:JN;XW-hD3i! zD\B뱮O1gSuC=u0( <]tlEr؜v+k &KzUF3qDk@[ X }Q+\<*!JwhN!d dyd1QC([ܨ TYcȳ"YVbxwj٠,pMlը|R-шVRHD㣍Jhlam4ΜtnKY,[<$EB4}&MCP(H2'3$1LI3oEfJX\!]"YdƬiJCuM eAK[+{Y݊.?jfWrfmaWsTudֲ?i;GI;N"FZL x?1` =\PڀC֜[jVքI,ա#bǧXd͝~pO|Q6g+wP-P"fG5 Ag$h`X} _ݧ F DQx`Jp|6ٜ|̉(ݚȣz :>`_|)zj7⨈:G/4ݜ7mb۽ϯ3@8#L2ͩ.Ѿvx"&|~LCKVTXo|jC6]O o+=s/l[?B<([*Y~"G?| 5mi^{/94XQԀ&7Q>_S*'J9sw&g"9m\̋1e`u}&O3xȷnq9^xe~=XEN1jV=C"ߘь)a!kZP!ôt,ǿL2NPjm@R3nI\UPVFG{xQj0ȤEx׬%WK)hO/Yis_CLŋ*rGd-58oSR'DXMm3û8y^ItJT(w1NhH~Bɟ=30"% HRי3m`0DI Ғ0k{WI;9F wcƇ#FMd+u^z~KG)#r%fa^OFkz^zeF17ٹlrDn58s Ec>KiD)Œ& e2F~ڠ5LShiuC"6@ dP(QtN9NXlA<2:eF) ya9<khN5m$q' Am4EnXcgV[)]sUG Os$(u$F'FjADdF+- Sv4ٔOb౳}95tT U)yyt!35Z1Vs4α :D(Cķb+rm4UލwУ=C[v፣!`ͦc-[.X\8`.-e#f#Gchj\hXYAAo3O[N'\=hjƬcn4wd!j 6`3%Z.)< hWM~(%HDvPIk5N΋fT&Ctg>=n+[-YtŎ&*qm%߻/+z3i6ԤF'Jvsi=V^,8#s4}!>9:& t;~#R˕ӆ ]dJBZ168jv00il sGv>DCR)N;*1B$נBYlR%@yWG#ZfQ*2 ;XiNщ!KOC%>_Wo@ZN҆Og5v6O? 2(6D2FIPAuΜ9ј2sg⏸}Ν;ǥ,XFGUKXi*I[C+yJ*! { R;Og)Lg4改Lx2k`M=nNQFk-sEFT5>D|ڋi˭/\(dED[k׮^V񓏏@Jb$ʎ8Hc-Z @o@;Z;7v0NuyvˆI! p>RE* yNn 3Ոdԥl.%ՖK<8acbSC+ QI QI k.̙uV.QVqp7ٹyw9`ah5E.)V^3୬"Mt5Wxg4ִn1AT uRF P%TO1ܠ\"'Z1mRLx9zev I"îEe|8Vhh5^7FEeqWeY`37?1Ov.)lRO@$Vzॐ.xtnq3O_QIkKK!xQF\vy+4:>qUvܒi̢&i\Y|'*YK7?\ 3C<l.] AP:)з* %jb$xOӊn=w{8!@i-kKKf9ƶD XPYɠ_XN]Z )6UG1#\rRL2G8:s9Лǥ*sq(n:;6O и@jE-`o#jkPZt}%ҁ&T;(v7>b*ɿS\n/,5K/]&L-NfԙX'D;CJɑvTLܙ ~>G1nET1A6V)AP"v_"iT6&YCxP >ۮ㫿n]sZyt=CEߛQ >_'LreSyh0s~]M)qw_5ÏeɋaUt\fks#m%^dP[g7oǟ_SV\d./08W9!dS`c,ul9p026'j| TAbUdB^DmY9?*pU[UoK).{ʏ^-Q=s4cu[Ƶbމ׏KTWT-+Cb' C΁cx]X&f&?nj2K>u{@E81}:ӏ7wY* 9g\(:r3o_^y/IT!QQv YmܤJHJG 8 'މwu$+$=#L$dbh lGuqЩV5Jșڐ[CQl X{nf\ܹq'>$US3 lnmq)6s\X@TziJ6$mU h"1K1 VhotJʔ䥌1A(䥺m>'F:6c#[9A ]1-EftKVWlP,a{%npθ1mҀ3K]1`mThcш˷wxpNS)vz]kidrq,둯Aq jGf1V{m {L5q"{щmGT2ZJ⬴䅀tM-2 +6-.b5x2 d+r2ݙl3:u])H[bֵ)T፤ɭ@#>/3b5dH9u@(1i}iPF0֐66wmnl9M5C@0)?M@yɤ1rɏ(IQ5Es@Ҝ'#iŐYE.1D T4MYDC[䄨(`!hZ6/D4-Ŏft r7 J !*&"HW)zg46yKEQ-@%Hpb a\%Tur;,w ~S}x^Ǵ ޔoΗ?MX%vm*,+ov*™UO?w>/\a9UYowC/]u׉A3~.[(SːeMwmt[qg;B]ų֐o-ѷD/Dt=Q7\0}=aUq.*JQ%1'uǫ"NѺ p:.^ksӵP9$a. goB6J~I IR~JBYXYԟc>TFA'XXNCƂ64bVDFCyh]>Cah3E'*8{&΋2{uFcKɏhޏPk#y ^WrxI0Z0#V3bfAщU [)tFu fRcJܦRxUQ1#ux[y\tQQ0p!f^'L07~s)-`0y  E䨠F[[ʐm+s e Eg mm3ɡ\yAL+:xrH]'?l6hшݻl_;]Μ9˙gi|KhXY|J1*W2|liZj~ X,Pb!jKi,P$M3fhJms݌nS3L--nP°t^?4:>'C't.&bm"̭!|UG'@?iɞ#$y&8<*&g0S˧Yz(,O3T㨼xX"&F ɔN@N2T#MN9̰rTs01Kna+4N])dd6(sz+CPA₭kNex|TbK,EQ9eUJy IDAT`4cuu.rU^C'l{o/ ȗVX;79k\G7r8Pk]ƳGGvv׶i GO[ 7nn39`" nN sIR54mK 4 %?^*t5ȥ#9H"`B'Ӕ:2*2L8<<ƥ!GT>rwi&IP>Ѡ;FAb-)E󯙗JFI0P،P6g? ɹ@ :q[J1}Ҋ'Γ{G㵢i\X |~A[heTvm:=hϽ­/}KO>NnR!U6~9J&C|>[otĘ:q&"ڳ䃄I7 Jĕk̖UjnMx/3gyqv6}:&M̀ǹc+-/`ƁS,uM9\@/wyp,|٧9GMFM>}}~/}veHXi36Zy߹MY Kl5x{'> ޔujknb{Ur_budw&{\A*|T25m4he26ycv^;YrM5%r&NM[D>*m#=>10TF>]A͂fJ*ʂ!w;zp{)pyCKNX[!}MPv2>8a y>\`s޷"v|Hk-j1K5F*>xDHcY\Sa2s1'`$}C>ҹJj5P@kM\Fa§0>)Zlߨ4k%*ϩ2cG.reѸe>H\I:@pyܴ K$rY-3Jt3hy;7])Mum^q ")a6!xOpy E-8T.Ry9!ibٿP/%t2(c,фn(3K#3 ҺiMp.$b c!Ӄyd:n݂OgD^t%1ZQc5N2/0 tZkʼ7m- P*diJ@9:y$)Ȭg6'@ &ђFrw,B3d;Y㨫rDaU$7c[eS ,(Urk=/$-Mk\5i>{e , :OXe$Zʢ,:6NbXɽ06`HfUh];P*g\[6 ?:,R5k 埁 R\ۂ ךi.{D~sZ+m,UI;Dshք|r5`s8iyk|wx_}cĶEEUtWW *ra:C}np|wK,ӕbBpȅ1'Tp !QR]UW&58QA|?hb4, =C'}6M[哠D>>TwhZ2# 1Yb$4X* ^BsMDl/| 3 _aڤiKx2yx >Wϻ9FIkSH~j!#@Lg3BhQSd%U>L~k!F?fEET/nClV$Os?1oF]7g(#CIlQz.wLTfG%k2`Z@j@7O0C1 ^{Nwis`Lk<'/ LKRS~ou 3Vܸq7x0kx[ӥZ Vbe `Q=>Ruհ-g2}YC rA<$Z4^A"tzqow`&ESQm0v(:p lF#BK_zvwՈ?vuX! yf=IRKK+,w 6 QHTxRt nͤl^|)~m?|U5"s3b9nO 5U%%W4:*̩G,&Tq?ƦgL:hGc=6۵{˲<7"2r̚znNMD"eH0`mB&iLfݔE5bwWwu\9g7g؃?}*dV6p2s=gz׻ޗw~լWnzg(v+J$yv:<<]h( mr`4`;^ Zo@y( Wtr:ULj& e ICn^Ӷ=F r0*-#ƺ UiKK=hqe|ɦ*yҦ-6~Yl]RLwa5)]^);RWv*~r*,X"8G9Z{fnmX:HB]N!lqTQ|jhwڊn~Kϰluy(,W I;#vwwúS.NNQ2x(z2to5Պ#ƀB+QTՠ6zT32M)ʚӯln*;PΌѨ&EkV . dk|YHԆH7R;i[]9U : eI4.F{4-)z.V+EHc h#mӲj՚jMuCt\Q:GUX+8(;^%јlƸ0֡tA m3 ڸm %PJ̨2X'(㬰 j= ,Q DH&c2$jyPlK  zu{'$BiIRDAYk $(Dbe?GFă"]I!n{lVO_}.^#RX|$jx^4&&CDK?@=tnw4:Y~ K|t.\t²_˛1)4 GdzD3w1j=>fQV*{{7"z='9'+~mJ"HeT#o/z׮spcy|zE8^C=}*{mCVstpj9 p:p{q ǀrZ^'ߟ(,Qk(hhOAJJNV6tF?7Lv7_`*MO_+r 1G d'F|u~:&tb<.W-j\3lp?4 Ps <2&Jk}'WXx#Hը Q-kC+!ِA`? ؈+cqGkqgy/='EG{. vaD9ݭI'8G=޶|Kq=bծD 2Ĵ`SF9쉗Y3dG`(tF%l}${J 6 048Ҧp.mh,"Hs悵ZL,L@i!f3b]fEa4Dh\huރUnWj2Lo)&GZc4IMTl^R$$)mA]XƣEQ2?s꒦i9=9wGoItqYgbt4iih ,ڎl3m/~fS|nZUZaX#c4Jlt=h{g%w.UU)҆4)S}Zg OrlN6ȉ(iF;9ξg%{1}v[8ۗJbFXAZ%(z >ie۲[Ljä,0*8 .(bk-`wD7?xp>o~}m9Ɖ[CYRIutZ3)(!fKLY3B雎5U8WbM%`XZgX_+pzQvs\`1,'^F$엠as_h<9VY]| 5:xch>ᴣ(FhńdV N$iDkX-/>}FeE=uY`UB( k( Qb2a6Zw2絀Тivx$[lLWXqo`m%q`bOkf1)DGl-!`],;)k%sRVQT9+l}zqBaXI+::aure?޾jcwځЇk&.Q5ARu;tƯқYhhYZ甆dkBO5*Qy~icD,+3S5x]+Wh kbM1y8~.{*B"ZeIJa-\ݭګi-uKz.VŒ=|tɝ_r-b~`lGS$Ib 1P銔(8s:ӚgnKf\1*^pnpm`)=PK.cf]/P* CL IDATw⅛W}u dQ9 8PVlSӧ=ݼ \1I|11Qia!xTP;˞ф+h}`GQ0x[ y!.d1EZBbI'Y۠C2bODeʥ AR~6&Z lÜձ6䓇Gbљ7ј"!@1x"+rx| aDѨl,u~sgF4Mi N* ֜1Li= >pqD0 q/syľ#!^%Z16 +Bi*2r]CYߞi@cN秨\wUv1%T$]ӄ˦{YqhG>c vD;.`Cb2QU]נ%Ğ1r5hkQ1*k& &?1,5<K6,|bCU: :KCgؽ2o7uHFPUHiHI|ވNӝ<".1)t!w!biK6ьAmVlZpPjr7( G(M-1RhvI5b}# \n]$GAaDRk;:YvuW\y<<<__`G{G^Wp{sXҝ?"4 q^Kx5Ngh8/ÃUx4my@ߕ6:-6n|d'!Ck'[CT=֦'NK`?u { _fh"m!P_2mC!9<E;{\1g?'F92hg3a}ɢ34ʱnYMVSglź, y8 o)]f]vVh^J;)> [ک1 5_R϶U~۶% tOKQ;h _TJ(/t}20𫉠 U&/ '*e7O9W#шc8z㕴IΛO_Fr+H8p @.l\)+I{DtbR%KR7G)*!3TL鄲ޫ hdڧK)Z6dam!πK6Z:>.?C!g?PEJab 7Ȇ HRΔdk]hs:JSs=jՑ|[v\^Ь{Zg-6%0x/NiF.H'3@1geQRa))Nrte6a\!J1Vc{~aB 4k.ADa4WZ'fŊ㴋6Ci |c=ƣ x)`C2Bw'جI^V R" 3=x|a|;b'ȁ)[&;;T[Ѧ"%q֗,{q֋vD%G͢4-'k-T0Yv&qr-P#AH  X7Fc0ۗ&M1")Gh-lgr$l|mZmX'gT !E:c=:wĽI@MVV3D(3[`L 9%ʆ1  J(W8[`rp"FM5hj%d{e3Pl8iS}Bk4[Ec$rコs DPGNh.V#-B:܎2.A1a.f\9O&%tLDeE;ezc@\, %-d&QBŒQv^@쌩VՏ fVJ38V ĝ1` Y(,Ѻ*%,,IE%m^$l)iJnfB4F,B.%\i jN֪@2%UnΙtRBZ]։?o q7<Ƶ {{ ȜU$O;'E' FD!UB+Nk\o/A nMCn[i9ߵbr\j46wm bk .c'e:r̖eXnM2AC뜯8~p?}F[@{~}r~'zZka紁9 -Y()qN\Ͱ Ң]:0Ae (evf~R44k`)eF3>D&6II@)ǶM3F9Fxx` IzIy!j̡:Kk  *" )YI$f@0|+{F(Il/O@[!e 1ޥS>|s\(11Z4^g9 ,֊^Wpg[o#-vvi9G  dJhc^R,^!<훗3-.NJ~\atk$F\x3FĬ+g( #JctD+/ T8p&b_ˌ@Hsy/R(ܠMx_8SwE2,/)@R0Rd2J򫐞Z&iQ軎F3vp8D|+zS` (K#Rs71Ll 6qaQ\{=zd2ꬿ,Y-%DM+;Rh)F#h1miBg :tAS(шiQPi S&^QFHZ*1&|aG>Woݢ1*'^,0'-#İAFKDS"FϠRʺ5 'Jm*N!pO$]#vf:NNOxX..05F7aP:p"o?xeGlʤ.) }dR:Wk|z[vj6b6K(NZyx $9M͖Q̊w%MYhZs~tl>h=`ˉ8A@D$z9=3_`20@[:$`ڼM6:y1G嚮ϨI1A d [ m߭>x9:YnUv,ʂ*2+a(iPzBQ]̞' ag`/g27ܤP{QK\QRQm=m˘:›|7st-=*RzTL|o_._qoDOEJ9;ZRlќ|jJ[R!'|a]Ae=Nh\YF, 2/.hyAxYZgGV"Cז{~ C)C݇/DfӶ6[(L ru`:d6) #N.';Ͼ05>+ۯ3(3;38&d=Gz$M2G$pG@L" L¼XK@W FhT"RL&)ǩ`| %lEo!(CzwC+itqT2[X6TuͨepJvaN.Dqӆ9'\Z>g[cVK<7#zn1Znz[)4QTJБ JDπU K*)IkNq(k ED4ӟ5@ƧvIk3>wu H>}^|!Jƍ*Fa H Ԡ)qThF:h=J)ʪFYYq-r1qlœ&pARX;z^T,LvB-Q@rP+$ &T1!O\9_`xLa M',B]֋hob`4ATwh&Lfcw)hY8Қ5AId6K \)T`ǂKASPn+ðܻ\c2|~ǏPYhFGBLEfBdhx!uT8_OqEw }bk؁*dޕ]THҫp1Mںn tvu_rGm-,fd1qgk iƀh-.^E]3Mahk)"WjFIKU:@&g>E ?x nMPZĚMVRcimrœH!0$MH.̈hJGYf`#l&; [1e h'NcPi+`S VF*Z1UM&j,(':tD'w @JPI6G: Ch0;tt{K"4Nyhu|m~cƎW%V ¢c F0`!(H3gNB2A 6ܓ4P@ՓQlIþ~"0@׺é2r>x[otn =]>?*x4=l4^ K5!ϚpJPNG3&DO aM#83<|l(KVEk1C&i ܧoRXyﻏtG50a>n~M~q- [/suu!_|?w_R JP Gz)lE]&l8:&ʳ߾·dq;|CchMLШ1kRL>)>EUڼJ@lTCeG?7{&Ww%Q_ۅj[s 렓[|c7G d9D?,-A_&@UHZo)R(WL!]zjz%CH ch8͑\cl[2G6Y Qġm@q1H@iq%ڈ7FFe|~qNj{|{ҮV"5‹ܼA]Di&ԣ)Yl,=m gHP(Em4U]Rقt toטQչB<\tz(% Zw>o3MgcS*)E8<>3(peM,ٺc.HH=Ʉ}ÊGq`(`mڴn@ 유Y[ؠC vOJ}? cwoMiB|O* w3 ZaB`\Դ)D)o^V#ŊsBI:9`.'k+aB(Ѽ1aE˪<8>rܴ& Uq[ٿϸDdUMLu۱ u)եWZ1̸>cjb4I2 Z9XXa"F% >%DV>DjהʵBCYҡVQ^%@֚9e@b/Pe۲A8kcbXso`fI/7~!3>RFST|6ʥgIBjl\s/yўln}j{l5A680~HJ*eR+N@%-_J cF[%D`pZaFoUSؔ`GDD3jbTx74& +2N67c>CDuXʮ zT[Q*ɞhG4Om-U7=zuev50 |Eqb'?|oxtWsQ &)Wp[oP@NIح&ҔW}V8lzGg~&Q{ JIԱo:'N~k(Z U'|J%8T ;2ef0 [i-^`R3CRRhAQ>HPhm18BKE:X{%qPW`cwmaXZ?~7ȸt|k__c2.7LJr"11|U9_#^:DT{q[8xf0W<;w9\fuzzgqr[H^Z+KD+)a(-^m|#tm/޳81EQ!=c˷sL0@?1]EA''=kPaŗ*+4 $ZŌ,6K1r wSV+ 5TEĄ%1Ge՗y~jwjgR6=9f(O [ůaLA]#}>ʼn>҇HYX=w8 $EJ&1HI`hJzu1[:QoZ=BZC繘/xFܹ!q4_plHl%X̽:DT臭ۈ)WZHv6-pzzA۵h"Lf(+Ѽc\s|לDT7Tѣ_!h)D0 ,uYXhy2Ġ1QB7r)=~¬#6L÷f]F6cG!'By\pg5jj ) [Rk53wFj{b Ը'LcN}| rAzVkOzT=yݰF8E. @+C2j%wE.|chΔ%X)LgSqUni)ʭaM\pP:CUՄh{qStkxV}%mC[# 0r!1cŵ*Sʯs\a4ƕ$-v!Q-+u|H/V&ߤ \"4iUf%"g0>F zoPs~/ڗˮLJdc @ f~c HZk@%P0A/cNbcC 7']9 ww5vLfQD1Hb~( Ձ#=r\jҪEw=&i ED6m6[m|/Pϥx /;_2.6-B+*EA,J;Bc+Q-V۞K.=V P_ZДP쑘EYZ>_(,ggs>~)ItbEcb@(%hfѲ^v,W+bݩ;XC\/p>6jy`$FH"X6=)̚)9aw:fT;9_zBY7E]w%aFYqZXx2V[GkO"}vUR4(2m,>z׹]+_LܺumBpvȔ\FT<%9 6SX/H6u n} ۴a԰elLj㶵 0oK{ ax&(дK}[o.R~d0Io> %ǿcԆ=dJZqJ(jX: AZOIo95hpԒn}DaE:\i7:>ɣ|, =s &yʔV^<(*D){p<:i乗%[5||+7\{-fX),m6|K_\k΅VRD6DAZLG,P0) KH fb +9tGq>R$t IqF}Ds]NeP\p"xN0VX {ɲ<9۽73u{6jH2)nH[hyld6`lð ڀClImJ?Hsi3=[UuuGdlw9s#fH9b7٧UQDE{߻0,ɣDqDK~ Op6;. %NX ^Rf_wQ8oȺƞOx v/s)(P91=:c65Ҋ*IQi7yw>@&h=-ٴ ͬn]{ €uSQ XA40 #~ko:Gg<~x rjۥlX5r~Қӥ:HAwZT6,HûK${1$k7|n^X)9?z@3;b+w+}w>|)7Wx՗QZUd\053 ٴfq^<>?2Bsxp<[26jhcF !^Dh$FK~u[{nm| "ӼyM4.Xj\8~ɣG(LK'>5ExxTH9oj㷾wagg_~, +XJQ]ڸs bTsM |xgYtXc5}ʣ'x:f ?;:=b֐'ՒGz`gf| %U=Go׶jC! 6!YF7SAP1B" E6W-g'}|c|Q\O8?yٔʙ]˒*MLw@s9|1Ygs#vn]1PU}Mc β Fټ& M:Db3B;j3ĽĈ(ݔxTFI2NlY%ӆ&H&cŴRs`Etf zY2Yj} hijJQ^6S)t iMEK?@x|%J0P.}.Ҫr o6J7Zʹ<iߟguT(-їSB Z8њ5HΉt.e\ @xp^$=Iy}\+_fFSQ|!PY\GOar: YO)҅L'W6}u:9<F;G/VﲢD6z{4=Ц]r4`qo0 P E |0REDLM dS6-4^)8!!rxuQ26K^&sL@@LҁC#.P `Ƴ YJFCx %!͊!AQ+ )G rtp0MpcEV{5tGwC>׭o0Ψ˓'GePB0 Ųd(Yyt6g,/,c9&ʠA#Ydht!@ruVUt ( Sr~xDs~ƕudZCidXLϙkz :4SZ>z6RMϷK.CUt1@ !T rhԁZ ?gR-&}jwΝ{loݿz3N֫3=[Sxm$EasES g *x ߰=c,Z0)zIGF"1!pDm_ʷKKir(PE?[E V%.I8Y.d,Y@D2&!,}4nx!|+׮?nyUSMMj*6SCxH>EP3wh;C 3RVnI2zZAs8d'wabJ…vոg>ç}  U͢{ eIr)Oש߻ܲkrv;9*R%NFfBK6XP Wn]e1Z(ΎXfS|pjVǴiԇ e{ G+#Ȭ *BV%k$_|*XЌ/7F߶LQ![vZΥU2]$A{M^*.IRG! +駌Mf[ uD0U44Hc('̪7o* H'>`@A+H.2==*9+BQzyr~q,@N)~&63tGuAp\Yx>7st9Ɍq^cRt$Gs^ B@9t7T=BlIH&VVKThq^cDA&sPXY3 L 5!Yk#IOR\PtՄZdZ㼣jf(m1Bb2C9"<m"V6X  hcWT#^x4hU2H|FAweKNe1}?;.m$ ڬ@/ ^mJCMLO>8ⷿ/zk۬C=e7&Sn2 ;2{Ͻ<[h_#s=d9_Wl)gKF );/;] c:~pPH!"yPt TD_ B$E q,`ŗyZ:9ڕlm /SU(Ct7Xih|4R&o3`1dū7Ld26Glݼ EH@FSB@:[|jBw"DX5C!m /юFK=k76>X%2R4!T6(h6b{m|LN'_5RF<6&X%pA$'Sc 4oe1@^S%q^4ppp&{\O?SyzEHl!hzrrzJikES(j)%E.[Ʊ\Vx`TZ?1XE{k bk2=P&T8',0R,t},d&V1Ƀhe^b\0*ٺ`|;A\i~X.iwub&]J$/ʧH{7(N[ji0Jc@hqS"i4%F2=*ṠJ@jCU@i1iuFSՌ`k !8oE=_Ⱥiy{6( 6foWYsmɒ9:s2> OW <rxNPrXE)W MЫ BȅgedQQw@u֡af#*X Su&Bh(yLz %c`DHxp!Πdv \O0,f-bfV7Xp T@R"M8OJXqQBF'Zxjg1m!R:w5f% L_1i2"рKf1AɂNaceb>5ЌֺoL6ԕx ~ Ⱥ:JE@au~ʿ_߈捂~lC]^7nqN7;(K;lollO~.B FCDŽP"M4kW4Khyih$ ׮]akk+, kKKcYXR(Dݡo^aul:;Wؽrh#i=Fe)U`L0()2Cc=GO%@Ȓm G|_@ɵBjX FTOU1c>o_Mmw}+[ Cg4.մr"%%"nt;(i$trA0ӔKzE-rRR-kNOxSXNNlB(<@.6EN "F+Ak0C]r +<ms6, %Q, R!;=:-n1"HAKAC%el^ʸo(/ IDAT-&< E"*~Ap5Hb]d?bcb}kXr E]ZsT%KoY70 2* v$x$S4Ha$6ɋ~'gm4 pMslUTxpR5"&+>zh42%&dgٯs0zOV⌳C֊l,; [nr耻1o\)GGll92C6A{0 Fe!lL]L'L ^vxʤ Ѥ\Mh}6{Gx㛏yC~sC5Ll|Naq~ M 6MEL JQJ@]YddR$(E>Xblb\uQNdNW~schN.>-hbZrCx@>_x׿9WRJ$ĂVHW^}^ C:W(1:tVDlb9f eɢJ\qx2avoW`uW J[;EHJ} E3L)BHr7"Yi`)F؂YP73և#jpHY&[_gTR2],xu݀O':NE REf)'(#7Ts@(Ep-B)u>)f Ŧ7=ɓGH<,YsLfS888MN +#@)v4E)PBњaQϨ? yU}uʲGc-pz>Eb6+)ˆZIJp~:HB.*Ve UZfEa(rZMs6sp !ڽd*1{&g3˒<=a~YXQ6 y!"LN(T#uΤ)3&gȳBhޖ@J MzV̰KBzzkECv:22ZR!mqʿz浿KD_1{.H~;h[eȋ2q7 Б|n H^LI[fOPVD0%J(2}4ɴ&Sb1az[l傝=b[_C]SdYNudGmU@ ÆLe kk!^/ԤNkD+s:?7<}cKlK^:PƁu"ܘx[v m-xfXF{2PkfR_~K*2(AYI04QCjD$5!i* ˘'KZ^-"փ#ANi^uL=Ea>>z*1!2hh]H__,89 JzܳOfٿqc(~5g|6f\/(sm9e5|.yJ2>~Xΐ|_/L*6<!QL"i'_W B zC4xAV pS(= _k0 LO;I /P=WWޒV?\ʥ  iZ qX!FZ MmKK]Z>:_р瞿k_x!ʹ8-$صLz XE[v9\Ќz!շyȂ!,+)iXLg<}yݜ+n2=0Z2K&G+[Ƞ1J#"6Ƶϱyz.5 8=p>]2 IU5mm`+Io5uR, eHOClt<r..֏W"M<Gp1qB)!`_VeTq"DjnRTa?d\5`d X`x|2=:4x_BG3=!1ш5cMdͯ/|˨% bc=H4 =Kd!9kq>\5y,<{cCj[X@hA nѡ?(YA1V,kUe);Ke #ϺHspch‡RX7.NƨˍnN ^ق)Y`C2Õ-łe@kO{QVe{m;c{G,ɳG 8~Ac<.DFDFF'4v&}쇏ZyU@ 0RZV%1 gu꒴}<=ϖ&W[BZ Xy*ȵhFcЊh9o~3^,kjN ʊ/>-RRJLfTc]bBA1P;&cog((\wQ$=k!̵ƙfƻuȵ<՝uoLJrA=d4Bk,о2GJxW_yT>DdQ{7Y5}? }cpZ9LY|0qN4 WE@YG谬*@% )̢rȒJo"&뚴YImPh<["P.JA'.dqB.<I,#)dkSϞ\C"!ZB[צv(Ri*Si -?j{g79~2׼W{Cghۊ{ ޟa0Ng+_z^q~0cz# >颅IX>>_o V#2ϗ~e0Zs=ZSN2tT3a !zFj@08kch<ϸCP I }'΢l@Rbfd1m@! rQ3w7q{||7GsƇǼ[Ӝqɬ*Q.Yd`lmns+4.1[{p|tK$&P:,)lGmio(1HF(:G!jp'K~.}G\+lmEvTI݂GG=3["ŗ |G@hq~T\@$NSgNC3;X9d2pKs,O:6> Y>zuɠѕ#k7 tf uܖ#&(AVtOeӧ Q iX45Jk:j(DKѻعq!4:=QJ!5R$ 2Y.?R JybB&ϸ =#Iyt G4U[޽YnOq.SH)ot~o͘M+拊lلLk:/=}ʲY㵗ng=ne$ѐqK\>&y0bYT, ȍ$,%;ry{.(#FٕwXV'9!K鱱yP[+#BkD8RցT<Œec$WЃ0u;\֍\y^CG [ՌlcS4. 1-D:6);m$5!E!Ƒ\z1 RЦ7^0de޴~l*WҺK Ez׵}y{9Ծc/N0V@L 7V{ $ee-#b$ (3rk3AWzxtfg ;l_c -<-"sk9}CMcd(kyHyHzB1&BႠj,Nظ O2GHme2)SaMmϹ{r6'YN&<7:/ݼFi0I--snw5|H:hQ*`C,p"ȚaΡB@$Èg)0Z$v.2qT}.p4#櫆YjB(^Z$2-2 *pIfZXdHIK`|J/+"Pd";ByYh|@64`:bd2`<(t cp>^%`bFB"}@xE`"G" ٿ4HAvx:^mb>f܎.+fDVx0ƻ4Gwx]C*lݯ1\`VJ`Gp8.y\uy+Z$t~7Cˏ E_M:{*f W=#6׆lmq~vl6: ѣ+5/ZZ~ċﰶEw}H5y -,kCfLOKm*Bh RZؔ*G־#lj ltQLTzSlݺAؚAz>enw/prrϟ2NX*, ΐCe(e"J` یNhNN(:^&ԚF65Ƌ̼lBPWw: sl_뒫(Cא1>9bz:.~tK_LNg%ZHA:K`}' wp=F@HAuQ)ժ` aà2%dH!dm"{ꦡL<=ll{uW6n 0B0~7~79ڐ?/Ğa:k&kk ]f)?Ϣ\"m`=Ȫ^p~rB r.MbuYBMPJ᪚~+ p|jr'˚fe9,Zb9j3pRQt.Rq.FllՂlOmUc)kC`:9ZZ\psپr6'"]tIdPEja.hM2y6P %6󵱵Ed*x `: (i^Q{w~ԕ'sy?>U h쬥*KR"*Ag@cMJellQ/qBhBX4DJEgS .V+.2MYhZӷт]F.ZN̵@,|:0 L:JϴTppʋh/r>cL4Σil'FFieVy#h[Y&(Ame7BJKl$,X-PqHm*>wշV =+׊EW g&ڵ)` j_z'Y(뿝tI4(QdFA@Y"9>{_}-h+ip:*zw |pSNOؽh +KIOB$GbD;GA`}/!R$4OY#)o:ţmDWm 8*==By]RCK%D/ 5AgGrmeާ1'Θ;_zc{ȵ!C9 .F@{󵯼IGH6f!4hQZsxU 'ff )en&,Yb >w*&,sa9[\h# ?qp^7=]{'ͮw;|cYSVP&ղH hE o창px Tv8¶,(R"=`(597L^sBw-!u8Bsyy02R4:#HC:ԞIqRe/kPWfF9>:Dg=<|Abo_de~|L8%1AS BL,,ɄBJiZn~fg IDATM=>pS>zpU>wQ'85ۏy~}[_zowg.Bw.Q9łʘΙ<=:R\ʮFqTf|}㓡Q.K\`QOcHh eLP9ZrffG7hgpuB6f2?p;'\X=G_s>GOj~6V t; iѠOS̎8~+;6%R^B@  (ؾt Uf՜M'{ - zs۰,;+Ogԭ(S,pMM+,Q?Iìu,Zu]nQ6Us?CxiT3|m,!a$/$/~*28HpwlH.U %cJ{-u=cQ[=z;{G*P" 1αtH=1-o~zKُpVXʭm!%B3э,Jat,PptT+nmPsXYC4mMa LO[W4" HkeW2qAU ]d1()Gz|6r;SD GA_ec_LDf\(/KTM>kLK9xJe GczY\b $Ztci])z DZĖWDK`Z>εdt-`/r>i~Zg^;#N_*L3dJSݢwSpH$m c{:@y&(xƒ{ ʂQo-*n2xXcBHg\-pa9"E$|I?/uX4v!c̨͙OYpۏ_X;7F6˸31W-Y,dH!8 ːZ!!!W`m1:4B=<Rc?ih9,eOJ)q!2Cr!6R j Jj @5jYP %n:Ѧ<R 0xDb+mާ /P5#yx0{=Oque散8 F)*_sOǷ;K>hs>~WL ؔh+µ󑙡LX]2v9yɜ"bd 3BH\pX9>:aZ[ C; Y|{x W6$quԎ&p!@ov<;y _RXV;RQCDd1ttɴ$גB+ ~Re8!Re9EQ dôPIOI:nq/:\E !jx%;](I(l= $Ǿ1zrhl}Lm0D:m<͢V|@$ !vPMjݣz`%SD㶙p/|#Ʊ?O#Ҡ=.x (5E+&v)BӸc !qޠt'GH8>V `P2iDF!B('/;R؎;#G4Jd!U!CF)!K|PqQ*TC ,!CdL:p ,NtQx!@TD$xRzѽƘƘfZ&*.%tP(9FGJ#AL kC}jwn8 4ӆ[K~&|;T 9%[$E-=P8'1`">NSgXw;O͍((,Ve>N̓Aq`݌qQñm0,411(OT 8d:+VRFe>;T8,:E%vcѡ9!0ܻ;{3Ą9x|1zy\ɘMB$Fm-! Iȇ]+vhnhX[?$oeTw; ZlJ'KA'*tZ#>?;oQxupA JkZz&9M8TMoGEV-!t&4) bTLQO]bPm]% b|ڌi>+Z!B1we&$<->6xjww!_+(CQ*sq ZEc/FR5LBSASH{3t7Gq6m& 楢(z>E1:jR S*JzLeY!;we1 qGriϛ{ׯ`r.لZx.+uQR9âS5- 5yrx2Th٣(zH-z\러wXhX"D#>3K4Q/E),A"أX/T43^䭯oA߼mD]z'sMHA'| Yӑ.Rbҧ IceP2,s潇);/ m˃?s!'IK%R1IgH'pR\@zOhcC4}mL!]Yqc ~j,JopE+jQO ;7dk FzᜣEK}v.2\#O{bH%ǵ(-L?.Լr2oq%=ι?OyyhG-4R+gz&5o>{_(C *j3\ YEXNk %^(3,|4?ֻr|}c8~_ȱw|dt8R)G"U\(dƭi!xOZJm65iGSP s_M.?GYjWRƌpY:b4 =_qisjhg1oi+ B8uׯ0y7 Ggʏs'%ANI2EKǽ ?gE.Ku_hÒ C#i4Ze{EI [3̪ZZsE`M Zҧ2&Kl EQ"YUy^~gMB{Lл SA X69ZNҹhkqes:g@|F zRdm$n'x4[֐Qoul]N_ EI3?0嬎!ϗ[1%E[ڦgLH^1Ҵ׊ƹWLN'%y^!BgZ<}^`,۲>);C#$]Owvre :&5  ڃ=VTAӊ/5}ARRGExFs3њ>v}GZ yǬ>1&`+"OAhPR*38 ,2% @zyN?,-{C|B3G"SEZkb4KBhUQ X & TA"\ Sg[ރ2QADGGPIƪ, Ab $x Rf:x!DIGcf PRbEދ)Rdh0?OPE %Ŷm%$˰ɥyQ_*Nj+pHQGk^!@3ooj<*ta)߻]Pܟr)T79# M&hB*`hsRGZo7?cukh7~K?;iۖ'p]DC2jBY#eB乊0%OFZE^~kw3WVȄy?㏿wH Jιs0to[<ɳ !km`sD_ d"*@89:u9._8?k_~%JVίS<|VHV=ΟЉyW,tQd'/!A UL> Tܝʲ_eWvh? ^{OJb,9=>x0dE 5+mt:' i#[*[B0{>޿`HT?9>,GTPT,5-mQ. Q[Gyt` f>ǵ5JJ,'âO]UxYYc704YӴ<~[딽9_֚a_p EF#a2>7A1y _mL%:ˤ "[j<͔Z8d*2t^~;HX*c Bf"Bdrd\ٶ✥$k!j9:P5-UD+igTW6^a}3*2ԁyV2|8jy)E/>a?Pr͠_R=dz]vM'JULn#؟VK'I)1&;Uȟstrʨ5:).:hWa3( \X|hkWBU;F9o Q^br[( 4cm]dx\]cNv6W1E{R!ȥ/^8 -:QGG3U*; +!M5P-#^$\F \hJ%(B QNj"8WWϰ絝5tf/c/Gـhv9AIV ӨT*R# D7:=!xZ&Ys>!%K!h)d*i*jigxhb 9&{c[t`SDmI8KJ tzBJa#<@ly~T: FzFEVrR&z+8s@xaQt)ϦxWlbg "̅V:qf2&-~ĢҊ*OSl5!nn Mp;a~P$`]VMN8Xq/u(׬\L0:~87̙.Gۼ:eQsG6?ф*sȐ>['p!ꔁ/{rVH1#N)9+Y,Z?er|LlƝg޻CklosMz)dODz;qt* H">ub B45jmבR]?&E,b)ZDSYI/M{wx%F%ZIƣ>2c10VԵa:[`]_1ye:ǡqgi#g TGWNܮ&[&-eZ4Ai.J!$  IDAT`H%x[C1`, XD0HjL"J4aXf{Z 7[Kh'<9g5duclo27 [Vx)7>ys9ͳ!|*XDd":=3ld}#c^̖W?o|Ŗ8^Lw8msIzc[3ҥKml0!FDG6JRfsVvܵ*088Ыb@Km8>cooyZpa(tb=BRV  3% W%5RĶ孔yW;qt~Nmki>Iعc,Y?g{ߜ}J {>"V!e~|w"rRhȥ"W<QGGl\F ^zv,|BB`V۵kxtnDgABF3!kI&%Yt/i?bkp^X=w#yc53~ˬ~Nbk ?ڂ 4VD Q'‹x>ht\>V~aYzنT !4Fg'i#C)eG%E1$1ULq BZd &18J9@t 몭+rG" BN'Tሦ)ȤFYQ,W4F`" $֤ ^δjZ]rIerp5G&Yd-ma#δ1ұ`’(&؜iUs^i*Kbgb()ɗŵHwtx* A&IF3oq-_6Z 9`E:e<6x66cMxqĚ$/g*cd2OpLJOE.ӑi]7MRFBm!* i# bэ6Kr,ٚãc<~.Gcmn1q]||Pd%:Ŝ?= YF+_>G'f)'SaUJvA' ޱwROs}J=pdFSOhZϵ,S F}k-ǓU뢛bʋ9'sl3SQty_IE@#DR@z  Ƶ MUUP::qyƨh@kp><#|R-= ٜͧv>YJn{:yVu0P|t4as!8=?UƄ9/]Kre"P! )jZcByr\՜4 gh}@E^qACb[Ku=L5o.S\:k^pKJ zCd`@D72O@iE(0Z𖺩h'Jd1$[OvGk#\{b'gTiU! gꊕ@,B&n}pcWzշ?۷ J1qG-,_y7^g70wn)_o< ɬf2!ޣbYøqH`J Qk"|2syRzm] &g$@e+WwAY>_`!VPz n-2RgAJ.+#8+J H({aT'%Q]&dpPZL' .CL76x.]B()(LJ4M%CS%.MR6Y[g;廏>dEL=Wޢ|+4f/(tP_-Vޤ$,m?,%§6QETmI,1NZ@H>UH(wa1s|i-QG=Ё^(W܂R!B1\p(#ZѹQh/( CDK"P^ qmyEt@RZx $dBOAb\ 葩q:;r!#pR`D}' )RVe K.%S5$BZd3wLL$6-LxzYtނsp!EޥD)C'V %2:itCBxBE UV_,5]D ^f+NtFpRGh kfu7/opj9A}Zwr5U i%r)\`!:i!qw #l9̦+} ߛ'ܷ9Z윏<79J nrw7E=r03& {TIGx xCl˒ӆc-ll]2-Gs6j >uKXc 0ə,hO)/Ahz Gg#[=]gAV0tz逄Xю P* ^kjk3p-K!n YAywϞp.N|igZ Zb ŰZRzt&r^<q Jb%npγh u`iPP ZUUӛ,(M]qpx|2igj[ 'uMm-: .h[NOygH$Ґ>w rγ=5:K%! ?KGǔr[w[-i; 'qg:Z{~D[I%%!D{\tXX;O4Z~+0G:*drrGws&GSD4h6^XG⃋kq͜tdBai)K+TG0ur}| _ Dq-x||(}LMytxc$V sêE,X_oIOfSVV^`ŋmzfqtxɌRFH>\frX~/C8j,8Ok[O ' rWyFMn?xVfaR YnU$H$; [x_pzYw"ϩTA:@pd%tc) ͋Y3Y@{ "u΢T/V$Dv\pf>9M]R{cV+dY$;5*3Y]ZY !Z?#c Y"kTxf!kt1}q6|F>D)ֶ0O~|@d|*rm a|DK#9.$J#v!=dDGEsҴu5 IZgG  1D(De@>(hgpAv eq>z A:дRD MN Ol 佂րiEdȀud)Ckt)&IpE{C{􊀏%}ly:!>1<$i-e8M$,dGD1N Rsտy?1Milb~y`t\g~X*K6;x(qBu{N>ɤy3GϠߧwpёMN8¿StyZD8"j (DI+P9Ak|P!5<#XKn{GhEV({9`.i Ht^p+ofk\jթ(YU3zEJkxn^:ᐦ9|1<ϵW_^{ _<+  PPS9`_ڛo-V6ydwox*յxm}Zu|[wy}>xB0( ehXWM2ae?{EƳdL@H,& A*C!{q*5sq!'m*Z.,=鴸Zߏ3Ep~e?p , ۱ς!Z/Xtl~."3bBk!|t"nM]rD)\ƚ Xs UOj8ZtLږJb,lܷmb M/FB=sZKRz-av׾-?yD<*_Es ޠܻOSPI6;&F&8ѮgGǏM?B-$?j{*D̟OCO"(li!9*GTTj#C# m*!҅*dˈA"RTDCT*t,=Dy rHE7pZQ[’HX"Dƚ0hy t>aZ # %zQZ 1@:I BɆx1xA4HY8@1g"2=# bu<]ees ÿy }BV_~f4߼7eh ,n%zԠ$x%eόRe- ԍ `rxpDQ "L5Hie]#, b}s'Zi|JhL尲|xxデܸτ fΜw2|hzinʓG5'Ys+7 vbP&f%!ٜ˿@Gǘzu$J><2#a4j8|4bk= x\EeA; cX/\e'yMxx}:S&̙/|gA[++ s|\+&w*ump,-۹u|dm snhIEDB@'^KhٜmGQ? ':>,[ By h 3ٞCJpZSSL Ԩ4Cx % *mݷI W{} b~2Cv4CUqAJHSABK45/\Cߡ7Xg2;Rl$9 ,#HED"G"WStL6:`+`oqx!U/P2;䄓m(;Jk9NHf- I[1M Ch)|c4'$BlloQ9/p9ƀ& 5t3J'aw \ie ~]E]ujFYJB!{]A]W[_gp;>u"&9S3xsckL!%''| ş/~sHp2`N6t%+0!2ǑER9 Q0gJx9g[7gw{Ī| %~2! JB' g.]St1=Mj|5eZ͘R̫ټF-Cyf ӺdR EgY]b5O?bmuqa-|%fGǑ "bq 'SgA))+FYDQfq }Y4s(go<ڍXn,cӳAF_U=s"(~TJ @IQ(j=5GyMNxxp=)i2XYaksA@YYrGǸ XYC7̆ǜ(]S:2!)B0@ Ly(sg_yOHW>s 5b>?yf>4'rt"!Du◳i!A ß#ƢEq *!?L4Z\~?`I2ޣd"A:d$2!F( -Fᥥ@:OC@ G!yrrP5Jj [ԔUJ tK<7DNx$%Aj4D$"@21ZȦP CX 4η?/5.ؘh+r$$JD /4Y =NZ OEDyl `9KC۴:ڃc~8;jqP5oܟG\H+[2acy<6ȉʙ XΝG|tϝG ׂ"alF>8 JVAY{O;83EN5d,êcfN?%x4&STmBkg{\V2pjɺ}ϱ x}tٻK{51Y6C$fGkż,9:2+ܢG'`omgYw)2@؞hj` ւ 69$|1+IicGJ IDAT%Xj zHZSukIA"QK.zzDelC.vԲM\sL?'GF{$tEMDK).`;k4xkL2-(OJ1餒DG.Ee40LZhr)7??My?hT"A^dCX _9+.]E'ZBCF0v:ev6TGC Agb%.dX/P^FD3KTG}ލȵ2SnkXVaHH:=4nm]Wr/u"ZvXuatcx&yuEcd,4V^fy%+EU-l#N`Yh0 hՂg籍ѣ|W>w_6J5Y!/:y>I^\pK.0}ݿ{wJsU>`fq7*:!q0 ?A9%v>huɛ1^Ir 0[6d'7K@F7Q:T?2P@DO ~1Sm$i4JP>AD)P" 5i$)>$$h,!Q-§$^#uf8Uǀ a\ H '*>_J{6@ %xʘ@Ća)5@ nP@ĺ -Td2A-Yɑ~J>(A!|$y2$d7Jpআ;)cs,8D6;3ᄠD{a=0?w~79y\[DD&D;ۿH/hp?4 AlSIs7miD8E)t5Z0a#Q4&bxB#C'BH!0H > b!zęLw׾{%ΩM%2q5& ɴGC2ol"iHbE:yƃ1.jh䝛wy- - h!NAGߧJbmFUy/%^ |"KB}Ңãwr0QyΧ_zUy;kVeg*Zh|By X"p#g9[ tcE!Z26C 6$~JI >\7Ƴ<⹭QŅوy5uz6ס-[bGDOA!9uX;aiN> mL')T|N3dN"V*Ut><fwrr4xȽ[w]$a68?d8<Ͽ峤5^vw7x[[\UXbe^t8 9):IPyBuCF b22L)fdl{SW^ IEmt i[$$y fGc@hI+!a:NS 󄼛QtRolIdJet79fL=)3+xt~84ER);p |M$[Ղ"Ordh.xTg]>JH(@K.2%1!rl ? y{gܿuGOZI_2L%߿~YF笯:5vvqrpMǤ+.>$#4lӄ ߺxR νDs]iM瞡ː$ %Tⱖ ę% 䇾σ_J[N1"*ECEd`RDf_0RC{?r;|Ge@6h!#KJ"#&D:P JwLH mB$9u3{T()5 6pԆ"!S&3B:HQ>:$ s(b:!j!I hR}B .4&!Ro27@ H *h&ʋ 4jxI5!Qk3?&?'H|\zOyTq\RgBSMh&3ٌ_;职2vSIO,&|o_/ٸCИ9)ÇSD zoi7NS ~$K0dDs~ƺfl1SզcA4`}܇5mYO6v?ǡ 8yt(K7򰎵5)' HAZdu1֑+yJ54VrY9"_吂rc9.5Vf" ϭGJ6&cIHswYq-lmKWW6xkVICXY1Gy]5T+'5㹡HG"w}^*)sT!D?E{ z逽l t+o}ܸPz{s-yW 2 cܭe尤<9`^U i@Z$[͸Np#ܻyg&I mO(w8K X eP+a62% _?pn!2 4yK0 z27ޣ;:^ IHBw56445t=0UdW?_% 4ǹ!lEC8L0> _U:Cmkd0kݽ'}\p|x:&/ \p-Q:E&R[*㘗s֥'T3锦2ts]2 m*& W Y"ܠEIΥKFs6aV M* Tf/}>ycm 8𤋮É(yȒ&yJOi,NA~ddS3j#7bq}YC͂6Y%khꄏJYg^?gC@X0q[~rw,ͤD r%KɆ\LSt+ωņ""`Mְ[gfLFSXha;B.QJuvvs\y yr~}rlm˨4YA)%MEm]EtWY{żh ,֓0:m"ˇX O ?Fz[LhK Tl,x %5i ύ]4)Ub]mc5`e>Bb Jqo\Rw5ylH) A ABId~HCIj磬[DHQ0ukQT/uT\ Ѕ`( Ʋ;,H)T҄` AI  )NP2Y !R9$DHleOZDY}0bJsc7xbRd40=`nJ|hZeFjS'c*1E%sV4X$Lj{PN H193+h& b.1D >(k@MLj+09 il7%dK;1QK(uNq.uU3LƝ&4s1'g++68iv缻w¸tᬍ`³fS\ڡ.!`Eh65} $r&ю#ddZw9FQ1+2ȑx9~x1FYN$b'1I QÕ"ZCfӊjVM5c>a\`8yW8<Ϥgr+524Q3lLd>Iфu| %Y|Ce8ʣ48bBcvXKpNꀉP5yF_v6K0g;:k,d\ډ+?`m cEH1:_8&)0Y GceU4uU#T67\x|wHc˚xޓCF9,8*fu9UYbbGVNu'I VWٹB笮nl`kk'wx*c늺^Aƹ 9qg8en,omVWXX%Do6$RPx)3u\vT%nqC [(fxɓcF G%>XBDk<[dYd: nE4FS?x׸S&'͛H-BA؆)% CДxf$@8@R^E6dq-"R8}B4I$I EHPN+gDZADF9ZXӠL|u)U|x H^6CsPmd;Ы s hZF#E.ƅ Þ~-ٟ 1E੝yy~ETLHk΀cyr&냜K*SSY٣WQ}hS#qnw^&}^>y:pttBwm tz {G VJD(fbEGl ^A"y޻uqx/2N?rNBkq6fqCL# , +@, _nmpnkD8 ɄVJ.%8'[$/SؗOGO@?qڡkcfF_!)B+$%TTLX[GcM| ݂< ]Rm\o~5W2~Klԋ(Ok7L8npWm2qs}&5s:Lˊl6bjp! T%h"M(v7743z|%F.09"iH 5qD5ϲs_3Ɯ '8A DbA).<F9{Gwy4XcOvaR7 [x?㨬*+:E1YN*P6TU,½P NB[ۀSf`B:ty;:=(P2J1Xx7yDYG6Zc 512]E`HLQKSQmp9fM=/] gq{͂} *+\UcJr(bBAECcÜC<ٜیqYRdZW/LE9Ͼ׷pΤ֫q`sf5Br ׯo!>/>7YApXJJS7ZJY7'qA*tyVu \]$5wtW ,SWs6S*2* Z\Sg<#A4j:.gi"aM _z'@'+8@1u3CFyX%Aka}aPL0t{h]__x-SPJEȒ"R%"`.g{:$DIEJ&zΰ+e+[0kG'vٟ~y tYïw+[d8y 7{7MG|~[Nrˤ2a$C ;tQTWBFf9 mp~*J'"pćA@h V:BIKK)\N=EdzjCjOVPFFLY/ɴ!B}kɭ萩Mu hT50.ixiݡnƸ›&6$Jckad% IDATBhOUVHe7(M2 z4X*c#si,*ZA*HI?}N?.Am{}ÇXQ5 b9$΃wt#NQ],%(>UBouݕgW=iE_f( ?>d8N]4snNfzo[<5NTQTKDĒuYaɈnw8`g nܥM<$uʚ~w0s)JJ)$Գ|"|UMA {ϰ{<2@&+GD)9҈>C!Ǥ$c sfӚ1NgO^ONpXU5IDREC<1:z "$uvw^IIUYG2Ba8_Lסp{LX-:ЅOBL**z .pl?֧,g4M,ZO^˓O?F{9;>E@nҀHRzX:>\C臲\'#i;OZ :Iļ'%U0 )Mjغxl|ⳟ#6?x^qt"#匰(9zy yD7ɸbrqs@o#&ʯo}U-([\w| L,N'4!0uedwO~uw.je0Eŧ(h=rQqrzH́IryHWUaqu{IJBX<<0wm6o: :=D# %2jtӄ D0Jd/9x5}i- WL]\|oy9iYD Jw>)2zMW{\*@&!y[<PMju wg^ 0J0F.zO@!( 1Hf7|@]9ӒC8=95 :F嚣cٹ?29?c'^'W>&RYU2[T C_vJ, [F>+0;VcDɋ.[G{Si*i(sx%ъ:^w}V"R%1}8Op.3Xd@ ["IV0 2 ȍd(dENvךLB{hbG R1x pe O> G (Jc>E''qff:(o˷8=@LR¦iyW.^zKrgQxٞ!@$:+=@"ȘQ\wJPdNxfTdrE/ɕl4Is \}!:`i*F@t3l]b@a !aA$*:d#>z4l,PBl 92l@K&N2$,QK@U"Eh 1ɣi@$3GTCxeC hB tڈjJ@m` DhSMbɐbb#RYfEРMG$ Wa@HD֧]@#UI U]@yɄ&5"i)R2P[c$) ^s55R$8Ű@ d274A$:o?ri-35ܸAe85Mja>Ę@8c yQv t;EQ9R%)X ;4 ~OYI(4Yf13dӴub'o{GI~gV;`g oޤd.デ'=_0\?pkCNfU}NJC0MMX45nAU99Ber﷊%F:3%bh.ƣf>ا i{/Akb@ O -*Amkl}S1\_ _%%4?K\K%m_UySbDbaCtz ܤ@ QIPr2MP-<.fM>$_ٰ3LJL9}ȝhՍu2WSMt I@Vf n't!:(N؟9z'3cG\lj67Fd8=Be: |n{;ӊFT~_cs{H VNNwxkO!{}`-,3% R-4KfR}|~7oA蜨fO9|ѥ- iCהF((k۩MMҿ!0q j;4a] ჽv6X2VM*c*Qe:E"bؚyl^o| ,Bi.<9lj:p㓾֒Vd+ |ϔ} # :=u26I)KUt:Ko1JelYyc8T˿hk_ G%E*1*0!a$IiRׯ';~|I}\uݎpxeھG?s ELp$!7LpqʠN']p 2HW%FԜ8GJ8ZT?z$ skb.y\- /%͢iSw B:t`N]K)bf8_#M& )pf$4f:}6Y^(uAz_َ"};a}r%X#V/D $Qd xkj53ϳ7xp*݇G<8gW/猆{A$o5FkAA |(̪@d-nfg %p\χ5>W.0{4uj,*f{SzT7] vnbk@vvxzFC#|^b  .i#,<'XV0vx>d}s+7oД5^)"TU >4)-2@N6a-D_]C"Oa71Vf}<|0޽D\6y흀e["t6Wy^lo 98~ t:}:&?&ŲsoO=?c$lM [3.?u;MyLyk~\{Nˆ|zѠU\qx~6kƝdP| %cW2OYS6ᄑϵ3ZR?8SK1!$"sdi-;RN"5gh#AN!h ð#npc| _ft;w: T6Izͧp`»Nh EIÃ^it1JfVhi[۸{,ZB '& M2=֒R%tKY`x_Uwsy*8  }s׺_b0_G-ȁd)]5R Ʉ܋C H(s/$6N i IAB sHB N;iBIӚde nperU=CO׫L{&i EbaW i 3$c3%F)Bp%#q(e{FFDjeq^cDJT{𥳐`%.˲43N:)2B(>>A, w1=3>;,Ks}9rC"H ǯ/N9UWf az*|1d1t D|O}t]{&(3 Cl")7noowAgaӈw"JІ:Vk*.?GW|h0b7~W㗾Cyr̿v}]x 0͈RF(a6;/I.lLFI ɴu ܹȑf {UTHr4EM2I7\7q |:Wɤo?eQGtY2O>T4V,fyؽ6>,o7Y8毱1\G kDt4p'RwȪBA#gSfs(/PZh\Ș-\|Zb4 WF/pc#;{.pk;g2s}ET5j{wc*tO=t9UhXL*Bd b e;óC^~M_P?ZW+fOcX<0zV%>LA*fu}-Њ+`f3>QWژ['Y 1\@Aa2D r%x7/. ;yV6/ww;\[bS#sz!ypB$sR!`Q:NOg=H}LQF:oGdVRQ#˘hTlel ڳjf%>*TY ,\d:R@RҧFLrP!)oBVyda礢\41 Y7X2( BFwHѹŸ{ ![/JK&3*'t-נb!JLdȨ|JP1JI;\J0$SH 3i!Y4{G$^gmqN7.sOhJ&/*A(9R$3g#4d6R~ H'HC ,ib2“kC& =D* 1z hW  lx 1H:tR2QA  T) ĀaxNepd %Ⱥ}T @Ӟh[(헭'v+y3شOK$Vx)t}W;Rb(V-A|h v``c}li & GGL&c겂Gcl>yȞR35&sw0D mly5Y61KVRk$voT萦gڔ8#clpooq-O~7}V;M +jե,. ΍mS<-:*_c:I)Ab^5MJ` =,DDAdVVJ~!AS7 dbާ9Od׶i)jVX S|hYhl:wRԵ} Wnrw!c<چfԵǹ&}CGΧi Q$(hKxfn;=SO?|Τ+'JbcdVStzZ2>k֩,R1,zƢGG2ߤ^6Nfѓ1csURt%IC-@mXGQ/:DDgzp16`[ GP'ڂͻ*5?CpI: ^D℃]{-5fn2,Z:L4h_ [Ju Od&dl߸F^uK#MIbu,A4;ZH>sykȗ>o}U_e5?V%[g ݻ_||/Vљd]}"QzRm %ܟLlL  aH7ؼE&`c^>|H*Jzhiq5%/H -J%IlF=z&9N*;3~gɬ>p}hLtǮ\o|+ zրQ!A(Rv!\(EkaK^ޤ3zFmy'yNG..j>~e|^мpkέw&?, 1nJF,T}r.)g2CQ=AxJjbSD"f[$ Di8:]Qsh(h -<g#9+e֏hI_E#P2ytlp XA"F"V&Wh1JkIȓ1yuR Zh%=Ew<3}^jX>8"\:kvsQRSs#*;W^Bhct|ӟŦB{DZ#&$Y8J׆!9Vci\̝gDf>2̃!L2Ԇm"m|sB)L~O c`5#V 4ĽcUe,AzRIBtQX" BL&D<QuA %ׁi - |lp>1ҀO!UN)4vJG/p9sKt2޻ͺ-.>Ɔ뢲Ăʡ#!'xt|8|Eb8V^BײvD2D{/A !㮴!MH_/.3H<0*'"B0}Ph-F'02O =mh§o=3|E'ӭ_cK BHL !g 1 (22F_n2ɌA+_d ܤ:E1mW1pU`.ȗG=;}nݾzɜSȊ#:OҿPׄ&6M\-ε?&JX{ݶP7Tg{{t `ZyA7gT HpXa!3 YO?'IG+`f>tA*yY"ٔ\C+zW2-)a:IlΝwM;LjXS񽔃J X5$lw12IIJS}iR S^ze~?Υ˜?stƧd9JFoAĿkC臺RTk҂'5ea1|PKȍ,79gSskYmYqxNfH)Og!fS^c1Ā% f?&(!1]H(^LJf Np-:.-[416i&J|ulj  iT:YI#O+Me0|З49RvP-zVK2XMjO1"ǟ˼=~5J|~Gp6&La;q4ݻ9gMbfLz/bAiʪVEqϥ>DNON9WyVd=d:E\ICw,hRA$MGB%nUWOeU679~=v~!oY;[0"UoO2=EU26֛%7}[PhI6/PdW/<1QT't9)Okf)'&g5>z/7QDI҅ 1ik#V {S}C/ X˺ozAw\z`x -–)dʤL 63Ú!6-dՒs-*IW)zZ-)< heL͐ O :=`}[#GnR gS^|c9=3/U\,Wsũb6(TvkOEP0Ԃ ;CN'gDU#,&0Jj1r #-d<6,_Z<.0n<Njê渪8,s߂$gy] H"#`b̅?HubrG%528:y ہ7>" 0YN3)08) X<X-*x:Q 2#F+҉4k7LJ%cSZ}wX! I2u6AIMc@%4R{ >xxI~#!&#*>:Cm#%36 Şɮeb$=˂}~XqB[mu/簘96|JQ>yEs!+EE 6 2c.Wn<6("(Hi6 NtN"'OЂ,N飳.D=ܼ#$(5 *#39lQFsH UIx1ww֣u i,1Tq 6(mPJ%\^Rj|/-($g-%/*عx]6N͘9yML+:&dH!|>|$jO[T8K@*'G9}6#ݼ)wNl\EF=s[[EN ÝKعewtq4Ls^C#|@E&5Ryà谳9`"iIr66`ŇH]Vf3Ƴрˏ}3w_FOL.gg3J٬$Si6.ȵϘ1bUEdlp"v3[kLp~oR`a d5GNwpn2ų6u6A'A:bH{mh 4H*"} s}W鬏ޡ׉DHK|֏g>+.V <l6Rh}MzDd8`} L'> ;!y5Bed=oۥC/:8/Qc$&Vr1 I}IB+QHQtz(Fqcz[(U7~R v.^l <<.2*tTA+1ҥ >gE*8gFĊܹ7^='% UTA1&;9Ff(-tVMl'VmbJ{enQ`ZFB-?EqG6]XjZI+JqrǖtUãVdmژBIzizJ -" ؖB*|2"|>tGg%9cߥw2WLJTo 6IѢ0CXDL%3%> Ex/"C2ѵC9A|cց<EfoEy-2 =/zD

E6 f}Ox@e9EnPRx|9>D2>qz:tlZ>Z =(8<9bm}HT@+[NNx8=uSdM2 "O{6Cgt9663eiI G::k(w7ksy}3Ft׷8 !ucaZ1ڸJQ&f$C疄 F !1b` H<<尜нpm:ia>YN_W@O\Zw&j]a^)?z-v;oj;uA"GWKR5 :g3tcG,3g\4Kh49{,9&}pSSP+m&T"O2,pbzmˮߘZkwŞ"ERXH y ϐ ~HHıĖd˒C*޺w֚Mܢl U5siwf3t3cy'.%N nzI)Bxa1dfb9¶\fsN*HzQ0DrI4g yYS pe"˟;\2h7Fqc0L1C //`6lIf* cdc8KmZ#ðp([;"ER"rx`ÆaVbgEüCd:YIO2Ry̒P2rgw̖C{GӶ"&(#D51 C~jG,\7%G1[ϥ}p6AL8F yJח\i/;j:eD#J{IpUC =am"@2RYQ%I\ASm1S+V6M9OKdt_S&[[??e:mbl5t:Ted2=X1RS19o+X% '.nu}6SoM)љ r $lY)ī Cbn!4DZ@cH2B"F-G%'W]iIh;i IDAT>2hJ9G*O!`ŒL ID`kp}KwYYrA= !ȢG|Ǡ\ٿA?Uoi6 hC)R*5כb._k^;'}gVqb59Xfo+ݼxē27=7礉F2b `К $Q?7)btb`6_0޿9CkR^<%,ʰ=d<ŎB>&BTc圅#] eSl#bt] 5hU> 8r);['\\\Js1΀8edȱ+ cXM!BGHz~2[CUZ&g5ɐl!K#H߃UbѶls-%O̖}B-b~2~ kgњrp mFbTND z&2%z>؊" 5/52}~y,.{-++ܺv2^f"Wyc/~WgsL]1L[݀ 9g;cFwxr6Umwٜw/`{ĕc gǘH4$[a1Ig=lj~207F5~/}kiϲYE?t))%D HHѻf%{ z+/MYۤ=}\q+<|'=WKo SaVanw@xS&$8:=]NNN 1hH)kSV*gLA 'gS~}l(×_cRo IQrnƒ0JZD"fӖ*pp+>uc:=AΨ"ar0ak8:#:h'".c- 1pt|%:ۻ`,t֭$1t}Т:&Fxcje&-W 8Fb{C5B#ڳs:'ѐxLLNE8;9O_GSf1 H]BB{RY5j]'1FUD,sBI81bC)0a1E ,($*Z3mAIZ= >a7 5^2[XaTl;eKA{#y)mhTf,[0r;xra- )1تɣ#^~x?y "CW:k)MIun;pWb H'm۳ k70#"SqZ24n8NeRbX\=6V]*əֈʒC|2ff11#ːbϹ$Qސºe |\5aJa u-ր̛`!X;""%vK8!UXo]۪ vd_u b 8ə FƦB1&D>{7kN̍-S5D!H1ucJº#b! 1wҬQh Q@|R0>E)V1c]4*5PHY9;Lֲ$P C&2b2 Xc ''@wXLaGLk? {Mɽ:-gK8RpRn#59ӯftQQ1'*cp$lt`a0@AU>t[>cVO)Պ@9G"Yd+/ƥ@||sO*zR;' rV+)~7A!e1blBr`~q|tkty2"bckDTk X+8+1%O5kk\R-}PՆtgrcڶg_>6iJ';;c,)Vradd5YXy3^h9/b&]QEXeeLŔ 7rd,'%e]|puM;f}f3]R4#”?H +0m^p$eOS&b0ލGxSS ` rOG$k PE1*eZಾ.ue61H"8B+m\1(' E"b*eM5X9[1+^CU9pUkW>çu׿w \ȩH[$w)$#C0r dc$uD1,I}$(:`@,! dH lֳZ !EBl9&\6JkvÝlS0!K"Jᾃ!hr]zeWfcgrqz2J1T/l9GJ3뷥5 E:qp*r\JX1"Kp]>ck5k-R5&P]N&XyLg5`3{s{kD6]KZ_eX-iu\XʡCɵkaqJ"dz~Mb #dװΈՀ5b+TNگް~oԿ#w=Φ9j(G._aR`Ǐ9] I1?~-r*)ݛ먛Fo! (c^&x*Gvݰ;R"[WlvcV}l>>ɤ#}j ptSeY0% pL޼kIX*jҮLl`"[C`Ĕc->SL.;XaԬ^ҕ4Xc dN8si85{bM"J$O$t1q_CrfD%e#k;XKz)> D Ũ^ dx4o y10ϘL8<wzlɭ;/|o#v?or׬Ds,BD))gL9D۶t)g6EHtE% /Q lE6t2.#HF ׻@((3TEA1LUn2;Ge{ Vřc+zXF&iyeHl1.#-psWo|;a\Ҟ3h*]B"O'8۪E`<63c,$  4O+t KR&%C OMnH1̽l-W%,=y Ȟ )+m Q65Dwb6{R0E&~ʓTVOɩ'<)XNݣbL/"TmCJ/%Ra#ϊ3  c7QFݔ3q9eӷ,Χ,g+l5d0yttʻON§bGH3 NM%NLFPUIZGr.:pfǗˌ&3dW:>jeW ~bwbxKr8jv? y{\RaP9<7wpX=}7يeXi3 Rh!N)iY=ި<G_wr 9vO\us~INzOT;C3_{VD6vk?2={ģ_e>ZîsLYJOkJ2Qӟrf)O~#=&Ǟ6[޽wc$#} _F PW#!&JD2Kɸֈz2d5Q$QrH4{ 79>ݟ;Ӗie{<`wWW-wnosHlD}USÄvbN2]OZ^dcLU&~nE &GI -`h&[71uS Yv+KE ϗS~.񡇬IɆxgd`7w+^2iYY_~̦3=?gH&v=31^{Yt]Ojt1lֵC;וG zgOYϘϦ c\3k>凯V=2\ڰ~Yߏ)M'%'5)N=!!y=gcMD MaB,ZƏXlX?Fiį=oҬRJ򗱛 DPeTC_q4՞gֱ,x:Gyтo4Grg8KcB 5V`UXI$!RwAS5`ʔQVp2`gonԇ): ,%&XиlNpRa\3@ƞ'E&[! ;pQSKF1QN+?ޢ[.a2!e`Qh X$<C Y"Ǭ,9u4} IDAT X0!B̤KL}ٗ2Y$}bE3]~ 4yȒṵʖJ5_A܄) s#~HMzc2}^Q "1!oc&5LJMz0$$VFɢg*-?y0e!5O/^拟{)浇Ox:їF2`[y-7ZW?)F$Hb9%4x ]qz>]u{4C$0u3ǐPFZ}!B 1)HEhM)$u{g@:_HiX\(1AgtI=mxm8ڞ}|_bo瞻G̦3V,u5Oo}>7<ӇO||m7'g@?ױk3wTk^^Lr6U8p+K7&us>hX#<5=>p >ᄃ=>8)5>n^h] , }*':?x2 Ud[[lns3fr? /^cn)[g>;_"}̓ǬAh?xx 7n1}M_FӰ{4F>}[׮#gٔ`{ >0k6RVNdHj]{5,\UX'n*䄤ɗAU5V59[RpΓi+5nLur^jNq1i|6ݻwZ҇ޚUU3R*JŐSZ.ڝXhQke0k ׶j=u&c`` +L]CĆFӑdb+40$vǞk[gܺ/twn}xBǸ]Zڨ/CY)4$$&B޺Z R!gB28'_ՈSSU3 fjb dgGuC$j{-X.8[,iWUxX·^1AL*)2!.k:JT U ,c'e㭖sc4JxFʵ-hjG~l@ P ׀^* 3*;5z b3 U1eqs8د穌*^3&> ;xo0arJPZ먤IID.'V)^S5x)/b?m•NN7 [{;TH39}7'%}[j~˵LԃpB=#aoww/C63^=F4du0Y#❔5`#<=ii㽳߻xrQ+D_I% l}˿K0g=6=,NXU$<>7f$h6 4`K"k$IpMX<M$T,*2Am'|j,F[oH-l^iB!y_w9^t5,.ly){x2z(03dE:[bIRdAlj%``%{%Ph+9c D|,[ݳQ?lR^QO| ZxexslhW]ayr.uFEye{Ԁ;y [TvjR ]@ d] q!D\ښVʎcꘁl^@Ye/䧟]K8?A~E({9ޕ;{DB`PW,SFSk,$N]~u77n ʸ Ȼ { ɖsij ڴy+N!ДZg 1o@ Z@JS6B3!OZ9՛gkRY}^C}=4l[%ԥqD\1iJK9))w_&ܧv6Gg̗ "k{Q;o|9Oxt~ c|uNưXXA&7K8p}QLjq\H3.d;di45A?ϏO#+])<Ǎܪe;˴aӡR&L;$D23$t{k̀jg5v^ʵuwosS3ೇW8Z{1}fston޳ĤU58C/>ǽ^g/g]]t}˵|񧿄4g.v*'<|}|+ӗiT~uV_ǽ?7T} rׂ@ƙCc9iXWAL>`U߇:O:s/<P?w+~G,t.曨nݧ?ܭ0 TDZdq>&j*dʉKCY'ַ/o{CV|zXgsH'htzH ֞ 692leH9jӆ=Im ؾy#rT^"vcj5'.W~RC|Vvh̳cĎ0`sWϿNU+0Nywqo ;еzuX)+@.(LdH@- 񬍞=BeE#1$Lҽ,'}bWU1 I (lTh_+<) @r s!'D J#2Š#ǎ:7&|>ahFm!TH6ҏ0fTc^ q ] .xV ut"C?m \cvD7"_={V %s ,/N`V3B]L/V<V_O~.CѨ֍\>e|eO7_Ч4&r|NϐO.Rʛ3&A8%&2Y.9p8,{2P)ma͠a5AVM f㥧&P1Zˮg 8k@#G.5̚1;Lg+U]_J@6͞S pfIWU]exBחF{Ϻ2>GW>G3ڢ hC eە`}vx׸v*7{2?=> ?F'r|S*cI--oӟ^+_{!??2aѮ0" 9?>,rHaM\ЇD2%;Qܧ_9:;7]ł Ơ⽓bbֶ,R5`5yJߌ`<˽jB!_D!y+\OdŌxtL88])Վ@`{\?%K]2zvEW[}';l!i-хR6 IQe+'bW}Έshθso@H)P#}(vNgs <@֬gUt]ONڝu=\MqK̦`#WѺ{˟ej*v5;+;J S"u s&Š))㘈}oQ9A Wnq7łLҎsެYClܑ)ʖ1cڶU#60tYRsOBb`XF#}4@;vOx{^xhCϙ k: & +9?0+Q4 -V]d4Q1K27]!Хw46LYc? `|b Ȩne 3l9a]siИ- $Wg|pr={U4TF[>SFjFX XAʓɬf"Ĵ0i@D9X zP,#o.HMmp"dE:r-GF^ 9BQӲЄ De; $Gh}>iD*CQBk@)Y[Bc!hL'X},ZJp$*IQB铨\o=`OId WQJ@hH[T+-7qt;7.UC? ^h㿕?~LcIuE3SbUY19:gkxs6"Su.Nn3stm2 GRg z1Ÿe3,jÇ虊4d ֵ飭*gyV!`6,1 %z:pl6&kG۸l3fJLQR^K΁`;Z32lDJư:GcuUÛoœ7E]D]Ve1._=MNϥWY)qMx} ҇7{-. ph"u6 XM/`m{\+rI`gxڃ%yI&k=딓1m<ECSVYFUY4V)Z&5'$RfiXqR@߾ΓOˇa1%]>N^3YI1Xۊɭ3xev5z+4N@"us$Mb7!$ls*J dQMSBmm78\铦5S\k)1j2,o2F:gQR7BFC!p֢;=:l^Zc-:r+(Ɉ,i=ە1Kצ bB-'!B ;z V$YjmVaY:ʬ.F9#+8>diޥ]67НT҉`aA՜ :vՂX/}bzXR 1~i)5YUU y%_5xտVv'%4%3%!?w߻ˇGcEdCMX!Z#(Y;Ӕ )=·, Q`]kEJXS* EK3"h<5Ѱ_aᓟ+Xh`7ZdJf'a=XU(Z 2"Sp~u$Zp%wW}p–lORD0D4n\d PA=2DBHIϐQ2RIA4,FR(vn#@ 㣇 _Fq~x:6B$zɨԲ`UVwH>I<ȵyz$Ļ O!>Ygx:N!2-vЂȖ竕RXe} d!JD $"Zsi±"(JP à"!d27%pAI14v*JP  41,kzF]oZ M{᭏RMF!ڤ 67N?Zedi$4Mxn9x0OM+kfҗqYa"xǠ=Ɠ FCy& ΁kpMe@pm4#~ȘN\ؠ/5YP‘jO/KȒM]qoPRI>/DBk(YqwP˷^)c^W?ԑid-9z,ecC7pl\2/rt:,9KVu>ֲ1gZG~YkϿV(BZ,L8k>}x_|p OFt;&^p;|~KמGwٚq4l^)OAŠ%l^~,Q䳯b9v=7jo<١+X|4 l4- ҀQpiK ,$0TIj@ DGfomNRS+C" E-R-qtGcټr;3|9P3 YQYӧI5l2F" %(P!Yq~ 2Oڟ @UUaǵ'Q{Ls8{LA4>5 Z05?sR{UY"\/I a` f%1dR葡Z4тLRjꃯr% (@(Q֏|0m:tLhIZP@#%ZH2 γ=c0 ѤnA=bI7ӻ\Xkyq`A_UpYAY)B6ᴮ$k\{y*c"*ZO"JB`OA^; IDATL{4@+"pc ^ʫ^Bw2&^Ɵ]|R2H P.VμYz>w iYŽt$ȔּRPh D&iŽTeo:k+iriJ!΀illc \]{lA;+D| 4W,eE=['G/•=E&?dQxyMO?oƳ1w~tg6xuږ~˽)&WNB6s,MmN]e$G#Bd%EPuVV. ",T q œ \$HD e  BK!sX5P-+I5$P;E&Ji\s<]o|jp FPd&S4RbS騤Ψ){G'$.ihnc>srj/Yqp9㮰*chјGӆq_򯲶p^ w|qYGn BEK0e -?-bbiΓ mZYgXYUqXW(Y Ź >N@k$$zpB3ڻl_~qxe-k8/U6Lo*pak|Ν[h|0"TT<,S%Y -vXBT^ -+2Whꆇ5Jɸspt2TT"קx2f5.=yxD4llCOO׏X@?%g3e4].-_hx}+ AIOt5#`VWӔ#OzKK VВфᣆƁH;=EE# !i0OZv{$[\|Yz8<[DŽ|n 鈦.C. #6}DQ M""݉VQg~ry¨ 4 z} +K]XH<;wVP[e^xZƖjYUg֞{ úipAp<$x_K88Qw}%q"2` ֢! uI'lɋE/%E3F֎wg޹1?eI%d6U#?,[_b !Fx%4p}+&뼒l r37@X,B^xǎ7Ͼ$YoRl]&]]C $N(ig:[/B+rεqEqi@@?MWLSʢZ ϢgH6P.JDP&% +\]L-rlTF'T!ϲ H '_|h T% ar%h=.zlF2g b8L gZV" KcZPxB6,*!H]XO4iJh (EkT*9<=VӬ#T/&#wo㫚#FP4Zֲp& )݆ p Êc,Uxbb[|&EvM󱂕u`W\~{CA('9o_i<Wǫ<Qa1t._mjR(5w鵻l)`Q( P+2بvX L `4 $ACqJX $$h{y ~ J"HlA^ wlB0z@G+T(}>k Zc-aۣBQx;d5m41$#i%$o4^)#)\ELx!6xmxg`^<³ϳ2res%_f'Ct?Nغ EodBP);laEd l)},Ɲ+2m1N׾!X!RCd4a[אITb5UHWFrx+I )*2tGlL`T4f0Xy{N$nFj >#I&Dit*G,e  +bwn4IRNF1|tlFX, / [?*&>ZI)bG'LN|?n]Kٽ|Y( ( {=79r-1'͙/߳PCpaw?϶nt.༧աI"3Mhu_K)[c@g{oN P6@tgn\f>{YY g5y|m13pw {Q*7MUqV8xᩧpe.}2D?4I?(#)E`53Nwco} Lڋ&1ux1iw6WtJbye-^HQ"U3Ҵ&-IPlV)5j*+l~yfnF :mKOK̇cr/`o8ikؤG yN~{gшb>W9>ϣm`KlP: O& &h —:Lu ɝ~=҄>^.|:Ō10.XhBv)WΨD3TD AuV?::9Y~ Ç uUW +`_@v࣑vDH"K۞#M;Y~5JI9>9iY-Ys)9D{4qRLpvA-Z_@I"?h^1\xns>3 AWZ:%R9)9qTul\zE;\|&AB 4 롴:8jGɖ)@\+).8T1XW' \c!tR:Ӭ$UnS75"II;,@]ت@'!4 V|H1r8`ܶ9_.uӔ/?b4m+'o'QVK/3o Qַ*JzD:^dH-%g{!hy0_RLVJYT2)FK22 BCP:?Jb2 `FwȎEۤ/5m>5<|AQ:X@judFЭ|Gw?Xxg^͋ȄBЮed) "42ZO\Y[_D}< Re@)NA4M˘׾ {4ڠH\EHd%;"PEe!sw7$V+ZF+~5S$G*hw$FlV$JX84È+loPJA-%V 0!Ps"[Չ394 yx`=sYƥTh"Eg'4WVjbc)KT]S{G%buVWНXWt ) $C&$lRڬ+JPB,|xȿop&Et 1 ѳH:;,%o#(s0a}Ͼ=!.}YlBLi4R3"R&(O[,s|1*Bl=B rqn#U*MR ;u̦X (1(dh l-QJY(yV=,$Fc)v"(RMĤNꪤ<:zŕCLed3+8y0tSp kXIևLig{Qk ,kUgcK#g("2rCrz;߁єÅcWx׿.!cQ"p^oO{e}B8o}mdEeW;t_ُ\%CSׯr< O?4ZiQtɌ,yum. Dlӹt9C`Lrʒn7~{0YcQyFc BS8G#.A)` gX❣JݟqYpl+ezGwnG/~ .7<uT>BU~3;pgٽzӣcvt} 4}*62"j?!Aʄ N:C|~_T 6C{4ꎵ!8 h;XP>6~m;F{tUcH(뀰TSi ZℊarBUzFakTC@ \SLpxR'H]fTcI._c<>A&Tcc@MqU]usiNؿF̟+/2pw=`ᄐ/tv\g[8xx+oX&3> |_hDЭm4t&0rQ5 X݅rv,MGO?σјs/d u(mp#AJ%^o"sn|>oKq,㓔vKCۖӎ$|44xRå=h\Q@`^S{mOSE(g,!>.z!/|<>AY78eRxI>R!sR+{59{N4㔂ٴu iƪtܿ )E @M EQvzZd6{G .o}{a0zCGwIt Zzɐ ykkDXwx޽9/[z"kvT/_%3W:Y4S3$Ýs2̥e*4xn#Qa)1#wi/YDKTh=T1IY [ƖJ$l _[78!IUUDL^e3|XVLl d)s0EpdN 3<`]?moRz3*~ܙ8 Mqbx{Msx?/sf&K_ VvQZS yjW}J$y%r2ڵ] .#& #ʟ"]7VqI3P׷ P 2,%M Z:LIIbыq);_QZ)<:%eU4vdY(w5h(3YHq6Cc ZÒenB4 FYj|Mge1o {isiUT |NFfnUq(?ǔyE2fcw͋غK듿>W+FN/S-´>0t :Ai c\[c}sd?A"~J'\4Z}wEE@% #%Ntg 9{'cv5 ^ƯmK_~OJz2+*|poVh]В]Sh'rkӝmul]44Z1]e_$v>j<$-V}ï~Q6VmnpJSxnC[H.&M+X\l~Yz!Kn[o6%H-Ht6x7QA;~ %+k]~?k/w߹ŷ߾ɽE,㛦Ҏ[s</(yw+Cso'K@hw% jG"8f{_J+>s.148ldAs`e;4Д(Ʃ,b2A4mq #VZjb˂|2b8 aΜ"(>4l`;L &FPTtAE"W<"XKO C4VBEOxʯE8ӽ`ŨM;Y7~YfZ.$}iEVM&$FOIZGloV $)C!y6C4M;dFf)brpUx2OcB9g;7??f/cDk $'y Z)ٲ!2d8`X"t;nMca2/&Q e4;kww>#Im 9}3(^'$tY "rasRLpJ7 ;,Cqe ]K!D!W4@RfAQNKLjhV(%U@$ZmAPQ,$Q MtgU5 uUQOи,5 Qd= ZBP"ZR)^LCa-{Tb>[Bwz, {AeBMNsx>O*F'c1++O{?|cGHh[9k6Mv] I/$j#HD[cLlADTə^JMCr@%}hDNVAwxZ0=$z5X\YP3? "bNWIWquY xWQVۊ xix 7=pʿO_wW:EI1som^! xD>mC'Iɧc'V*tkF#|cW !$;[\x9G̎ N\rZIҍ5cpFÍYxJ;x~ _9]Oa1>a!O"' Vr -:Gx:!1 /=)[ sZQϋ3>= M[[֚C(^E sZg{k5Rs&饐tҔ4KQY@%I0FEIPA&BD?eo)-#=J6 1)gʓKIфH5t@p&sypi-z2K}Yɛ6>*B. DU g}6ǧC}k}B45Vܿ=v/^@p[mn O^UҵM!/qOק Orj% Q" Pȶ{U NA% Ҥ: O$E/,AJJ$Qfdk('=B HiQXK 5tKVzf'CjZb M2[m|NA]L2V/|U!hEP` FqA IDAT[D\&\Ml 1- yx} iC"kQb1'-GDoSnJcr:a6`Ƚ1<|RW^Ѯ"g\W>͟}[u>G&Cld3dZFr݇sJsk㻌Ӧmeb /bgf䥵B)J2H ]I@y *.-)ae+T *HxhS:SSC} LQ \H[ʓ/?<|5~tU{Z阫j%ۂJ BU ;]"5ia47d_uI;)<{@ EEY4i=nJŝu671$,=b^5=oa8~#vA{~o^U () >;s^J:|P>v&j$+6S=6dh<,t^cg_Xc(N\_R,iYmB|Az*!EE t|$ꢠne`˂ѐ|2WR`EiC|NG@fzXA쭒$U QFQ%lfz h%A?.,N!OH&Әc/Nҗʀix*ncwׇ,*GUk0#|>Ǘ.@4mL%R Pͯ% %UQ]BNJ@ F$`8ȱH{MBH='J"_@O EEߘIv41XoY tj=J*|SQs&zAqyŢ׎m3wއ/br-6W25^| oK YL*Kѝ$JGaOJ|HC -%5h!xf[ԬD=H6COF㪼4G cײdK6A V |1?uε`<Ҭ 'G<:rr:,<:hjٹÇ3~Iy_nP{(ʀmv/_ozu} :\ZXHŋYr0LLRvx?w aR}*+iK[l@&~Lf( srw٣GdSu7>rk; Ř[0;>OhO`e :aR2\Px *{'Iwҕ" wtХ]B ] EHZ2ĐK. R4 @ 8Ӿ\eP$" ]e3?s>QH64[wH)*KLL+qG!{w{}&Ljİ\snm0Dh=ԋ9#'҈J+:.ryz l>,ǘH߸."w$J@gΚ<6`S ɏ tƙI _E ْw F$T8JBU?V 1Ƙ?K |Q`kbV)uuv_?"U)Ǣ(9YCϿ@ޓ(˹7HI;)>4wNG,LXH@X8$E EM&Vl$8M4dl_@gmpɬ"shW_J3d'w~[kƕt1`ߦI)5sc ƄCfyH)t@6d$v60#$4^R.,Fs8[.u,E7rysxU:l'=ҋP`\H.Z଍ ,1J>#gA&4мlUR!;k<'ҐJȴET)phPBiMd$P#e8J3H L*ZaY,ضcTTpi ?dPVĶn@I DyKk}1trFDxZ"F!ekqqq'$'Մ_Sf'lK>2R>+$Dǘ3c2bEw_-Tԣ{ cMF>2t;2[gw!qP sXooqeU P2$y;!vГnU{8zQjsb)%[ޱi4^Ņ+̅A{hT0o9gc0Tu"ғjp̈́LW)rl}9j,\,YV%IKa|TƠE 1{=M;BV 4&S߼:8OQdC6P|Ľ|G8+/Rqx [ .2r+]'T䷯7!wY<  _SeAs˺N+ǹ$lkM ӲRDۄ8p #ECm `5G)*ē! uP) d)N#}Do6 ZzʲŌ(d]LUtcI$NJgmnsp2d8bo_x鹏Q-OpĨYTt7ؼ|/P$'9!PyC9p431Ϝ#dK$g3~1?P- A9:[7g3T]RxRi˒xቧnnXkm9gq2<9B*t^bJg¾@k?oYZz/^pO<3iҐ,RGHmH;=Xazr54qWBJ]RWKNЈ^LX ~8M]45XڂZlΗ_:w0!DE+Oէ \8s#8$PSU msq~KC g}!!t`xDR&TP E{RINJF͢0F&$(SzJSPH;|ż;JabgӪ+LzD#1eNT,ҹ Zz7bkltM3#5A_ mOik(ց(Lrl@9ŒGhbZKc3t67kЄ)7-q> [㝷;~ȹ4嗟}}g{jws`!5˦$tqU^OӘu'4$PɍLKyA$M`uRJ'BaZm#߄T„k/cΦa>tXi.?yE%lv|[o09=䵟yW>q"v%.:,}ӿƷ,asy>TO>7x;)EӴ5 *ۂp!II3kƐ5s 6u:l}ZoD"SO}S8~wo`Uy>DH4C\!]s3ğ~`(PFByIЂBRS?LjѠ@;6 ZԴ-TQMZTX;4$K%[?sاQl B ٸd+C~PxFMC'OFUU̲ܫv䥒!pILA]6Hu$g3ĝ.p`! Mwm#^֥ѪɅs['ܛ̉脤1h1J)4~-oCi8AR޾?]1eEr2FFU538太9]eYGW>aA(j48PZYPuU6AƮ2<nGCw* :v8Y"J{R5scL6LʒlJ'jBE,eJi.jcm*d޾yQ#`IG_a.'bOџya,魥%T8pqCI(psn4k^kfiʘ)UpX>Xƻ: R;Ǯb_rwC,KHbs*:Kre 8i5&߲}=JKVn\t,y\y1ܼy瞹J/ qgA&lmC-r!)tw!\H|#<_׿0G(7 .+Y_{ Qk񦢩XSa#E),]dDeDk1U)oHl}0W>rn7"4s@i |Pu~ۼv<;uRՏw[IzkYjfS֯/9i(c֭F&bIG2 Do+o3wb|2cQAExi܇)1%dCʃu!>MP@xx:OM6:iX߿b<) U1'_>ӿ~e%W8W|P/ir| Le]9jjqkhB.$b̹u1Ta2[2_lʔ8t{Q$S< fVSWvG$_T?߾ŗ:oޣxLqm0v>ȸqdi3/ZDiAa>AJǴ\STlAY;pd~VD7>{Y'f13hdɔS@EqH k;լw>>}+XJ X)""-R4 ! zyD*x;gD P0{VKI}Z/!I&I+!ޑcS[oFxODVDǜ@3kƁq 8aL8$-_xe[N!q H&3*w8tAezRy6]T{Gݰ|?"Xi^!dP>ݭM/*n37Y;g t5/jvMpGj,$+W J m(3l&>K1ַm_  i,_'1NWg)ZG(:lI#*4Rr XIJ'I2D1ysx6RַپdLQ1OT!eۇ̧9oVQ O 2QI:1!T׿šw t;'%٬[4Decu5NX r&N08G] * <Hՠu#ui-1uK#kiA q5E> /cAc 2/6"v1HԔCVBbX͢,eK2%`Yxcq.S(C\u FG AQyc*#$f_.uCny3pu6;O4 EA<xTuIX%X<˼d:2)JRG'GG?kr>err@Xc!+Frz:yH7xK7g,ޅ;p߾]EAx<'4Vjm8\9ip;v\C(t%Q>g8r}@SB1TPpG֛a6,xE@+(h7C?ܹ{$= U c^~%>rۃ.?ڋG/Ys1;4yj<ηLa2{inws)8sj>e8w_*wf9 ҷ6dt%1.ȪsKW?s2xwQ;P{t7 .^ǩ(Oǔמ絗_D5vwɋS'wܸ~l@`eWI#JfBu i"89>ޝ[Xg)鈵AJ\/rk;YRͤ WyS45;@u IDATw[}cN >aXX4N*iC$̷g<0?p=eH<&9Pō )4IJ,[YV^N4iiZ40-JB$#H"~ L# R$#s k}\b2J4cccj%1Jgtz6'2/JcF%:Cl]"V%,KPWMSf=:'Vc Ri9*<8ako^Ga+yXH6ֹ|_s{!.^Ōk>6yY0=kHcf ޿s!a9:"1wP!SS"/ $hxHgwŏTbggt<$YsR2yA#I: m>9tD |]dƑjI%5m=):Xwʭ{9E) f,iA(GG=|Lmɼ15eހ5x Zͳd`HxVZ#tCsh ~k>RV7_x[-9=:b|_$3ƽlnǟaE:ۛDh`Q6?uSlV#U ) Rp7z8$: \[sR!#6qax3yx7s&=y8!:"/J1ګ]Sט/DDЭ !vmk|De,k?@DŊs\r /rM4fmktTmIIN"v7l%'f&7yh̙܍2dfa,Kyci''ט\?lH|QR[슣k\H1 A^MND"lDTtӈO"~4}kňn|b9|2Ysq(`)9wg9[|ulYOcfc{<_v7 Zk0Z!JP>tTAy]^}IXyv}Oo]cmg8Ҭn_Ut:.i>?҆$U$g %$P>p^"g-Zv"bY&: q߽yĻ}g914ృ#)PxyxhHYVD&R%' _`oo(TUI"D[N q?I8-]]T0H{t-u<9[н B|=cV# ?Щ]UϬ=36S蔌-?Yfzֲ 9xP>,X)PҢBFIMOPPc8x6#2$4 eQ`#1Bi8ss8 o1c-=9֯a:bIv)D+X/|=&A%:F*0uC4t2tꘋtKQZO+ah#bwɻ9x.ԎǘK)\o)o-E(KX |6iJ!Nl}٦5lDh\`iXGh#GeI%K3+Fָ8g=8ekkH8W1$b9PYK,3)ZeA^5,KS3zfwq4套x6ߢY"Rdceb:_0/˂48hbYP UV "89I{q޽}[{jk}W߷U |곤i|yJe tkmtڇ?qg{Sj+8zp% GA0kBmD/e~4Xq"Aژɬ z݄͍u:irٖG&9I!lsjSc\OWr| 6˵( )`}< =-ir1bk=coσ7 ΘdNO(NB(PGmbd\5f}h!%H۲dXO5#L}&{v:n'ɺ}v@a.[w1ο"iuH-ʒxO֏k{\Q Cb-R.EFIRȲj!V5.H|p)W:.Fф:,9Oc 9,A"Z ^GE \pyUЊ4K]_]L8yJĸ6&5 D:s˦"/9kkK:hefhRt6s1?29:N2;9EM=%RpI! EΫ|+o`63Yܥ98`\ѧ೿mӇTuϼ OS6 <ר+yw:(ޓ*ASWE7X85aT "'Y~9Gcꦡq6l^ Mb^|9uӴ۔It<ǘ<rBbzMý 7GK1v٢ζL^u!ꕋ9C$|&UseY` 4iǙkENH^x`/ _2z?87~ `Hml~(T1~KexRDJV&O"Jѕ-CJ,HI$xJגZFD!WBkjZ4{"j1+=uD,M('JSA' "ojn&&r1JVplsgYLŷi-8hJd1gt:lzb! IV`D˭\R5U.rŔ_Oxm,ort:O,O:VoFD0Ju-yX"A`1ҽ.bF (H#mO35n(1$Y^J䋐R"' oKXT8zD2"JPq$HyQc 1ƠYYRlnmTXxق UN#Ɠ >8/q#q*Sh*Bð 4*27#Eh4uu0L{8f0cMS3N'cg{ӓ|΅癌Ǩј$Z Nv; kZ٢8IԔEuv;8khꜪ)EbQR%J`EBrzb:OYU2bcksO^\,zs$[˅5*!Xw)Q0+KvvR Z,<σ y]cGYTԮ!2j0,)O@G(![;{H)G'dLggKWAGч~)<,K8Q7 tP.{S#i\Fh H;[Rbt~Fi:T>x z]cit4ZPöm@8R@JHb `N]-ހq 3pMi6(B!Z&CÇhW5J@60Lz/>L0VpqgM66'2 >Y"EEUT09 ElYRמ_KC c &B/ ,V|cRHI7(I(k:ʣ Cdy\݄ )c dԂDt9.HcM74a)"d4ZW~K·XE>dE'uxzwOˆd}lcj&-Pib6-rCiGeH|]Ekk:fv:UBq7ig$1͸nK-.`Y֬_~9u.);™D.D f''lnO"]}O ٌs2L(Y'gמwnB%}'jDa:lT/*ƪ/+VxuTӴXP )`[7Y Xsn0+X9-}mB$ӂgo/>2qs&Yl!%i} Um$Xm3HG)XIb%I'$("UX9U,cBiRBwu cHU†+PI5M8]*&uĨx5`Yj k\p͍ ! o.== ?SݾzwvXޤsg4oSUe1ns|2N'uh|Ňyrg,8<~h>aq:^GܸO_,nZw 簦a^V%}/6I1[Cc,IpNA8P5e^N)C\cV1zt=Fゲ*cl`cQGEeYyj*vϗ9ip6&۝5,kI!ZF6$dYR568ȫlXN9{Z/9 %u٤HF2Nٹ^zw*uq:2NU#C)t?OA  # fHEb^fZ:VuBt^C㉘+lf:&R SgJkpVAŚDGT}>"/ɴ+^kfq2pNH`Vfx%Z4E,lwZ7[c\g#E$XpSR\ʰ(lmngQNsMMίgܽ [ԃB@I3bxrL1:ΧLN? ]GG"fXH&w9> UJRn 6!{nIdA>F;G'}nn1NPY;n1+rјHhZ+~+o_gR fV~5INk~m F&c"Zk.'u Pn1x09G,8ȕ"coIc*2Ixd)*lym=Ι9Gל m /a%xIsv؅kE5 [VxAiA&i:`A H*b4#IA?"kK}d)o\p9ON~ZDg?C6޻ǹɔJ+I-tE P,) %=iGJ 8/ KY(O,M58Y_;qګߤNߠ}_)kdD,CiptL[]wB׉/:', ʨ=o@{ne3X fڟo|qGJxseOTkť w*KaxԧE½W9 Ss0NL;uYY>%Kf:!TUkTcf>ωPe$Ov-mu7 *5ŀ[80usd6YCD ؿj!A]׌cRClЩ +[$zu}<~Hp')kus~B`ewo/0̜F }t9/>6ENm<ĸX kNZĺr[Tf%ax;'\ΑGwKWVRX,a0"\kf 8:ס1R8&QM+DQ$\ ӈ,C:$mj` EK?  ^=KPht1)@'O>υǞoOt8d&VyFyk\ytiM!RҌzlmu~Սs+U]!G( ę?ޡ$4d\œsy3?do݇/mF>M'cFZ흥=H֤{W<Oy+ڈsQP*FjQ Y8fMGe-Q5he譮ҿujuvݽxХGx p@JIhZ4w$i̓ORgػE'Y__AȊk/[x:no^e qH{NGxZ;OO. `V`}9[!4;ߕ<# R!LT)ZY$}uf?g-ks5?Nq:AKas^b=ĺͧ.9kd3AYzvUH) (EmjNN'qcYa'sf;$>A aZK531|c_5_}heM8 pR8hG6dfD)J|*B|'C dTÀHSGU^9N T$rIGJ/@Y7bW~ptt@$(gQX{m~d8"IRTeeaXKAB%k(5:gżN8s'}(Gnj"xy⣧dՖTUŽs1>X:J+̴J=.F4RaԾ%Գ)^7qңdn{8i5tzTU[ 9M FZ*fsR%J*tfVTL)O8o)f! qs9B(&19T*K8=>jFJՂ(C-&xE40tҌ(PJ3-Jn=$/4;MEiY묇Ckwг5Ue#MT©Y/5em2b61Mi䳂bi[ŏ;;$nZRfZO(rzr`0@FAD"峴>~@=:yi$af*kJ]%837!F:8;F$J[Xk*(9ʲ/m~'>"Qh6h42F0:O`@E93~Da|>j)Ґ ,ymm p<03S@G^ R=@ Q(z8k4v1` ܢ{Cj:|{*m% 2")LIcm!0mp]Q,X?F _Ri&|s\>פHbwo ۽.Y3f+* qH`8"M -JeuM=ojFvRyRKКi1 OScp ?dkcSt[ LkԤ J8LbofYuP^Ly+1v7zҔR[**Tauv_ШӀDOKe69"& _r?O]D[rڟ%ZY|E!xǢ(7޽sJѻZkcMƵ}.o|@clmWz6w(¹G/hFCI''MR2GBznd{ '{{яqupJ.,'1!zcKͰ94?s$i!xYjyc.d RCr bZ/@F y~ W,L8~A Cj =-_eh>6ƭE^2) ns~ h,T)VHQE7r6m/Nzt]Z`A=cto5X*l2 ["1a0S)uqXuccA7jX u c&vv1Uwdm%ct4ُ}?S:>HԖj_z1;z;>%>34&!2sKR>GX[鐤Z)28ƻp&[i?'mJiYL"Åfεۯ"ڦUL<(yEq"H Ʌu]5Ƙa!:ы&guE][b:keV;Z^zӿARA"$%9#b؄FόJ7.HVUEhw5ӒIA[HR+M%D* g3R{?iqZpN,SG}6`q4DIS4ښ, Tb2?U q>0p.,ƖI B$Z8[PLɘf#:.MwgVKܼt:锷G7CY'3tJEB@ZO)Wwq|tyQ5Rzn`8X`6bC ^ ,[GF34c2Y10.k7C#CCH.#% {_څ@|Tޗ /8c4{IR"$ !=oe}w]"e&m%H"XҔf3C?`}I^Y*|EN4xF um2G(8`*o2 Fg{#_SX0B`d@:woL$Hr[ A,9Zhڴ):IIҘl&k綸u ;|E>3  C/~ݟzЃ`3Rt׉H=#]9ߤ&TVWC䴏+8•%2|mH"d!`L8IK)B$  J"uRtFS T.ojdزdv|Z SZ^""0tuoWP.&T1:> 9y爢/?G?ALuIC+*)V~}ϼʹUńZTG*Ua(= >Bn<ki%sMԋps0c1slmqXkb t EC7"#FHtJy+M͉NN9"gB>>FuΡVvh_%m#M bZL:ge%*cͧa[NI@)Mbcmnw\yt._dUkJ^W_|?[7n7Z0tiż> 4&n( I2q$HbF]z >r<y|n QH`!/@g7i)yݥEE#mP_dL¸s)ٻO^>*; Q#˂u{dqztlhr޽#r${!=O$|HrW<3nu/~c}^=^~.Fe9{W{ \-jFFikM5鸴F)eDZSHA<3aD t/l<:MTqϸ=/sO\ @zAe`61Gv@PcC[ 7͓C46,[vNxVuͶ9I^+ƅغ&sy0L.e dkyv Q:J'"Y{kHzdH ߍ4 0TCDNHGX~,~q8rgꍝ&O~bi8`+*"E݋9G19 _- % 2/= 0) T[zɔԍXOfD 1^x*$ <3k) N[Cԭhc8E`1u4{Gl@D$Iڊ8֭{L*˖ FNV5zeA`ax!A81xO$Fpaf4$ucu|>gt䔽{{2˂Q:i{w.^X eՃea>ϙ%v8IKCy0Cg^-Nx0Pb5Ƕ  ^ $JJtA`52$F,qxG&B.jSe8&x{$7}&Np> 3 zCn&6#9ǵe|GJ[X 8|Fy2O>wn4IG[M4讬08>xHqM>b8Ms[?3GXbXGPR`{kFQjhh=ygX(Ĉ)$:PDŽu!)+x@+R NkF]%/l_9찏-Jk=ѐnO,; PJ.)ĝm̩NO Ȫ@z3&n57W O Q*p(2*X*i'يhnnPEm ~2lA>/~zwlv%/h ?'ΨkGhX鶩s78,̙|㌋MM̦9 WwzUIRڭU11>A60JQսc} Fx) I낊ΑGyﱻ|6.+:UzY|Mٔv=> ce3"y ,݇kn-'FKJ 5b~c/.fCƣ8hvzg?GIZ) bv|@^h1(\)kڭk[[L˘}4GM16W%%R>@^xo4Rܾ{oxl6CAifyok-gןqD`6Cy\6x'?wxwb( 4jS@WC%|b?_$p75'.߹{ʨ^.?[h:PV:&-IO(|Twx6]V5e_!AUcc'$;)ǵeܯ}O>|'LcK]dPYOB2(,sΐ鶛<|.c%dI [/ >uzDli:VNE N)j-qHOrmIBG:H%#1w!-ӻ`9szz֚snc{cp2V! Iu" ~zB*ـ!lsn.G38o =AU~..Eh:ҀFJP7."eqBSbԡ,VM$(F+1u8*I(HRE#w&M{)^|Q:BcO.\M\9gcmllYV ce*ב*Bxͷ޼pA3h"<4m!`0d[Y9;ܗey<_d4H3Ʉ,y;le89:ػh:e2S5ҡl1 89ϸ{4yKLf/\-{ʲb0 $fPURT_.GaNp EeZ˧?)Οߦg=V1Jgs.k k/㝧ii3c0W5Jk0zYf,T`zdtЖV$ϯx2* IDATVkGNxdʈ$ R6KlK)QBe8\ >B\UL9_xWNc.]l07A‹`"{12̭(D4xᑮBER+:lZ [Jyan-$/Ri`\R1“6bq'y0e^I6ϯj1w9:2OAca؊j6 %eUIؼDڈIZ-f٤h _:6#.U7V79]2\/JӊvH66oOg70PO[j)jǯ< ޿탂qU2%[_b>ҷ)4.*?C&N];=UDRo;oIy]:/>ͭ.Ѧ%cʃw(QI*xX&&t2YGC)'o𕷿}sæYyX`H}~NNQH3c*X;Ź6M2dBA){.},|ɿc]}ytgv#{YNOφf])@7a9 tcO`XS|緺Ly"> ooNxf-cB?w'3rI}^ΰd03/(僽u./$s NJ8$~8\=`K$ W(3J[vA2X BaVkԥX T:zaq{&sshg^♏} SNgj'G >GQ8*JbW' ,j;\nQ \t 5[9{(t:Y #gX~/2_'XzNw68kp19?`vcHj#-}̫ % "܇AӢ/NҰ6I6 zIݡN)5/ȓ_Oש|!(3$f R=8ʡ%cI% <4tBIESx޼N>2!!Ql7v2H 9)8 EH]-q`-8#›cn* c@( }:RLR`aq0(Xb+㘲,MUI`u鸠tH`!TU5IȒ&yjS.O\]^]|/C0)lG|0:!R6RautjPR3 CZYx³I8֕ ƳQLgd°1ٔ*_8[aM|3ok録g̋ Is|2 ro|;ǔEx65NO &QsS|%iB 2͘Lid>jJiPa1Ki ZL(_gLh}xdF~"YYfqZsO҄ lDx/9,0f^xXSUYt/H\Y@6xq 5q/2 օS 'c^Ϋ(opҖ %Ma!P`y~#7:\)E"58he|ŧ GȖD΢ɔc}6Mm [[u#˺6g@ q7Tk v .ւ88qSTLv @Yqck1` xSd )C۠U:$ #RFjIi05T9ӂFCA^E ^ 05lJJ}>8gћ=4EpUl:c&+>~ [\Drۤ 22%(ksptw^{}%h;#f9uN0_m9z'=_(9J+GHB,Y_]#R`9q|p!A?Kx`;_y?x \Gէ~C"?))3;'Lnߡ:>J LaKǷuJf)鄵u]rSuT9֖刢zoݦ?-xǹ|OupȼhfIʼG ?اCZӇ|_?$psoBXYfp擟Z)npXG f#'xo@C:a^7'0^<=}2r48G_5VZZZsv99>n'HJI*%jp+<ߗ@-%$^lyPEyշyi5#\]ceP d{{kHnC L}֘|ŃhiQ \L`E33\0I$JLRba obIC x8b# oܣccKQ$Q1Xq QI F^@ dcql3z-*C8Bel1Ri~9GyfV$IzшAR/\B 5{|5o{Y|^mJ)8F0YϔÌa|YA^b};[#/&<%.n2e'l6cGL3zq=D!W[$-1MK.'5, O(YxD.lʸ=!119DB8#A^fS&1Z+ZΌȥXc[`.X[ vF1ߦ.{ԧ(K8FIEQz )(`@8yqu]bH{~i>JQ5Q2*ߟ0Ρg4!p4wy&ZKҬA%FLn`beu0U+.Z &Z`(>σӄvIYa UQB ~ao^\va^P>/fxyn(gM,;9No~9gP18XV:B^;?xEtKԢIBU^gܗUf@$*|y߽~wЭDKJ5[m/Ͽ¨oiXTuMI:BY!ô@Zq8ӂ@ޞ' ")+~$^(PqwYwc B@7M.9)Pl}&?9gO*AF\L)/c JJ4FPh2aVXInu'25Z#]Hm;|>PhAU֬wnUZDHg*_B$awAȄ&D:qDOov|6ev4ag{W?$JSTŒ(^x8HWfYHZޠ |LL]Sb,Q";ByLh5 E DB@d0B^i˖R,ك}7{w߻F"[[x Ӝ2ה㢰^.9I*:5.|ch]0;ꮢSe]U4#SA)gRP0y*7nLkF[]#|yoE]gO_`;j'l 5JSł.S"6cz<.94BƐƊ۠ {1C:m?4ܸ{yo޼wh\ ]sg*MYF m(  GnR.皺^2Bf ȫ r5ZJ#<z~8ѧw+o~eΝxIuwtw~E[Myڞe֣ǽ07E{)_ M2d fs_2o}|?gyJ! ܿzTRh> !h!:dc T"Ta{8TtźF+E]%xNX` wXӲ dDD۠!Bm)J8maEH ]Scqҡ>&)NYu&yG04eK0 ѿz}$\OtYW"IA<E%(?cQSXmPw!N!$Q_uU}kaDqdJal* B/gh6e\%=RkX,*?Ǖ7 9/&5s.UG] uAR9.d ݬR*ݾ?"( i0U# 6o1.lԄ3=/l* gٝ۷x7Oˊ4QiLux쉋\|iz^`+Ѳai8gH[J.Qz.ֺ2bPrN NA dI@0e:x̺-w8{yjx{@ PJ0I]4=yH!֖n1)ֆ$IF/剝!KX rm י,Ih$Fɘd !%nFfgȒoړZG:˃#g`ta^TLstmw;&S9e®P>{e ϱ6;"ϙ%B(KQۓ=TIVP{!C3KXQWCM+WJ0e$+A ,+ͥ׹y\pj^2 YaCxR@@#pC<8q BO%t t%Ʉ7o[1ۭ&0'yCWUx5KMQb<8,s58 R{ቄC( ӄ3[CF[]E'Xzz"t=>4aH7t˂׮꫟bEkhۚFG_F~mx|ńm~1gbn`.ӻ !#=rsm=u`K s3W ]; +B }kz1QJȽ!X.HeQQ\_//}9}C) EĒZ7Lкam}NҶjےBEfKC5˲KH6 %Sn-5w,)BbfZ˃C)i (lot:Xt;PQW"9kkdԾT{gYTe![cQ7wHQ_ 7 ZܕA4<(=J3~T2X+ɣW/XrK!H#m76o6%EB>Lat-EQkkkF#) v%JG4ڱo`3y~)}Ny489:ۻ.>ĝ n5Ŭ/j'wGs|^ D -aLy=4?zO7Mdh6i,Z(Mw9wxXí7uI8<1a8wbU;GU7,n`z{15 IDATP^ϼ24 KEa=B[h2齧ۍ%Ck zq^Pkgƭ[wRH+Q2D:)c [z^WʂE]D"L• \z{گZ J(+MR E@m &GL3o %<^k@kD=. g*UnB>OxMJRQD L'"HT5^EN;:30N.fV벒ERl %!lJIpGDg$RI>S<8$m-,w=KEgp5~%HjImxLEũaX( ~g4^;XUx~G8cF'njOTq3kO@ L3A0KSB=&hrkSgD^'#xF=j9\[Ճ93[ #ʦW]1]LYŒnaiJCTW^FSڂYyi+(J0:EEMT?aIjF:Cf!&9XS!E0;ZbuJF5:i@HO:F3kM_ TC1(i_Ͽ)C9uU*EoءF̎).pv 1o8>oGr̚W ?ul"D(zu֡[6eZ:atJ Q'#KݴG:kj-ڨx%%Β$~7ØbcexKH߲;Ƶke>b|=uv ~Re[C=dA29e `p|lsOoq $ Za1G}W_zjDk~[6156hmb bNQ,lGf 6ֹ}ÛſwэbG_@?õTQ_Bg<EZc'lf~/-@("F8cQֆ8Fck`M"G:M$2)&I02Bv\xv.˽,y1'L߽|YQk1N֧="ٟΨED QCLKz(N9 MSzOoZE"H:Øtr %1}ׯ7LY;mP. g`SOg9s6{2?gG8@.$fAd W?2GY+b2QT"3/mAc<_^kj)BTŃ%ŝcтf/s|݀6-ԏ0~  Ug^ :ܾ7T/ hjFX,1.Px8g(M^hk~| ޼seNXtB|>rJ;-˼`X|}8YL՗>(͂`)ۼsTUATӥ̗Lp~wANR5 !=Ȅ! w*HTNuEغBдF2Ij5l 'o f k[ U_C?QGoa=EUS-B蚪ZƎG8|tmR $/V3lYN"z0_5~CG}6HL]Ƕ7scդeæwl&i'@ S[]?b8MFE}<[FS5KcwdYX.>=ޣ˂,ѴR)Pv= M%O8gVJWY!5P'aUWLP칳QLf(&V浊mjw"ґF[k;]k,̃`9KtpOES&i7U8 >"V1 T>}\a:[gixu7ِ4A A$(e<>^XzQD[NQ$pB2B s`~V4' R8"H*iRH18Czɓ9?87ܡY,{K-𛦢I2}hGi&QRg詈#ӣHD#nB7cmN8;^8kPN;`:ܿwίϿkHO!ш#94MU]2gXeZFq`J!d)w -YYvZ4E8* $}]2$!'8&Kwe%7h{woa$s"$JMtH{]n~Dv#=n B?(yO]k {`PEYQ+72-h,Vd='1aUCD\K<;=b4p4<(-yw91nxϼ0v"ؔ6q΂ ꜰI] 佫u?_=< m"Nx|/˜,KIwiw.EY V0A2+S |m&3.rCdu&|(kA.k . !aZTuſ? Ini=V,#)uRFɔcN&TuAEE]:%Q7g/28n I,X߃磰~-,2nVb4QiM]k|IS5^yT% 4E83km8& 4@1Z(X$ $f]|"s_,w\oqt<]p7KCιc~y|ِ/+:/cs4"MbuMu8LfsC8Ng %e^! o'+VhU?n%Q>Ā++dѷ dqbYo?}GʴrH%}(m?{T6[Hu?,V`ipC4{|y`U F۹V~ԡtw)#fwZq؍t ɯdu+܊-%@k!yE֬!{* ޼ƻo}O1M5~agzt)ŀ5.5{0j 1+39KP v/X.Eq@1NE/uD&mng@ѷ.0dWз蒰DFgO목^"?7#A(3HKY75o\ڙz#,d{ǜަw~qk1ֻby n3"r%4 {W5DF~anN NWy؅<0!L|$IâB{O'!ٞpA#9gOl# 67fN}= H<>Zgݺ˭Kp]35fYc "xeRyY0%Bc&a2f?$un A<SYOxf !}HKј~aQd.` Ϝ |P([K' S=c8%HMM 6}z֠5W45k1PJϼ0hFO4?Lh{D$n圣ْuUs .ΟZ|YFԍ2AHQ+sCU!>75K`u1RXwY^?[G[(`sl^IHk"&f63l"g 28`⼠(JqPHG t-LC,Tu6zD3YfyͿy&8ٲ:Y(5*0Y2wm O^=p|9Ӄ~(Ej2 4|w# Ji͟sf[Z1ye.G"ǙMvw>Y-e=*%0tƣC$B,iXjs8#KcTR0^)B*{=suFPSqĨѨ> 5^*F>Ti66>3O3X'Mҟ; g֣-ȓR#ImCBv$TBc,= -2SĽ!"(ᥢ֚8I]ZָF4렺iXjJ *&;@d]DEe}:eɒKpُ_>>FO4f,ɗYɲQ$H N'ov1ajQ đg=fYBإâ / llruN?+@{p,pɃɅO=/>é7;' N?~/}-%M0K^|i&f#aβ-201ZMs=W{?|K^fr|D%4hH+2 u-b/dx(pͰS##Ͳy_"kIkA̙s[TItCdQIJx*1.H@%Ȁ HJz|ڇj.|3$^55'13m^|GvPyX"YM/KyS6;[TU'f8X# $f\SBRx?z? I~BVI ε!H@%'ч@:A6O>d(GX+k=8kQhHG (NXCpo59?Tm*+C"N2<. "{ze` /$}YIZHdKQp1=Ac1?frp3}_+}s#Tƅ ]U.ya J.5ی#u7~:]A_. 2o$MƾP1!c3zȺA)Ow(y#@o}" 84XݜiV 6¬[ " Gs!IE?sXNHyO^$2&! ICړt͵_cAK8c^_*_~o稿]sMc 8j ;jdfHx ry"AMS`0?JT =~8i. Q7,Mɗ9ZNřf STRMatÃ(Xܠ`lcg_b1ϲjt;4֒xO'̌Wv"z $8+mQΡ*kA`GB ZcNCiu vhx88\6c+1,f3򲦟%[sN;OEAB`ct%sywp9.]&4R=$ߋap>S|+cX.r-ޜ)(#1iX,J͂.vX"EQs<ZhEm">UYXp5ۻxw#ȑ&LW%:ɱpVl2/ kq>$1Ak^ɫl RHh:(u!Ԗ(,DԹ ƣ"RUK/_{ܚ9 cj:@ bw!QxUpR3(G0 xze_vɭ' BJ:NH|`E"Ry"xBY3 H=xXШ+Z\Sм֔ %qBlc޷Qa%q-m>\r{N>@M;FSUu+"x 3ڂǶ_/}6Bs>)K0._ʐ񣼤o}h<VEMS.+֞<ĸеWDu/tpEH!ZƕT ~~wi_~YvS;oo*g{ _NxzL,a&yK"uʝcTw7oO?uaQe7T,Ƨ8zp޺0FΟSO3J>G7 U8wcl`㶍kI=m͎qj>q]/+=}9d,mAF4\HDJdi)!IOK;s1]8m_c+%6K('N# [CdpMn_zt׬XVZ2^l6h~dZ.vo"[ϊ"/QT!&9+[eѪ$xבQjtRhcHDB7wߝ22)q¤|.b=gHt,H'.噧ͫx,Xr\hdC7Rĩ{AafݔDj Hai6J9 ESU%x:^"#ٯ._7^#S2/r3֢@*XӠrp-& K/>bwc۸DദΗZPVk A 3SxخRaYsn\M3ul_0EG8dQMmӽ& IDAT9]v8Ѧ,JGCbaw<`}K],Ԍ.ut:)e}K8!Kc k*ZQ1QR3ϒ1GGG׏O\E]|q"X6ʭ g6wdȢi9㨰DḮ<{ zJxj*f5,%aǜH_)'~5+Uj _l'%voKGm`>)U^az%IRXغ;18g0Ul9MpGog5+nܸʛfHݦP|b 7@ RkYT.N*A[8W;GH]$JtHey냻TU /x-l:?Ҫ6+Ia?1;w Qrn:n)Dša0DaPq 6U|&aDԨ(Qבq^$=@ 3nG{{[̏)v2TqҠt ipќǴg(d08a!c-@Z%JZIǵ.ĝl5yKY5ֶ"E8㰺DXt{M!ޘPqqnhF l`sd802,C8`eDw\%'BEzqʶ]TaH,1r/ Zbk3Us5)2q*3ʲdE1JfR% LH% 'u>MnO20G o+[ R/RM"C7XMuL9 ZuP!N]N_DEQ=g)1ɮIRrOW9޿~(!,[}F8 á(%$+lb- yy4ۀaNw9ww'ye:wƒRYzgs<9M4AD HL+llFM/U~TXzXDq[.3izSw`rTA4iO^dH%XZ^dia`@:9L9&79ÓFiQ~ >3v)5XvW]`tY3 8ir 퐎h#JHjMŸQAp*uoBb0k+6Pf۷i-Uaiy$$DMnK{_兯}q8)N8a~is*ap2IgW DPINz}Gsc y FI: XB #FǤ}vzm,m¡[fYi2#'\^իāb{{o0MJpN f8~Xʞe x0F4_A,M\tأ֬3JS^s,f7 BT`JG9* &ol@4q.D0lT`Bۀ4ln \\oF&ǣZb9qҢZFd"CXC^cmknVsf#gXZ#sYV~O WZ.OS˜ƽ5TS(K;|<3cv {Gl6jVyo 7ﴈKl=70.roP [Y?',Ą¢L[t[6dpRK3SL5kPyi }h%Bk|?g>X y)EQQZ&ƲֆbqQȫ?,$qij7ejj~ý/?kQ$`pc2\Ǝ11l{VbG)G ] T5wR`3LcjulRGF5')>Z./]l3z6 gσpƦJ0If0.2<>ƒQE~r c(FZhnY1F{IIɝ8% @ע\qG~{ѥw;mq/4i־u~"?<{l(vv9{=Tc$x\kR )q2UKX:SPJ1/^EA85l 3܂[lV*!?>(tsTqVuSeAjBJOt_Z&M5 !jL$,$VXpH'J0_k/K4~dælcO6O~\Q0f^0s.RbGrM[^?9tky $#w"״qHf:i˂ ԓr> gO E3n(:Ym)OR<#n R*Iݡםәbck׮F8C9<\r '%IIXm1IiqΑg)yeYjMMd&[C'$HRq!229Xu1PJMwzaB]Uc&8_"gjzOO ,Id$P4VyӔYQP5ŋ E΃X_g~a9R7E~a>==.5F$9G+P;ӂH.$biI),Yl.vm9!e?BP8wQ< "V:3IHQ`5zD? $M)IԌ (,Y=+@_t.!yiU|V՘jwv)P$I̍ u[ۻαTɐo sihlc;FeiΑIXZqpxH?/cagD%*H=Ӎ}!+!<Ъ[R29`af)Y]egg (lp3e$dž27D$Fʢ(#'&ekW8ōEf)Q,HȜ88~K=87^}˃cJKnl_kvv~H1] ɇIk}&Zj:I>9vt41'e%#MM֣I3 ҦٮFtPì`gLg@V 91w<Ð l,ѥRO=tj2ӭs2.>y Οu~`}TEѳNRJIEQDI@JO TSgh*HOS GQhdiѪJIPk@ N;Fs/XtɺLɘNCd K^Z2HmplX0 21͙)ZqN^"P:DjtSD5I49uKb Ki'.wrzo+בm5iL#"\mܾAukN6:3FK-3%o \|:I'ir\`~H9mu IҔXF%pF˘Vcf<1Sv>Ukc ΔfSjfX@H[QOs28ebYFÑMG_O(!߷I !*d+j!=!iSr6rFpq ~U#jnp3UQ,)eY59X= o'ȒǚC@HH(df?є)x%ޡKB;LsoV8a‚ Id3מl#۬!y6Ry(AZC6:C;O@Н[bx2`w{kWbqeVE3NS|; .F5KULy ty!~OQgxpxw T3Pqr;x$CЫ/v)#K^42n8I˶B)F:HlR)I})>7^"e6Sub/`JMg0i@`F)4D"}uML>i'2!rl& B2 $ I؛Bk S|]}m1 zI:Y¢uGiRQ)jXҌCzQT"4`aG 2՛8<8?O=IhvGaqB\KrvqT6bQblt%I0O:zmvvx7xQhtXG(!Tq~8t}P )Cvoxĸ9.,L* 5xLR%D'HFFe2$bxR":EΈ`,1GCaG[mX;$K aNmO*UQ+ch)ړꘌtN  mYǚ^{q$u=e+e_U?O%Hŕ9n>wK/SoOqw/?YH+&Jg FkʢD[@q| DM NT=:Íp)H3VQrM'/\ehl GZqIyuRͿZt!}#$4"Ou$3qITIo$A9f1*HBX1VX!!:-Nxw<&r|Swlr4xp)>ѫa Af i^RP ,i} ƇCNV'# S ;(f٦j̏7H]ʹVɨ?MxyH,.]0,QH)A C9c>Ϳ<~7C [z=_os~׺ ( ۂzvRgBB=VNjYFeA;$qH *ƕt2pJgK<!l%/CB?$."ooq 2]0R Ǡ^8O)D3ߌ1[$FӃ%J1 SXr2-ӟg}ec 8b#=Z{Q8g9n4 Gtmz33ԧt󋬭1CEytq#hBYmR^V,Y113H&eHa˒0I>:?ݓ> 'VKb9QJaJq:$o? Џ[=)5w"}a07h?L?@溉wY}Ua8@I|_3>?wmV3DaQH0$HY5UJߜ+$+߀:L)M{*.]¥sᗿƃtxFUzH%εH AJ(Ys#nܺE>^txyfxLsǐ2hMu.\& b֝!Y}x &7}ByS'%BL0ϣ]>k藱|w&ѐ4aM0nhuu.]}&\y >vW|qӈ}TP щ$PHF!?fept8DZ[K!- /qU6H ZLkk\>epѵJEtM:yRJ\6טRdrsL<ȵU d4Rx@B>y 6}ilX0Rf֤hGZ$>2;@D!q’{'EBXGʥdiF` 3l&iFgR04#Ӵ4ةY~xUq,66Ik4/Z khZ^cTv# (u89)#=|L猇'@0̳' 5l\$  ˼}<{"׮] i$%l V1ѐ,3E1Ž dVId cG$- 8:=Z3e4I ᐣaNQ:` RO?G=QXq!8# =0_BS0?g #<|5.\ǟ癟?n2f%Z͜!K/ibէ0bߓ(8uZ,,$1a`.V{BJ)N2w!\򞮙{ó3Jg<#9edC5%A ɳS0~G#KlX]V8-ax"=*Y}d?KB- Xy?UVAΕjY*Ix~%&^@ThqL5b;wO55IBVdETFb j6A("DTD1.pQLh޽<|JcǍ/~#/]_%zxIfs.%Y F0(-儀a}|9'1mD`"4hwhtv^W_4"%{zQj1lq4iNϓt8a1:DHC(A8ZD CSX5^ͯp+_g4yx .җO!:.Dg٘-iFt:\C#p*F$ qo3bF'9 x4%"0~c\&+3z1"?wvOII٤7զ! ta2-b"}_҅QUm[:=1{ y!ZN!o(&*QX }NƬ2&Jq8l=,Δ T8fk}l<^Jl")dE lRf]? *D(xQYOׁ$&Ar[k0HD6`;SWY;w8lمc)u^: 3 orȵgj7`q~<:!d+Ixc '{1BG1y5RCi e`t¹8c((BxBQ0v'd騊68,4*)GlwD'ȭ&};k 6PcuD{4y*xx% m #HI`-58Pٜq:Vkr]L$nِ/?|kcooo\;OVR obEW͔B*"Ԗ8pHۂZ^{.7n^'Q!B ^vPb[`"G*IAQTgQC 2AαуUVtf.6v8ܲ_/h!s-\;9@.AyG 44b$T /O߾I坝!SܼsstT^>_{@aen~$ ךN`>쥝 ;y| lӟlgqA"+)Mc[FkMoTmIȳ(=`cqn2>=KpHγS1Y!痛,*c&NH ,Y{!ͩ6e!'(XKJL) !4bbv quxzˑm;g1MH ;=բ8w a&J6)pʦLQ'L,NT_J ,J(%I-b<JxjYt5Wf,wCٞ–BhMJ+w4:I#"lJͽ-"gb[IM3x81f85HL> 鿤kW_;sMktZ!JI-/-V8D l\%mlu~^ r hwA@$*/ˈȱ`oW= 1٘Es0HA:eA@vG^/cJF1Jxt^xZ @ / %ƥGU3ShQQ$e OD*1HJiGyu eeqL^Mx&*t(!RHuJmp$bR:"U EbTT>fȲ$΃OUaC/-~k刲F_ MT.o Orn8J|Uu2NGs7Y?ޠ[la-  PoO*Rka<g9HE R,>3:8㽸% ]̓R .( ]ICi[eVcFcȉ=lz  71it ֐ l٠26l!Â7wS«7MR ()#8Kv(,' 3Z׮^!##D2;" CGą`8@e1 01t$>ѮӬj-SvS7|*96n)Cұ :Eݣ٬OF4eIV'"~+7=ُ$ t%3:_@F+ -0 $ #qȳW{Ӕf=RN-xyy(p0"iV6UjVA0i ?YbUU۲Io8vMV+o?gTα1d2h]X)O33>QH⴯y'yfTzݛf"/H@Uasc:1ʰUlJQ֔l첺޲iΟYTl%CEΕMi֚I >XJ)m"Ҷq@^aaqn_f9>aG _`S7G' @)0)1\lJnM) &od)z a =-CDA`Tڣ5޺{t> f}bs|om'BhqrA%YIh:P#3XSP40ARU؂Zgk]{nv 5ds.aʒn!&]WceSqh BNtk IL*g]Zʿ-{L1H]?DqO!R3*,F;0I޽6)Ơ7ӛ@=).!*`?Xa/@6RRo pM&G!,.g,]|X]'7ZdeEoAӘ"j,AYyI43Hti )4K99g^Z]8ǥ%5v BT<!dJH,% 0KM18cISDqPR{&w t|ZzTҡ&8Jm(6Us]胥"5@@@0Ip',!|d-dF%'L=B< QdvJV#bUGV o[;ڣ3ێ|u>"Jo㑦^oа5C38F(Vkj6)0jHXQR)cvic11?&ý]FܨM}ź) Ȉ&9vwNpbj B93d !)T '÷_}w]9V X'<}Gu$(҂8b&b DHUyRHܿ0NPA$NJҙca4:!HB:iJ)+@_I>7A$q{Qk4Urb )GPij1 på %cW0䄂C22E?Wˆ[Vxodx`ZDqgkOMԜ"WhСe8`cuZi.)&yzpHElnŔi%>_&bi093M:,xןfa< E$p4gpaqh̷"q(] RSL: I DAul\+U0"cjn'qaաk8uT@ۀ9:$ZDGc "R@Jz=c9q.2;;xZzm^k($/]CJjxQkMHqe-22ln3VjKIX^C=-MQʌr4b438:p4ZKG;Hf%I hdi{IKr(+:Eܧ2}]n{gJJN@fyXD1& ֞ɟrgmyi?8[ue#GYa*8JZCL#Y[#wi7Ibd@Fu(.*…121/|eNg5^7HQqYM NJxǭK[Amz4gWl39ҹ q$h6z.Xor^~Zg<;hv96Ghgҡwob8;CsGk.ʳ4 (@2 X:A Y煿?]LZ7C^xt/=!Ԑ9MhfhN7yvť+3)XkLy;րѠ hO?\eB7VMRxY g? dC8BL+K+L:#K8MiXWE[˳)$Qaro~6E!P 4 fzo?deeť|~cbJ;߻k/^(ҲGؐLAL`HIr" @\p`̌lٖm)Z-u EI.xWŶ$[AtUX?](X+onǞ>?yMi)nJg ~~ϣG#f)Ʉ|N1l1 Õ뼺3·mV8VM"XsbPJچ*QxO$5R}oz+ lܹ'w5&`5S. MBS[_cj45L5x&X"BS^D"w&UZ dMV_ݷ6;.Wo3lE?FV]>EkOK*!.z “Ƃ~O0E1ZSLXciw(c._5+d툥uϱw[C^x={ UBpLkumVπQFZ#'Ԩ.eq }c[/O| g/qU~_cqڃ*| (%yŷM|MV69w|0-N[tm7x7d}mC^y]MȽ'ZQC|osŗSί0il\0k4fu|5*#YEyXS 9]#Y ^`rP՝ ! ua旐Q+wV8NR=9zR_7|~٠Q  vSݦ˔`Kz=w3/_g|hU'yo?O?;~3@-]D)4#,l>w;8z2&5Җ:y.E&l!mi(I #L:n@(L3`mlTiͥ˗QqPn?}>?~Z 4IL#ΰ><3"?sN8<|sܿ6I 2HPOvz $ / $4KsVdI tBer :ۏ8> uf8>el͋h&=-ͷjjcp(+qL#t-bv{l>LIZ|27B\$Bx!Bg]&,ƏoNn*) d!%!\?G8cx>j[(6׈n^ L '_#؊„S4t~^i< 4ōM="2VWNFEHҎ*Y8YR@Z׊NG)'^'I}dahfVVVPQ + ɪ.+) eSb>ɈYGpzXk$>+/3MaPB7)5$E#+3k=ҧ3) x.ƕ9kgİ>I6/_WA|?KYpPaq֢1L(MpC/p䰣 IDATM>Zjk[/`2@4OܔH)nZPGHiS* (%ӎd|̍p\; aSŅ~,%z:e9MOythYq;Kt6/_k׹I,IIk錉Ԗy1p8ϸz9NƤ±V=rG.ͷ[yϤBI~{u αi;㽢,*svm˛_sL!cYtRPU5Tt{u_/@7%cUDQƒWns8mY`I6㸐e;$(A ^̉ "e5">+WZ2RY-.t(ӽO&CvG#l9*P1P rk+ZY^xD>1om91 ?!fusr7hօ+[TdL>S$eĭ^c稒.k>N=}V s?2ۏ@iH㜧,L`,ɁFYt: %hhI#R_cʂh7.3L%o<k2DKbxu X%6ԩ P{oŋC~^9cfA;qx4aqXB KR̓FWẻC9!["B)$]TG_kWx~zrf39ڳ9C{ma]1ڿtօ-FGM“[C1$ bEb:=JV[7TQzGnq֎ZbM vPx6;+>c?Oxs$[7QwXN~qf3&;G %"N#oH,8<~޼?7 ͉,<4^.$G)q?G1t8<szkCxlزf4P`=98bVWV> ¡q=268evD))-/d+MۧJ|JF '0j# }>B hFҋ f~&^;7,ןH=J@%Ii ۝e'9"[/1 v3gF8v%ci8_SXO=7#Pip.|&e_9k[|띷YkC+=&2͘;HVgC#d<Ģ"㝡:TP{ӌ~8s(J )`Je x嗹r26 \;c3`H3hcZ1*%v~2?9xs>#ZrbZZH$"3+(L^DIR(TmZAyϣK!o0Bq3o40.YV[Ϥo%UX+GI׬[-H2ON$Y|:E5I!B$[PZ. vc7E"[yAU̩ʊ3".tI6i$n39kͯ|of`F\yM/9S1G]_#EœBk!OIXqΞHoE.I 4>w>*vwv3Νeې%)%|@`){d!4e>D !ENA.pTw|R:P˃.wz&t8/xs@Z\SS*`\ŠD3$gR`-XUE>!&Q1h^;X/8!@)xMHjo>ΟbܓY }^}M^x~9#,p"7P(J4󃘫gV2ֺ1q+A4c2_#dd# L%;>4J@$ERQN't)W/^b;3Fs˨pLjGQ;@'D6)1U +BMKK!UR1*{Kkk\yC|hoѩ,UW ,摫脤B`&sO)-IM/):ʹ&,]QCgzj1!6tjO ^w~`70Wۘ]f_W&kLL/q.yv:sv+=\];G(9aVxј@7@00 82Ӆ(i7;9o1IA֡&Mg9RS*X9 Q ˿o2H< {HG=ō\Jwla4٣tcTB)<nJY[[+Ě*R:zmZ4""Pl^G$ӊRS:"<FJJ̪YYLR*h )Z?y[2B,/-& @Bݘ{+/04z uVQ/Mɫ8ZOct/4NW8ƟL9L%=6!ƹ6D3cPxfTm7:ÜixPڷ}cYWȊ)5 oO1`VY9C*(1XrxJ%R"ܷVem4TPK=hb15Bin,H-pGz ﻀBOTu`\Z55l|6D MWh Б/zzD):tUEV0x ,U _j/TYX|M`CzI%|腛|᏾ʵkQID=Js{ۏx_7r0J2 6t.9;`i͏|ޠs/<|…+(Ts>p|Ne 8V'FƊH(z/kEŝr̆n#YX 8 @gL Z :-%->{<>ٍM."˄b>B[ϬXYߤhFg"Ѓ>u=!O'uDž!lmlrL'CHA ֖Z>@ c*"%K=u$I< $ee V~E>O2wX 28դfkk8 lҴ0&(Ѥi *hъRoUg.w,6ڨ4Cʨy:d"b:x90aSg;j[aM*fӜ'C)F;ut9EU3<<* |qb;"Ck8 zIX^$ (&Z| 0%O;n @CFIH#`r:/˒ÐՄrI1/rn$cy*ͮw]]=OX]```R3%J' ss?g#~od:o+Riy96Wz{US54ALK(-h/C*O+L7Β $1.GF_B :! ~4QZ!YV60.FCLrt^ 1B"0n6JO$N>jO [P^)%ifiذ55 c(4';H)L99 |K/5T^8V?{;_l>^^? 'N쟮EbR($DZCam Yfoo]F#FpOIJV8$s؝;1?}0+/ ZqPx&,$J[3BT%TC]Q;BΤDIQ hź(H q>e [< N.қQ0(qZ4#J|ĺi;ɕx3f>)smh9ڕd@E1e]!|ROJ c\fRtC'RJx}`b}y+W1X%o}[\)'uAעĬmn/L,?Ҡ1H,n W98|xR8Tۥ$&K4Y+CI8̅&B rbQk,X@%YD\LmF>lbsl=S%T^cjⲘSs* ю` xzpIbL4vg-GDIJiҷesVY$GjCšYu1%Yl)6~w2Yz)C;8|skfđ0 k SZz݌KWoKϓ%/9sngXNo^ ^85<>fB$)6ָI̒T1vc߹Ouv i^1ԔzWF10>KYT*|2{_ʧ?7Ȯ=`^0P0mi-~2c.#DEy:xoB6A7^8_{!=~\Hk@&Y XsQ0otuCmBVz)a*x`qb `"~R h԰(n~+ #$'/NVN֪:4(6R*VŌd`Eͅh>x:B;h!g^V$BAXJS+@5и%I8GpשO2(!2v{ܺuј* RD:B$?\fdFX!b&r:mnlQDah0$T:kŤkK~}_X&wwYe>KL}DJՌ'<ڧ͋9:^CF$Π m~+Vܯ0t¤{7>qVQZqٳ[uEoi?1鯇Ȓ$86+dxcjl!;BSNQb lOW@'($Ga氬xqV'%vVa3evaYsGʐH.[հsڲ){RhpV hTD .bά{&F9uQuʵ :{x^%n\X'Q 6ܧ.[t{],F( Ʉ*Ȓ)@+*NZwvx}5rh4!)bWx!PQW+E Q"\QxsxTH#Q,hQ8. cGQ+WAX*ATH1C H0hx B bˤ"JIS(˘(9JJVu[Vnq0A'z((f9T:ՋBMhuڬ\@F *qM]LH鐑fRF/ Tt|#MZz={W:G˚6fSKv:Rz2Aރ {9DiK$ӌpC(V!#t OYH0LL4J d!w){]d'ƯAxw;/O~0x׾K7#L*W%#.1qF/bxx-$b epyhuߌs[dYo"˥ :'>s .NPKIwH'Aİα,SVS  |MJCG1R34eyYwxoBYehlD(E A~ RHE\GB`i6+dcW%38| q䠥l,h~!|Bʠ?8(8s KIDB`\'?))XAITÜM\RBi:11H RiAVdLᤧ駰Ü}C*{qMn*!k%I6gn\dp%f琦@M02Qq|;jLd+"о1c:oXX|V$lZ8Jex2-3e U/4&X*E;IZ)G!!`@jX2|N>ωI)"䬥 g)*9$3Xz<S)IN gUy->\رb5uWi ᛘ{}"5`Yx..A(I"E]C77H;7l˿T'Se/ upXng 5]!+p=x cGkbTK Y4Xp̞ a]2,u"ϙOF)j:JGy|m"5E]3;)(kҭgpG<د,R9$&smk1h-3wj_iDuZH q6“)&tE)VJ\85*q1RC7X qH_#A8c*jȴY#d» 75XW* q #D:"5B!UFZ/jw|nP g]\kI/H: %4A ,E%VLm@2ER`tx>br.KX'7#:0d,}}J^G>f6QT&B%IQ(i)B$D^E5n?櫬]g(jAŔ"Kb%Rt&i=;wM^iҨfrhNÜr 8 5/KZY3Kd8K9;)JK5.q/?;ށ+9|OXg y[Gҧnsz2;L2gXħ93S6$u qԱI%co6 w7¯ĺxH]1Y~Rs0]eۭfhqiNKE")`a <~$IYGƹ`Ȟ%ȇۡ(Dvh&ɏ OɆpa-T()C#ZY(JX[^ch8 P:$3q֓S4%a#0΅40QaZ2 ‰t`+Ұ:aB-OՂ,gnJ3,Lϓ$acm{G{aޟHaU5̘"A<:xitBRO*' el G'bޛhzw~sγ{F6IQKJ< q$ "@s6 ˲$ʢ(Q$[dV^v\nJ7YGPݨfy,w7%Wt刭Di9`Av9'ìKdjAC_MGdkr.(+x_AY0Rz3/d=z xOz0;,".VayIsL^R{ERᚆ?86uYbꊹiBU8֋dJS-!C3EAc<#ru( Qgp3axW`)pb#RQm=BB9ROƁ4Fur6FRfd޴co%WA)Ƿ~|x{[oIJIkjjtz=*骣e,HY􆂲nH;haf=}8<=ЇÒNh!k:uFO'D۫yIpBH>Vlnm!kM:/ID;t;F(*Ɩ:% h CY}^,bwѐqA,%34{eIM角~B_6l&~G^g;ɪQ2˜n]gE9Cңj4s]QeL8i'$N`H#VD8n^,yo۽D ib+'<${90xk(*NSPUFd( heUC)E*0+ $-1F!H[.]ܦVﶹ"uEǚiƒgF au '3Ћ){<=B;ż̫':OH&I6W]8!ɔHH:k./oc˂yѝB75i BHqɈEc>/8DQZk慥%wNkӔ8Hl 8>@nKEX-Q{TVtH@%95L<)9Ҥ {|!! hq'v|Lz^Vy*OZٞ0u~eŢ*\\e.kHpao$R hܠc6a4d!eJ H1z؛OW@?zr;(Dpϣ4!rW|1fO2qKWobՎӗe4~+O'kX"%qh R"8㇤~iZP(H %VxdRKS/u 5MnlY"BsYrQxb\tݐְL`K{54mL:suV',#7oMyI:lmiߟ%K :lZc}{k$;;) Ŝ9uY%,uSTDJYklYBQ[Bטvd+ *a *%qx7Ge{KWudI'Œ,)%&K K٠"jO\͙|0<qJW0ə\J$J|,ACC$jlt"2;;<}̫ce("J[L6*:=}U ~s|&C$wKB'Q׎7gl4jSw9Zꦢ R5ŝ;̋M9|J2] ᠩ0ep=.?Od.EzŴTZ^{|hݘr1gsuʉ|HǒIea<-yuF'9s&%EliUՎ t^2 Q60n u΀nCMd=mq;q].8j.~ ]%"DT" GEé*&Rq(Tcvjkg)bumue҄pIn,IR&TxlPq>^5p6ozbqm99kKħtuʻoQ߿ N%._f/^d, ]`pK)d %(3~Ľ,O~^ O9KPNsDILc2PKbd*Ks BH$ ~gFŝ{w6KxXO,,Ϻ${l#m>ސ+. {8˱`Ch677=[ ڎ)5̪B;R;G"88گ'r<Kd~'PRqa{;t 㗦 +t:y&ݙ'<κ"0Ndy˜6:u <'gm2ߥ|RRB |H\1DYCS׆b2eޘ>,F83=DYO+#ĥq&]VJ\%!t3F6Ѿ\Ҏ߽˽{\skkwWusYcZ[JdB?815ٔWy"i]fkhfceuep8mjpp{*ҥ$b}(e_xr[{ب19A^ h9» ]iנbp4 v4RӺ2t`b!ghu]K#,싒SS|ލb|c.)-S$Ext6z+>=@ڐGn2cE88c04:J3k=RETMMQ4t;yHSW8/)1ca8ZB1[px<&Ռ9&7Ǽpu1E0`9tމ%g}d48O9>0^e$&amC/,#lmE1 dR(pRWhZ:(b?Ó!c n%@*H>Fؐ+Dp 4ĉ" 8'N7%T$IɬY*5$(Jvݟ.W7IJdN5S%hmjˢr x |nkq!mV {=~pw5[NIӘټPOU5IeDl Ћ)^D-Wz6{l PLk6+B݉z:c$ zp-ZʐikCUka|r:!iO6X'q x"/k N%]L0N [o \ۈV0_KY&TUmSR!urRm*Rkg wS[]nf*vX?C57ϯ0Jb_1uKEI%gsB*wV$QLd@`'9B ϴE80x5+mWKǁB\K%vrxטł`H97I'O3o's/i˱$<6^]+q, A]{/p)H5m#4!>(g Ft 7V 퉤t="po>şa ¡/OiBG Ndl )FDGJz4a&|6 ݣ{ic5y2 kqN"I"Fj8OoxiRۿrxW|.`%zX)-xUGZT3"kxV f/lX$P`脣tN&*E"$"ͱ[xtypuI}-&:ɑk}+)nnjM?Yǽ:>Fa '1.YLX$E&q'O-[{0.K =hZAW$ I'E;O R=7+Dɡ]æd[淚 C~ y1˄%PST5Ct@kt6E$y$%k-Y!2 5o۔,>EmMsv=OF ^7qfx)'b666P"π   k=K-L=-H'Xy2_Z'"lcF JUljKR8d )(mâQzIU HHO*6Wy,{}H$eG㣊 JGU/k(BU5D]_g4;Ԇ{#dFupdJpb=׻}b:̋Ւ$Y0flFX䙝T we:yJ QD7Dv<{hW…aN#S:p\_H1;!f 'S%Vp"˜p+ t21JT j͔tK|0^,Ȧi7jqtsY)!%i,~Ψ6갽h#MG)BE("2>q |Qqp2xBS7Ti$21֓&]A ZX6`uXiMk^XY]벘/m◿B>bd G^Ȑ| [.qwozk*FJHbFc,QC7G6!? =W$^R*pNII?^:/ns~}nN"f[}~l@ 6h$qD"Q~SֆqR6hkTaꝡ9 Ȕs6~"ŸiVb,W `!Ob̦3UE4hk̞A9~틟cЏk~~bV9!p^P;X8_W`02t1?qQ0ւUCZ˲/0ڒur vav*Udi6:<m ϰ"H,H#g» k-Z")YHcI(44ficf>SsNNO1H$ɈiEAYhmUkM0z&T1!ۡ,KH*"L3o>'1dc} mL֔ FJJ0x# +g@6 R&] 1!IIJef X("\Kg05_G񀕼 ~t^sؙs֧|hc%{d1W\UsC3~OvB=K}s5$' TN<lRNxװ.uz|>m,:Y !BW8NlkaI(b T1]`LT| B!3ZKUto^ ҅luyٍs ^|C( gI*m;M1;GOQG䄵Lhz?ס*vWWYM3jmxe^?)T)4K{MҶb2ƞ118%u;;wxE " ewn,)K&WW^~J(E"á&pMc$ wqawO8h Ó)s:ypp w #8Eku > "#1n,7sD='(Gڿ[m~xEQU558Eڠ"vF%:;u#:I}n5;xS>u{DݸStkقqGKMW0Uy?S+|ꋟYy3FR-~Q1uCǠ+d 'wOȚ C<'.I!PJ"DIEÝqPHD(3VB"DKq!Giyp^H!qNQ*pBP ?<.r9`<R~7>yg/Ioy[o+읞r7g>K$l "D]_x<*pm4Ywnnĵkظzu-:a).{G}F"{LJ>4o1/pgj f6NR/LeL&sV~Xq R6\a>R)׼8ڥguySW5YdơG,ROr+?7CF#.l bLaLq d5CQRPIt6a8b{3p:b7Y۾׮Q]z9V}xsr4a3>0ԍ!/=RIj7$YF$s}-vkYJJ"a rA{O EIU7TbLbk9 FR Wmp*k]rDe{=!8)Q d? V{ΐN$^4$ðF- yI$A`D@<#OyZ)IdEv!eK:o~\`=)Ƨl۹B?pgJ@!T e;hNw;ƅ$Y&$B(|NNS![& s5n$,NO ڡ'_̗?yaʂZ[/qW9`lYPuߠu;wtU:Y$ <'c$ƘGM I xNxCx'N ^x2<)Dѯ b 4ͰM߻>~5b$"j%Q1y1I##ܿWogt6 sm8Ϙ͋ۆ,tq4 },} B[T Q)1߫Y)>#r2 mza#Zbƃ7/~8O3"q_ɨQ&/CW~KTw⽧‡ܣ$y)OɄ#v_~k", '~.Κ3wF{*"E~7=,j䥋R;g,Cg>i}Ϙ>詏 U"t08F &=G`! gCXp\ |u򜭍M~3P"tIӠ͖G?JO=y$7HҔ׮ژ'pOg $IL'R* lEU99=A7n/%,65uuCDDED(d)Z.]HT1[̨B0 ''GAΏ']_KʐvDeҋ;SHz%@ l'Y???|˾Kg9cl" A"Rhʟyv_!Mֿnv1ɄtB%|<}:%.LoƝnvEINcD9?M`[󊍴6 Ai 8E!JYA&^A1@8Rkkkv{$:KP$!;mRe ~h9*BpWH'M  iJȣ9bUvڥ v:> R8')+N;S&GG?+9Ol]@Fp~pyV+;5m6 j\Yᄵso|;ٝ8?O{_ˮ֞xfV")Q")k,YhnF۱cdž;h$@>iC۝m4c76PJiRqDCZKy'eC3N1B-k p,t3O\|E2{S&&i!UHQ㜃C6v9Olc+S ʀ4]s4q1.ܜ% W:Id j!(c NS p9$qRK?椵QMA Cp8³<%8KI֖O^NyM&9ppyYzKM6FD*PبKuQk\S%Ji e6eKEU*NՐgRΨ˚d4- C? ÐR[dR9Q DRNLG1R@&DRPYQ|i,eqJolm1?É"DFgt;Dv~?Q>ko_gݷiqnOX{2OV733{3qbRO,xWk[<_,{r2ģ$EnS1O?0ר#_zN1Aa]{k/P|Q̀!Y!$={W>Ih+ԏ_!O}~` 7?g;_z>bmOXm1tqDĴu>`uωv CuM/5[z$sy/ǃy {yN46@"ш6 UF,.- QGt^ϏeYZ9Fk GG#fā,J) ä×=M`\Ij]Sձ.PzL<lce?-6_)%ik I޼Xa9nޓ'l9{gYik}4@ @eNK|֫ύi=11/5aA<#@[d< f=㔾*9|e~xrS2e„%Nfu$_?w- y:ѧLQ h -iƤ݃H2 gOr,'$ЏBf6I8j '$"I"%N L?"D@UV BH܏PV50%L@a}寎 jAOwMS(]~oI'GQr-] lcio زb881RTb/gGxYDq@:Ȣn"Y?ȹ3_uz:"C bҊF%v:4`1u@vbWJkYtġc. (U儴 Bˆ0vC0wHH4#m:],lLmWX;wo~9ZO} |Ͼ{TAAPd$AĄQJeir/SMG?$_nijf_؊-N(ۜODgΐu3?Oѽx)QŒzk TC(1ǭ70UϬIt_ӚW~?$O6g2OR޾?@隷_|<^U}0UQ2(FMĠS]gx1?SdDәxq{3okN|w-XgD2"̟FwFZ!XLbN9CL1ē}bG +kSP*c~~0Da2bi*E?dZӊNFI%ı:LKǩ#aqI1m9ka87c8w"l{`3!f; hH!uh؍9'Hd\`ͱL3mt>lVw^!hx4[~Qk;DB G@"$H}6?+<:h|/o msjiN Q>hq@m_g!ZՇKٟ9Gjdb\n\JhLm te3}'6 5*Jl0qmCpaEs \!tO X d'h*caA[8iѭa2V&I YѝO|SsKʋox ]]⪂om 3( "b+S$k$&LӬ"0A-k,^j02LJ4Bů0" RP5EGPQ(CgW8&cd`J0fu4JU$IB(x.o[./*2-aTt֩ rE۲i:Č]Dv K۔ye[3"=>fZ;܌@VhsieHp67($e9a}a~qyǹ>,FM- Fib*>%%KzX4 QD![e0EV: W)&Vk M>vjbx ]PMJiG0 tlYwiOIuX IlGȃMSkLz=U*++=Zc{LJ=󱴄_ZKIs0!Dһu%&$Rѧ7:҈ 9no"ƀ;KRY:S{vRx OqTԸ`di$X&>˜!JH0S aX#8dt$I 2IUŝWhw;ܑ'A@E#&$x>.n.;2.VĮV5ݬEFnA[jh8BC·x 0ʭ;Jyf?@uAe)5j,ZZ oEUO9~7wFD)% E4Oh2k5F#G[X w ,!1z M4t˂}q?CkqiЂ~#H_Ak@k瘟9L>?fhVER6_Q[x•v5>E[O>}GLlOt06;w0ءE ZX$I%V]nqcN^kcEuY6˟7N $8NԆ &yApH4ߦZ9 3&B5p󯼃.-+9{nݭ$w8B!2aқ TBXsmI G$:,Ƃ;n}&o|{Zq,P9y;hY^MBkmvl@xPиY#utyߘeUyl4I>A!BR\;~#UϷxhWAmؙ~iW]^mV;|3_ L w6wXY1|1uŴd<QH#CtX٨G A܍脒aҏ}{!w4he1$eӌ8tp?YvUJ R:bo3C#v[&t>eaq/2Ko1UMͺTjFaH#}k˴V1:^[Z䩟9? ~Χ^C,_'> u @8E=s_^@90='mw9s|Lgi5Ͽĩ_%&wnc_'b[0.{~ݛ/SXpC GD_%+r`ZpL݋[Μ%{q3'o '?bBFT NB)G胻LvcdӢ'A 8f\>hyQG1q $ qњua X\\d0H lS)Z)nkUiJ0>0??"aH^L"(%5Vbu4M/g }hg cG43&zjmYfƑտev&n4׳ޣfnRVa{&a䕥eݠR$ho]jJ{ KjN@?!$Q 9bmQ0pd‘ Aj Ɉɻә95ǛwncWΑD! glm1^![r1X9NnKݹǍ#=B_ο7]VJ$B \<`J3_Dv,ڊa+!1PteLhJmD<)tex27koP3X[ SEx="/qe'ǀkWh$a]2yCJG#SӛKibV̴9!xʅ+Or .)>f.-_aa}8zg"~8Zo3;m)E` cas:] CtY9ss8e:F,|/%"33>aF!h/845b§ZʲnrQAvl]O\a~Et]:6] :{{\xsb{~纝lO #3|2/?^G&A@7fjJ1ss(#w.w6dM0vȬMuMQT|+ϗ~魭(ٳg֩+EZkK\և9-~;G(yk '氚,$ &@鄍^J(s팟y,7v~|*v_,a`Rqm{QɨTX>j $JK&@+/zàqG H_ǡx{ymZ;*(Om ؆"(PǴҀO BN0b{cb8gm,ZyI֢jAR ( j0F3+FcӋt/%ssD.$= ֘X;z?Ėo0+uS8*jEAi,Ar4i v2z#L MoZB|c7E;1U& k|q6oq6c,J,LMC,HnJjM7͸{[cŽDE:=PxPڦp3uA]D蓔8 w a4sƓ)E*GeJ:sxQ G 7޽aSRgQF2,76.#$zc0uXk#di-V[R3W Êifn壞5&HDD;J=]@RAw2}!_q[@ʄ2gΆơUq qQR5sКkS Ê( ݳ+\Ӭ_:GT9s|q,(F;|gW׸g̗~~&a(s܉=( .{iVtel1Ǯ;荫\er{w&aMcTC.f:F:AWE=REQCY/ =LxaUl93*-귮S d맙`pp`S/Dv.P>b*t]bÔCnA`bpÏ'V֌i `9ң ѡz8<:R mi@c'W3{񛳪J/ҩ`gȹ"g8aI/܎@KvNMUM1@J%v\|ͭfTNE4cr=>#w_;vb3c~Uwfl3=B `eicj|p{g1 \s3,in8 $jZ0'QAHFr>R,v0ΠfŠ()uMt)s#"K֖$!U^0832:{o*r 7P8ڭâހs -Z-IJd(8Rg/ 8X$o;n rF A0cf:wR8Q)L"'D"9 RPfُ0QVmVa$ 6 eh( R HR"q"VQ֕B`"M}ݽx8&!s_jpV`$4 $90$c00q@z}e,38cIAأ_5=z铈(푴Br44cіܸyaY.9 ' hG!<0AÈ#/$1B!e19_3( @zͰ1 A%)u)C1ӟ~?16wo ke3$l h{ ۷o7V|xe2ov=c޶ X#QNDT?{|<3GXn'CN=fg"g#۴/>ιkg7[_5 iWH/?Dtxo ]|3gσ)! ж IR-j$˽8LzNiNwfU cl◢ 0_@yRM׀?3/?Fv pzΘ-jx3:K]Wlomc 챘ns(`5 4;yQa LUAoO;MFGQ$G"[(mkb2/ZټneFcjS+g2ca94;._zF3|3Ǵ+ls{HIt?7l3w{(BA4 f@!U%AO.)H$^:X嘹8Di~O^Ǹ1bz&Y*c:_xO1 ~~5#WQmʿwIlV$^&[] zs5)Ky'r)sIB$Sk] cia4±պeĹ`tsCg+krЀ&AɄ(k̭9,$:b#Ov N,w4ɳ/(IHqx).=̛{; 9KV,1pUC U~|\2yxp_p8y *{Czp tW_{$jb:a&/?SbpES`[ګ| >Q(KF[ڠٕ8$q(x]2vڢ&] sY?blr$F׎8"$ju(JŽ1߾vo}AdbqV LC SjQMԆ0 IBIDa@J $fEֆCi5hǼ*`\HwċRm jc\ݰb=+Xm("#]ܥ,w aU{`ۮ -ӊ Giv\k=t?(°j0m@{PBIq%^+č->~q&,eii&YQC9ϼx*P2,e(qNMg$BKx"⅓411ۻ}|& '6:HOSʂ$3/Pc^<`0;݌Yϙ4oIIJ7xkz)pg5dJJw,FԶ9i{'EkPU )+]D)h(2ψGD'&[d&t7CNnrIJ_8I Pm._ƞlpwkC:'(fDg0X @Er0Zȏ~pjyYQ0N՝2H vMzw犢H\M?~7-"(&w455N>MwAɈ0iשE*qb! @^9Ws-$Nq &)qʀ}cBR)J '>@@(! C9s.W8}f &[9Ͻ )AK1M}w߅rY+>.Ņaeeە^zk {J&8JRo#+ת9>-$Y ۜ-'9TJzȕD vr ,b&cy'ړy!֔"BD9glqF5B &ZŖ:׬3z*n!Vu4/_fYjK+tGV6E^oMYx7+kk=#q-jb,Q* 9{czۯtAYHBP%iYBpR_ *( ;puܥY Y:I{Dշnqcqjcw2ipop@ hȔ#oucy8E\E)d'{J.DCUg)&kV7拯=O?E; }$%%pLw0zPJB: |w<tm9hB+r8⌡Qo13  $f9ߺu l.%;NQ8|㝛;0E))}6VpEE҄aBh$3P thQI(ҡ`-J9XTAQ BY*ja@{KkźGQr?`[4:pAH-q$F`MKk)}n:rAG!0eʵIzJ(kAcfӌCVPEek>eF{ʹ*dZ(n6>Z`H#$HI-i496QIt+#.WnK,u'.Q5qz% QV3eFw4! XGYy^9X0%l,ѩߋiK j4HG#6"/s0u<ΎGi3DrӁwsjEcLA6[h(- 4/e9I iq`gR@YrS2K+[8;%j&"Tg-Z*$1qpKRӨ8`),ggr7cw\PZI$Nhh d~25.C76{;;u.v:I)q6l1A3fF38nRo)kS-j}>[>RJj&"-@B#9V /;g;hr* y4;Ʈ^" ѻ@kD A 5 2_gs_c3|sm}nMq MXw5a/_/vI%Z_" QJ)~|S.q{MJy4WyM!# 8+l߸j)i%Y-y,*t4ggP9p_z2BXYbxmzf[z#f<|/&NJpP:bԔ9&/]ۥxmY@BvycOPO4G Eay|!gOl˜x/೜^~P :;U1;{Μ䛷v8J-agyɧ  :AaS.f% Z]s~5E5ϼllbDgIY4⾟CI $y^٘Ս6_?qhF{)}v'Hbi 2ry1 ?c2)踍$/aMFB3Q<;>&Q':-J4QʛygKLٷm1y5VS ' :a$$IBļU "ҴdlqX)ʒ8 O2^?r`JԖאb<)ҫb{Q8_ '(dtoBzb)ƕIM-i:XJ[`\u98oJ{瞫\*p:Qoprs,xDCM㢤 (lI[Z{NY3Z-1>W(wxə f4u19 \\bt\@'M,v*]QC BiI4;!&/yfP8B%a IDAT$ iJǬ$ըA\;ҟxqa}ѻ6hBVsڤd,,a%hi4#:~4brSA*΢c21;$zP >`BwSN f@; 9rg0ź~@#ƹE$1h:&jc+ gWIMz~+eRdhlPmLZN3yr;cpW=ۧ(|+_~W޾g$~C/~0$|C+l_—q |Gx #; /0 ٟ1vwxW!4Nħ~Nɗ,ē=I9c¾eUNo':>QLR|/䜕ǃs?K:h6AXԅY>;7Y'X9|ݫ1%V# .:)s#;;fp߱PMH)1eRp ܐ(8aXs&Jt}/X1Tpr:zVs%%;F.\83!ZAqHSB1YK"#Ky@+Ud[I1#-)n1FYuy*:qF0,I"qGdL!}!0/O?߶T L9m4v%n1-5b9@k`@|@pJ"¥6:)2찵E'sӞYV3KKs0Fʧ(廬Sy~++MǢԪ8,+$2RФ5F@jvjݺꖕ wq?^GPGQ1D*@ϻ*ig nk[o_HǾ5.*Lun`^?YAY\v@Q'.ZT?TX*fZ%.w!*8B;D f?Wتx_᧞"\[]L l䭯}I^Pps/$eѵ:Ɉ3'B>BG)p')Q|.7vo06[2;F7΄ٺ@\k'p6mgMDgpN ΐu %f+JҟM+5U*T ʌ`=$h7]ͨ΅3x"LJﻛKeLo5 \e%1Vp ja@3?e46tTUUՈnqwH[ }.;6y6{:gsVGL9ݹ'{~p<*atR` ckV$)CV2͇P:A 0+CW;UqEpuNK7A.4P7Id7+J!-<5& M8a&T G\ĆtA A<<@w1b YV0YA(,#+ aID#IvRך4 ^ȼt!Q$1%q5"HJM?YWE2)KuR;amVo2dZRbSN\Nwvw@f\(!0»J% f<0<8 %iE}e._M;NΜB 0;+w@րAd'%ʜ"OjI:˸v&cP 8QX'- U8K%qFsKovESX2&hѩuN{ܾ}tV'3D 1cZ['h=IaKn|ۤ]6CŴLOPnɻr%ݦ#O.%`:r˔Y͹ӛ_<#p8Ȉ ~e /Na$IAdssO%8˧~'?ӯRJC:(g?sO?3| oZRF+ժ@qyʅN`\.E<׮2rʝBX~?,Cϕ+w,(qE0N3o dfptV&~r-šL/ʌ"@44%Noع5gM(b3#V|羚RRh4QJQc5"C+MV7BkJ!j$I`8ݥn scSY{US+_xZWi,YJE38$K"jqE0O "ڂt:f4@\v}cI6W 󂷵tOUb1wa!sq88$F^Y߃O.P8i۸#\ShQO :`}y! / si 5"8B FRG[%t\?C*y`E ON\Yt{SN{-́SXk <[oSҰu : ZU`Hŗ;՚?{l FB%P U ̙spRDL̹scqEDGbZW|Qpe1|EYL.!(dI#ygp8B8!NE+8j?arzy8pObyu˒P2-+0:<G-l65N"#qZabT_J99[mɅՌXW30ȇ…-w3.Rv0)'X '1Ʊ z }rVزd8pf-ͷ(SCejTuoХ:JMi/5R1s6c#Lڱ0)rq|Nn<̛.eH oŘuYZGn$~VoϼrN(mr![Ir-ŒxyF<;pD #y-FL 7A\Y!q5*(%V9"7YxR\„ Bj$ $b0QQNfLԳ5X4y^Ҫ5{8 }> >yޖgV67F$i;S&rRfX 871,C En,EN8hؤ ns=QZppFw2bg{p o״Ơw%}[W3%4ȍ%pz~~.l6I}\$AR!Bg,tEfIi IRL4EQE1\p[s5M'>RGWiw`u٬Qf6y_.,o$fPnr7w>AnҴ7@h@xgO?5>#s/ݦu$&O_{aekVt:AZ`OK?3M9yPBi78{HQ㳿 ѐf#lR?K"8q?5O84I΃_`ss<_⋕8S$딧]iqɅ/qI~nпqbpH~'8wEf׿1b7w͘Y %ٰGqͰ(胧i5Zܸ~:JE>tLZp Bαn=™wR|՝=o-ıyxgZtR` UɭS,'^v zs<[LJHO =IZHp-≇|ڧ̆87#/g^gepe4*(DP̦<)PJeA B 3~PR1:Q~>FW`01XU03㜽r)5Zhts3]Ԕ;dXӂ.mz Co( vQ3N~_:wl:j6"+ jxр ޾kz<%Y%6T(掽4x.Ry0Zt6Rp^H!k4 Ykft3f°HD(^.b;:\"S?O?~%,%zXcVα69>K1I1)JYNSO=㏓جD~|{xe.>85 \)-p`vHΝ^'>1z gx>ko0'778@!M!JHNlnw y?e4 g_\r_ceyo0Bo!@G,#KvF8#O}uQ,W/@JmD-_laKA f:%i: .}O~q P"GcXjc!t*" bL~Yf訁wR"Qecsh 쨜>ء~;V74+DAȔwu}A'[[p $%V-}Ri{B8 _(ը^IEߥO6Qʒ 1!( ֚ݝmnݼ(9Qq"/4[R»h7V+{VpC"q1eU{w gK)EznJiJPp1/'gT8i:~Bpjk O Б&iZEccV@Ԣn%n\{Y:!u3h]seK Q3 _p+Wꐢ;@o$RUv S.nH@zLXO?`we9tiVZD*ΨchY&v6CU@qƒs8aT͋gXXc:Os-f zBT0 ﳣ{}u= ҇ WޡQ_]xtHu2>lzX]eY9zx/]OjE4^#;Ï~#|+]I6%;䱏(Bc^s@eYp<4^ږiNo6dD˜`eZ",7;N 'd̥ W#&f,.)f "j@\lL]FaJ'(SFQ6B>ScSS,5N3f0Q46Q%65irWV )V&3b%aiyY.l"qs;۾A wb̼Qi-*9q㦠2zaL [2$x5 snG=G( wCnrˬH<GLJ״ Z%(0 y(1eY1W}*~?TճQA%óv$&Q~0 &ak!Qt6$Pg3[?d@RB8]Op4 Ν\buY4{q"[RHaR1+L%G5렰PBZPQZcRL%,ƥ`l*鄝:29LZpg0h$(f#'ւ #e+ )(gJi^`j!yRV 8a7ZN)y3O'fuc8n`fx7Uɿ?/;dNxLdD#czEÂS<#Kz149Y]9 2 _+~cf%) c4;ZS[܅S7M阰cq d1քZCI=sٿ`Zvdy,~\oO7GrXRr\R|S؏xG~'?>'\AQ;u"k 7(*5{$na'cpe s L'31yecNGX!x.eYNk5/(^X|Þ/ϝ::y%NZF=t p!fdyi]8VyǡfS`n2N<*M,JUK[ 0ƟXVCWhg +: PRsg_~kQ@oУY" 8'>p6ek]FSS+RRYkQZ#b1 IDATa-u߻ZsFHEt$a,sDaRc֚{U+y_nј@)OPDB4e9*N nH`|Lk)@%s+=^_emO1Qڡ 2D"a1&HSrs_&vFk: ^[i. 3;  {:;{!%G ^xRZ:N r#T"ULn^:ET(|V]|deI,7\ E\s @ +=?@lq{c|R& }WYKs|YoyNǛ<[V ׯ\'OwSN,䙷v; Ise[5<ԓp9vכXgyqi yLXL)0dyVh4¤|,rƣu DX KGT4 5P٤ɧh`"H|PQ67Gy+doFi]J[7AcpmMvkHwnr0#3l$0Ûv#i r)AI J;O7UPoruwm,Ef ZՙF۷o1ɧ Ӝ~VEycjήSA)Y+K+c^A ,I dz^!M8ru[M22ߝ23KijnoKW}7>o;>5oUk3PW6Gi[7BE%gZ1)>YR=AQ~h^zُ@?peh4pyXnj5I@*ҲfO# pQL7Ky$AhSDYEQ3H d3>E~ǟd{{0Np W?#sϿiL|F@UO>O7ozWn'{qxM)>Hl!@:Zr\g% ?gSN|雯ѽt$gΏ|KJ`c a`ޛXz}|^]U޹ PkHrEQ%J$#bF@N Ab', ")V ;Z< ;foݵ[uo9K8ު&9Ӹfwu~YyyD.}zB9<7nY:k͹g98<`RzN$*ĉ$y#8ac[Y7cH%`k4}=b)(pSvSZi]LXlj5uM$M:sϪJ⌡+D3y#rA(l4y'ںVS4mIRX?RJs RR`j(Dk%g^Q H%i9J{0 DKix4@KcP=]>J>f/>Jw5PIA n*dUW?&TK*Q5g4nDQ֒z/SwLeogO_f:mfVY1/zoLLp*kMl=q9D]$" 3G".geeɧmc@ڝL'*QY"_9P*ZZɏ=+y>it'8 1&b;tM^y7X^ ~~(C{iN02|vEL]Tcgw_UmknNལBT‹vZH0HRYj~l Qڒq=ے<x%)MM2A: _Ոb9.i`Ҕta߻ϟ]aMãNrc4݄Ň`jQ +_g; N2N XJwD3(4Z̵渷ۣdm|'#k&'&gH*-!v񄃉,ӖL@x_^6la bۣ0q8s!6W? ēp*/2aAe= &=-i:ͳoqo~JJKAQF栈GJRHB8@*Aƃ8k zuрB S':JAf~q 6+pAyA/=:Ut1wz4M\aLEUU)I"q^aᐲբ0380ɸBzJA.α0R;^ L%( ZQzjfܢ`fڠD ' pWB47Fs{Ψb$C#8âƘt s-ׂѦ]zkTׁ Uƫ qQ3..x-nl Or\'IDKh9&wEknS뼺nܼ][uX6L p 7X˸^Vj2~ӏ}sXrO]<ݥII](Z$ %y[#G?]jiA-X"_rl x4 xDy0{rɤCZϤeFn2  ;'0J365Ĺ/~Gx+o6Q/<~qn ?cʯTe @(s[&$gYw_O~yR^o?b`2*7KkkhzXu0W:h2[$t~@Y׼e^{P5sxC^xU!dwvv{ N9SN&'qa%^&,_T(Ħ6ݔH"Cj!Ot̴N? >B6BZy (LY.qLY:Iɫ_g<I",ShCL5߭ᜥ{9x*|y֡!m5{n2|[ gpu>ZO?l5g`&~ݟ C7aUQJ`REkeiƌ9pBYLF^Jrx_CT84*TN.@t4pG8T(~ږSP zX'Pfx"g#^ \$%HH5R9$ 'Oi7y):ZJofcyfВg|3K| r9#!&0a3հت4E&Dkd%8q6xRh% WBz=)pzǰm3 XaE{.Hي[wCɐT*2|w!Y!lD"tPV%TRyv5;f;_as/_ΫW#B[`AzΝ]cR< KIp* (ڀq}n׺ %10Sh=xg~Z0bE'KRy@RU\=3_\˛vwxos`&iY䉏_3]3D&ej65 Mfc =[p~ ,vEZ*筝[{$yJse{q:;gXZIF*5RVCե߽A,q{~4#8҇7hΓ-Α5kj+%`js$J$MiyGEJk9GYVݦ`̽Qj(pA{(K~_7aWf5Qw_},Iy~wj<^/Iu;&qY!We8 U`{򜑱8d0 (L+oes}-T#JvMO>XY Io?_&p>ںG*UUl= g)++$Is{S!в,g=< XY^ Pƀ3*{k팕n>ˬ@ q X`e4ST[V<(IFUUtIi֠ H[36s-Ɠ ӼxVYeiAht9mY9„g}q}Jn7{b $ټ&!58QB6PefE+!PB.c}(@VgR_{dyƅ̟>n_O]╷nrw^@Lƈ\cGEbQd' x忀p&Tǁ2C;|R'͵M ZNR^!YR U)BK {?B 2FL-5ق.@tȥc4B,oD0hwc``t; *1Ir4rTX4h(i RH wlqY~ļ-sK\{ $YN4++|쓟շ81 "gk|&RF,fD~"Yċ!BEMTg94|KTB0X02ܴ(JR1,Tyʱ3e. ^k@ j{|x!T9ᔤƳg*CvF˷63KXS"CHGg-ZoK%zlNԸs.JŇˋ [' Lyk$HYBL!1'HI85c-Jj?pNR!ȔBE$l6NNO*>i I2d@p)u`xL :;"m)Ȧ Z{.CP5UU2?7W/)Kǭ݊S PO8ܹ}pCg9sN-2^0NHM-5ZyKb3+m4_K~u%L]|s<|,O .f {r2GHw p;sMB3 qmMJz X >CH 9:sk,t*)ot`ƒqi)Q `8񱏝daI]!UD]{VH޼8fv1\۞ie2T$,yi7&_XAeA\^[V\d6]\I hQ)S8\z5^@:skF(0u"$BmUYB(R[XOhP;bTT5q{C؃M!cApV5Io^vKgocغࠂ{92ycݗ5 CDTB&;4Wz ҟ 5/_>S1%b/6ac/ Ao܎UKabIC 8y{gЎ#Du?jc$*;wZ h`ocêXx$ש7,1FؠLJR"nSUO)r!\Qg 4}1ahgbcS -R㰠4ݹ9y> d&щxC>g>I ITxb{O]Ucg`x cT1]ޢ N'B}F#ens2 ڝVd&: DUH*26HGdžh̝-&eN)@"I-x6 p}LldYFш~8x{"J VWVhZ-Ά@:I58gSi)i)8R(:6>qVC/VD8_A+N@j-7<+ $I~h'_@)N@Y\/uQhiQj >ݯșG%wMگFG4TRMge10\{̨h!&AI@)A`zwR1ofK NȀE/!Ӥ>C9 P'tIc@G(I3 -vV\0[@D?Yd{V* W޾_"ULT@hp[ x[q'W}pRRLjqTa|(R r˳?po4*xZc#b@(͏x$Jz1EԂ,H$MSt04;#G*4ݹ.IpfB7 X;[پKU;=$: Z>yjoq.jHP50Q\`tKPcYa /=]BjEm6Q\wQKS`+8i{V۰2fyN^D]#ڐ -oGŹnHjk`~q.: IDAT̚|so_AjSsr߾廇YhIw-(Y&N?oYYL oqrl.G) MIw!:72޼?֝}޸X=q:{qLMF1^'hlnԘ1N \ջC3-1\{*:B|(D`j%.DRKhMm D1gp0d8PS1*$$"DB=2AI$6xX<{>W`u3Ƕ7x?I=JBEK/.2j8@ ZG,n+z6}#XgPI bcS<2]JQ*DdPC@8pEvZ=8*AFm:m3.i  &qآ`'HޛW q0Dz/*(o^B*20fg>IXWjX@`CX>Z@iΔ2 ASb~p(!pJGWumC=hiZ9ý Wr P8_B[15: ְ|ե.T2Ȳz $TUP:AɞVMY9׵5z ߛn.=ޣ"IҰ_ 4,'"X>?˰h5[<ȣ4yrjqjR)VN;g9'p-c"n4yɧyhcD 5xA>~.J Lr!'I7ְYU!yO HۥRnjj|uf7^D3W_a?LiLno}GKG;m갆|h--ց3V̤H=RM)B(GIA '%݄Dd7W>TK@F6$1$Rኒ4IY:[8vB!J1Tt))(SGئ&/OYh̋O3ŋx9K4bIboVTγS++(#H[\~//|Skk<5ÃCz}Gmx lQ`ː,;b |Wy8ù>U] SP(YA1sI.SZQ;Oa UT^ EYGyIER UB7#dҀYPi-!ksoߣ?*X]^B 6ݣ7.HME/s@9)()mel oF 2v-JeŽҠ+5tλD96+~MCMRj*,(\=rGQ?jYyY(D;ujF5c(Z;13qO5{ xb_BoT J,wX[zm*58_G[~au,,Zm& 5Iɫl5qz7wG|]nXb8Q!򀢚uW[HX&q^(%1&La'5BgS.\`dٚ*8lgp%TƠR҇5Q$3=Ɵd|/N;H(GeATk=FA'g2(+FU :\G>ӟ< %q?&ڐZCO*~w[ Mڞ?*}(Now}kA1&NPZdV? w_|}i!:EO\~{`tƄM ȳ/o2VsD| t[w8ao]cK |O})nQʸ=0?;A\͍޸O,-t{(.FlPX!)~okܼ?nj8fd%\ (G%Bb|qsLϺP)֢dey.8jњ: y#g![fָ,غwG}Դ4XwcKp \ n!I9g{$'חXD0kI? _x,nbMy\]yI)<!*~Cco{]{ɣ։;-N3^Cko> $k:ybR`"Byv@&x?8DA228"*ĵ'mE@)^+HNB3L[KL j%,^IFl= S).C18EKdY2h68}_~ pe$YEPCL?~(h"2l6(rf$ Y>Y$DzsBGK`I@9HܓΡC:uӽ82@ͽ \^*5W MLXaPzd&>T’_RŬ'P"oIZt] pkދc;?$6mLQENR~o6Y[\#WW%ݹ[<)‚V[ - 8s5 PzE6:,N^]>f5c3-~n?@iH <#haFC)w{uZQƃ$o6HǢt5QY"h uEimnUZ Y#(KKe%žk\XSdI͕kl5E@,rk]M;xgu9{&Yu43=qFcgYY9[lqx6Fb#!D uEYZ"YxR,abǚ e+\ FX%3GZKB IUUA /C"4+h&/q;;7XˤrHSDS64 14]g#^d<ʅ{1wZabD{<*G}kl>jړte hӏ@W@Yp`5$YEE]ԓQHS#&%bRp*K' oOmNj)O>~> =ɭl{z3 3yJ3N[o,Sr)9srzKC 5ō-ge9&i9fkF{PRѝks:;ۻ_~ZsBy@E,,MHZ9Kk5Yz"IIw諭 aˌU&l.u)ʊ|ezʃ=,gimNoGЙM6W~z1q強> 7˲#:yvZM67Oc-ZZZ*s~nZSR>ҝY[yfg~0}͍ to#|O LM|LSH4>Iq*EhO/ɩt(X cF'Ḿ\2GixG m>Ƿ%o};B5[+~:sC,,u./ݼM6t BYphw 7ZHsb[$43MSIrqѝ6P9;W{\kevv^ !0P5seE4 ZGOc`zAm(e{DR ҤR]hWZhMe š^rw,3@ښ*NMTK1B y)%`1s+Իqq}SWL퀰2֖.9>]`è,hLԚ#)} u>ɧ{:$mvi/m{moӵ- -Q|v{TUU!8HqGJue,J@jRj椥 gqvZCuzYXgq1!Tt YYkʚj.4:g I+*8<,8>*2$!!ML)4 Ɠ (0>t1eM"`10m\,/gڕ+PUUYWz;˻|k]n9̈Flȃ(-aQH$6 E7I R` NG [xFCCr$nV{}ۻ%yfɄ(vu>Vim[b #s??ZJg40cH|R?m09<4,p )hu+J>ҏpy\bWT4uEf BLQ} ޤaQq[o5() 3v 'PK{ k WѴxcTQU&HN(XSAe1 ,``76-U`N{\- -: ŢiY[!$O6-+hHzy Gkt0"F: xl}Ǟ~e ~6L6?l^й[2' yVre^-l y5}YAQ`J#13'/. 9eYƅ fsw佒w͛9 cё+OA GX@1u-rǠXt69CP% gLuEFQIc *_W&wmZw(yO( 0yF"CR\{;CQTM #tDdQj^~tOJ_z)U IDAT 3:H|:O :y=n!{i~6I{CSgDnd @ɔ[y< dDdP|3;{Wϲl[Gl%ݩÙ䣾Ek34I:=>%0j ACVҶvm$!crR14lpΓA1k++s8ZWθg΃px6y7nck?N !G&sYk_'_AKa)D>Bdn) pĠ$`(t[zo"cc/j\\c2ow'ޟνs>$ƈGQ4-1ĨʣWOfcם㪀hZղv'BP8?7rOĢOu5c@γ_@?UL!ejPnPqvw)lhi| ^serNe}&`؛+;c0to%rzy)-x17kE%[0R"Tuz(,L WFcWW{D287ג %tըMV^ nc m ho|= 5:JT2~{hpD;ij,Ӹe OQs\Ƀ5?_=_ϔb}4/:Ҙ9pu!u2z2R#(NN&[ di4-2/1[ݻp ƪd̻9::KQB v#Yyl.V #fskG'3f6S mJ1 {{{ !bǯQdEKi\w"׾JqE>Bd삣^ ZɳB5ae$'Kj}[k G46[/E_b}Q\As=ѫWx+ߢ#0 h~I$+֟VFEN=Ō"b{ցUSQ_bl,#Y 1ˈ|%ɘ15#h3' DdFѝzWظ68eXm7VXCc3tmPyY&, ͠LS[a#[hk,|i=X9:3PUR \7x⑋ѻos5aI1=lskܻs+Qen |^r:2O):0 JP0w{(Co"<,zX^ *b&V åF>˵k 1rL: Emf(iٴ\>A; k 'eKo=m0*灾@m, 5"Sj8J* C -&*݊;oOX&/<T tWF}{++QGNf ޯ=_mn O9~;LoDSSנX*bkoq yp8I=/KLKKP-ޗ/:'/oF)~T<6EFK%K) +бbڄPbQsCrcعpc«͛/O R,k 9>u6Fɔam"Aҡ҇y RGhc$*#GLL4 Qm5DqN /ȋR%`vwdؤ|炆q60?Ř g]ذhb,3̦51&2.H2j[h~̃YM!4?d,'-.-ʧI<>4 nYL*2h|:EaҚmDf"u,&h]l2Atm+^ڥإkRe6ED1LsB<eRJԴ]O@ҡ1^.w`$Dk0>{޴M_EڦxmP6#V艋o_|T&fmu{΢j%Ŏ1 0WL&3" &WQM{xo1TTN1,;:.sOҴDח%w`qmw`ų] ?rwY3\+_!̦ɯF:סtB]D ?i%Q@)5(cPmEP9ɜ5VW=&YB RsQϻ2K#]t&R.|)q #F0tk-r7m&ϾݻX:9N8>>TizEƬj QArلuIb 2aN'z R*P Glob*OZVWJ 1ޘf9q-f%N'{m$8$COq[L3UAxBH\}f hjʲ'1,( M-||.Ç-ń R!hEP!]AҽP][saR byp‡_Gp6lX)ko~+?%ldFZ3~F¶B=3o{CDŖA;j֣aeYbൢ猶$"9!JSpkd!d/PJ%&h-јShe`b2QD2+IEaC-F5&˶Q*Anh_J4*ü*yɚ*bJ"gᾫyF]qߎRA4ZYKK΃!AFA`yv6?˵2Y6`ēIf$Tg]l{OSĸ1ሃoqwi!xfѿmX[/=%)j_'wD$]#%%=RKyϬTXP0l6`@.>QEbj1bDKYeQdY kQ$IV2?cX mJFf45vuGp1,UY ZjhJ11/9J>Q?'=[עNN%E>5˭B2 !z8 ,hƣK$| @s-ӦjE NGZ%6= *1+!ThZW4%6E"Jd-˜78(X^ل Z@^jf4]#hESLw{w14)q.R QbUBYU 1@8&W_׎=5E99!;C(C4m26m~Ǟ4*˥Vp36ؼ͚mM2, \{nû|CBHss9u]g[kp>(2eSQ 354( v ʌaV0iL*ӚhԌ6/[9l~OhtyrGŹk|=y* rͽxSgU?Y C\::bOY#%ŮQH 8OT#'*hcy~mVGPW''łrm׶";;k|/^|oܠ#قw~۷v~ItP-Q~"BV %͆sbcj>&(4*&.֭;5909QKMP cUdNߗ|]Q㎏9x;l}Sl"N{2yV/+jv .EBsBA C%B|K3C5 AR(hIEQH u.p>.:L7jh#yV6cq<ェZTԋrSՆT(rXVC'YNg:2n0ͱQ|_2Y jhs&X[`mb%2 W_x9>9.sgnEe\ܹ@nskc"S ZzYl1G',TcϦRwCŸ|DL?˥7Bgz{2/#X+@^t]G"/{wmP>MjJ)REyG{]{QV7X_">?<:3~?7=D>uLr 93`X,|M#Ǿf{e [+|Zk=z MQh8puBP2L3#iH6 ր6#0y m?uk;~٫=&OFs쇂/zA^`meJSE#Z"1k XmKVTJHfZIYE~~KNdXnɬhM#2 /%FEɌ2U)Tu mx4uqgá d ”^#DDahlf09ds/oJ7(SZ8l_sI R#(e(3|*f!aeOp=/(zo=;7K2*_=wxLm$Xcou7;$¨=ڛl"W.n>Y"4wy|҅ 6urꖰ: kcCwUSb2C⴩B^d'G (1P(U"Zpnk",jJVkeO>6}j^eyI1d'1Z"MSg4IujM+X~{b1GsŌ]!uSc-DUcLFDww..ɭPX(ƥ?>j`g"3vIUZ6E*y1 $XV0߫A"[#qRொF+-n%RԚu2+z7qa TfԣT_~@$C(?If9je#h^F=(N1E3 *2HrI:JFdVF$kxQ1\${aB]_?ۧ?z!oуg1 b3֤ b(%MPjLFa RdQ֧ŲB F^XX>MbxatT!c}OhM~%}mz9ps\i)ьke_'^yQƹ!:zNio'UQ}C->Fh] b+1SXA; a!* K2>nM2%kO@:T:14"$v IDAT_65g2,ZiYIt],jq,Dd[W 7qʈ)J[!w))**"gē疼ȉs?x} 1uݰf,e'LC ~~ 5spe !f ֶ1u}L/yk,.1nRZ@(=DU5f2પEeEcriWehQ8T{"tɭbmp$g̊cK8Q7l^p6Hy1j1y ~ '1i swmVQ.>:p9HE4cNڢ0RW >~>~+UX-F(FzN S(}Үp:FMB!5go _A5>d6>CN){ QQ1ijvv`]cTp H1X_er Fiebugh&(yOXT`gCZ*ZYԑ\Kh Xev@ےh-Gb'cr\:RX|T(bV@{}fP7o PyM%>5 MCj ZY[p޾hq(f). *NҴcѮKk1)OPaSQ{Vk߶9lQj2IGEȭ%'=޾&ױ{% ߽PJ>uQJe*Dv1̦9^>h]K?`6Wqh'r+%m=I$}-'GulvZ)؏&'4/ $bNp.;BWUb\L1y~H,g'Vve8?&VFaOܙepjׁz Z,Rn\66VbEPnWs/PfyJ6 үgR'^k\{6#s^a-voE'E' sOrgZ Οy^0sҔְ0erT\Cf +O=QIj)ʒ3ĞE1<'Z 31nD*b#Q+o+C!5MiuE5û_B5Ɨ~ƨv-l,&'`@Sf 48FkLb-&ZIvVAG6X$uE^XAajjbKAEµ ŔW^@Kz $TOp{~vʷ_b(ID!s8ߢC$5LXύ򌂢ZF$HAbS-ƼXΟ~ F_p'IE?SA^xdP>wo|>y'GKN{ƇmLN,$->{L 1$pM.!nQDaI) k;x\&ۙ<;`Ёp tZt_j@ygZA kiMpJBKQ]*kגY=L|\46-V E+ ߶LA%@H1 vppg¾jly^'z\~|v__td0I.QѴZ\,yhcY_rMeʋ}$1RN-υ4ZGҐ#E}#xrУz%q5/4cǮr5ɨ|#&0T&Ǭßb5Sg4bЄd);&cè"yͽ{{lmmc4Ռiei5yQ@b``Biv>x_ `^ ^ ǀE6_u8P> qr ?͐l_z\<`EZ>,r%2p쮛:Z&w5~w?LW>~ˇZlRh[|JoTZ ,POcɎ>MfLW |G>w'+ ¢'E R 82yye_pt0e9 Wy]㻨؊tE9gJJ,اzэ}\L,(TRxg_կ}W.g4Yn wi&zcD[5~"W9xZy6Ov՝MsÏm'_slVdXrZ &#*-%<;_?_7?Gw߿ǵwxWMï1L&X>\,|{ sNk,hLOpw,\|o1vD%qQ&Qg'jF!U5M2KlwJSxAopM1'l`>?W(2&,޿} 768̸-PFNrӽLo%aDH(szyUuBdQ״\Zm}b&"%O_#a99˦&ɿ >e3ӂ/`zkhe0+P}q2*3Fe OMEF\b [E+OۂS"MB{ bC\2>T>*NN>:j֐)G 5}#$_6G{dw(Vim!2:%B= 0s=+\_,n`Jks}Sm=oWug'Ʉo}K끱b$'* 8 Ө$H˾H=Zct$Z:*ыxa%fNע|N!q5B7dBY "E]";]1uuΉy tjD,i)skPAo )I UwQZeui kqѓiEV$m\7DZKհ7ʬl\-1z:5d$`DҤ}ҙRFQEbh ImD[o HT+-x73"H(SE#\[^j=J[V(3k?"V*}FamhXլx/[]&/J iۨ nD9̨UUvlJTLxwX{ W{׿5ubg@lqSsy6)21_ ,Z{7C/?x@8CO?G0S5c&Ux o59ldoŜ|΢( EYYH #1Ab=X45o^^ܸlQz6{5~X>.kp @VNd.nnxFp^p4u+Ca>xc+-_^YJ:Y7 :1($$xt<לxc^Ow y݀TXZ&9Hs^%ڈGuLAcT H AHJJ9633n1kVxmz4E]!,B j0FgrX񩾀^CQрIc}dxqaE-,&J5Zy#.^0ĻGںFT(jm )G36QZ{gI#àL8g\hf;*2ޤVŻ2 "](b.t]9-M%6YFԊc;#(QzH9/WѪopW)- 5 vָ&FBTE" д-MȬl6me㵠y($]{~~ C\P ֒x2P81F`R!|@h#n^?]~e~$YkWWݳe8%z"ÆaɆlO2a,JC"i45ftVKVU,~8'"hXdeVUdD;wy[Y[c6hH4BXRhM=&)EՂɌgǜO8;yB5?ŻP]}:% ҄=&:hpQ4xli>;azrμ,qayzo1ftb1ɓs(Yo|'RE=(fᨬ9 L \j%r wwHv) ˪aQר^˪~Rd:lĄ†h)wt;)|GO-,IXWfS KC'vJX8ڵ4B㸢i dI\*Oػy5ippp`8d\LJN..+߅c[~&sΰǗsj;R*:"O1fwr+Z,ی򃛌G` ͹8 .2N7_]O3ziM͵rHB-Zi774&5$!O],jT3; :E+Ie(XFUX$/mܠ'Q+s ?Hޓei$> "Љ>b"*¦t@6Afz9_}1z66㽝u^No (u߰VEBWWLXCaci4:ZVt>4ְ-KQ%V ZFZΟ>brtg?5_~3~utL4d?3wX.cN 䊋:dQN:@g$ # u(½H ew)'%u`qR:!gwS!MmULb ¬-t!T .h,tFakX|^ :YEf0z_R`L! T5nj.I+G0qV,Pm\,Ck8GchI|qUTL͡j7-hXgx%.l t|<>W AWJ2X.XؖH"~ײP\{}Z}XO9YkH!(sVHd%ݧ:)Oϸqd" sΝ i|G"ul-GQh %dxMe#yFBNU6yu^M{Lp?]dV@^{X.+P Ϟ IRe9[;[$n<ôKobi󚪵 3˶a1;/BʂEvr]!R( I&7__O(cΡpc8kyHB*l@'u2)At΅gicIl>XE 6kOY@abZy^ (|i3'!LvŴ-nGl)yLLJl"ў?q|| v%(6;|ZdKpmam7ac:5*Y $Rh!)u 8=;eoz2/IuFZL+2x~|y Է|ߠnӒʏθ,#|w-);zgMquj-m\svzm(:9.քkP[ƶ)BF/"H4i!NkYWXi1f{sDDLXSDR8p^a8\mLMZ}bIbB <֒Hth8 F|IbJJ4pu1Cj{m; +%CϢr7= IDAT-6Η0^Ļ˨QMITO+=}{`*)Rn"_e#M`&<4\eGˊ㸑H]*HL`Lpl1wz6ߋ)M[ N^J)Ts]K\g))J'˦YV %5mm0{& *iHR<4ҴkJ" Mr56Έ*Q!ʙxPޠU+E<X~Y.5EW/A Z]A! |5F1U9Π !J*6V8!Ӵ-"M i CY9a[E_,"7ߑZњ.|ʹȪa#B)"?q.?cbmkX2pA&iMrr /mHBsy1e>Af"^|z0N>@iZ0}Q8!c5 QlA6iN\2``@\Hr٠.[N. (!b1+ iTT m"ܼGҢ/g4N{&rwutJZ qǭ!O {*(;1j^[dEFc<$DtF4utư7H1lo #'N=X֠k8b%ݽ6_џSs8|`%K`eiQ sREEXBS\cij˻gKDVT'::Sg?FMNG*꒦nyomuJյDb彧jx{!r&_hvxwjj9?}mdHZcO/xqf|S.1v߅}Pf6>/x)I&}̻?ڞAHS^eyj,mp8iyv~Lwu,1'd;p8˓S>h AiMQBcċg߭魪uM$;BſueC~ 佤k[R3:fUMY=c`٢b U <7osyz9EIô o?9=uuzApg=yֳ5-m {)Or-l0J~ZP5 A7p]G|<[dn4<;|7i) lrEc l/Fz"C @ %/Kzf{D%!s.\O& >a.Op0-rb`ZM':ot FH\3 8k"0HLbhB)sxABCCС7ehYEJڭ@>zq w*σ%b* Jf1$뗼 )I<9HB5-]ӡW$,O\_ /&s,+A~E8ΚZN,-I:!^zldf^A"ԑR٢\1+? 5(~ L 1Yab$bA]kq]KW6L2Ӵ5قPZC\J%0RxrWZnjSp.a99Ѳ rHpgsYlW}oqYEaHSƊvZjֲ\Tt{b6Zlli뚳ӓ&S%14UCi>E-?pcoiN/hqm -48IȎNh܀ CfgHh&Y V4AKE)L"1Π LjZ,hUʑAyB4b7;]Kיؘ OֺX kb}>G@a&6ȕ{@y8 J!+tu 7/uo,sX]<(@Hz =w iuAbx`cm+kU_wp+@TBwKʏc 1n kL(~~L E ee6 ~Ѱnbc){P`9_ =;aBt+j,1aOFw2?=%bUJ"c갰xWll!SEEH G9I1FY^>9*el.&d"D(ȮZ&/]᭡&M&T0cQ<=>bY[}4#YVْ bdzhdOZ.9Y=' O״|;̧ܹ}C*L yÇMɊ"Ō+|po}킪t8)ɆCۿ/7d` V5Kڕid2 vX sar`qGI{9NJtZE֏*;)h:Z_ym:(\vu]8O8=bzɢᑚzI2ne7HH76|o_G/Ŝ٬|~,/'ZrBuvH3SVϏ4MkϾO%&L%[/}[gI nj&$%4L/5e>18tNm;a'Bϸ׿QsK m9xp;o-Rju1p~|E|d hq4`,H!<~o|LKvvnȯ_~=4Aw"`ZYJVAd0LHb%>޴ФV 5Śubֺ '&)@HeG+u*ۧjbfYk0tH郌/M@ .t^Np.pLU&ҫa,9, ]E"!<|>+7AɰuH!p҂B {D+5w(,cw aObstAϖ.We gZR.\1oD |:WHtq nU/백Q @HjM6QOx =NQ?&R˲᭻jAD/N5 X me0W? ^›Uk`,vz4UL0  D)drmvv0Ɛ !щdQ[F s(CGpnqa= ~iD7bX%Y˚+R4Y-$i( DudRPdZ+XkSIH+xnh)iM<ep9VcB"gaXg:9Oy[:)[?:#D،:2DLQ.9g);\mhԛ=Q.i`֡DIMhIB+cG)4 s^cNήNLgsCZ7wc\Koqa^1:l;$"]IHMמ<[R4 ,GE6_+wsֈ5TXg:IJ8C4<zLmoRF(xC2?@֊ ^ܾq՜Gm_}<[L.>o"|KBC`Z-qr ; *](I*t2;3(ۑT8RLq[>##O1DϤ ŬGV`*!>J+!@ O牏U{ƽ7d:mo9*rʶ .Pg;%-'BRH7k)93`R.)B] " Xm OecJA`6>HO_\;d>{>C&$ѓ{D\oc|0Άd,\MPU3;Y"DG7aZk  eygΐr`$f1T/z+b6>&7.b"Lf񒬿vq^La"+)e"cz]'3^,keVFإTT& B ^βl29=rŰW TJR޻϶^`12IHSM"%sћ}B .5$רXo5mВ#G m*\:! MhsysiNq܉ jtX`l1 IW[ @*ӆ}TFg,A_ 5IJ{Zqxsk/z^@IK+Lbg'L5w-#xc48w@}~^]uEWBzgBK$#Owp Vܕajx]p8hN6nz~aﰹ9F6FEljJof?hK7HCct\ lJfLJ8)|ktS^oHz;4+ub<4BuX,(6kM#'BƎRzwhf)]?"՚+#҄xN'xgp6 t`):Md{Cms9Y/ vSsZ/J&MC$ҌpD8'ڎtř6s7GX-$ZJѺj\ G*|4F-o'v{, p:ۡ"J%<R[Hʌ:\OIS;Za DSȔlh&K.g3"\sw l"J¥a9FfbQFYP ~#gtyF )9TJBBG2lWLzo샟[c.nLJ,+bQ͞/QGܹItQN ]}?@)/I6EU31Ih|Γ;`<|򊴳rp6ur²6[l`]* m#G[4H;#dK%i/#%MRv\^N*8 ˎڰl ˲aJ7$aY^bE gDh^?K.[QsR*Dj̓i ,+zYaG wIIq'՟4MJ$J)Fst%4"_2y6nby9Az hXАKq> }d&/VrJO&` Ҷd“ B#;OV 認$!AB XmWP)} YOzEn LTR$ >[#ꓳ~C5"&R !(ltMHr96ln]\䋋p/T ЁϑJz;?!ߺCy8Wp՜ zHLILDٿxS]j(!N|@4f(*A/gѣ.s#yc̲cTh- ~.gi//{lm N䯾 " TBI IDAT]B=NczMV6nA[aWlႍ ?T,BJkchߨXQ?;lVq]BkZyMG$aAj~7p'x/Z5b1`>QVKm84eow (%b:R-y.-9W%Ϗ4 ` A,cPz4 u-y(m-Mxv5rrvr=E7\Y.J'heE'l1еDjl !ׅ$`kchBwֆVg1%S_ـa`9=bP*8ryU2s^uU%:f `#I.<x"_2vVQ+ҡ:Sa .HxcZ̼Anz|ڢɂq\o=J%Hѡ%M,+K_&"I1BpXW}kKwyKT]ti8~P"9?$HXP(Mf ߻1ݼf6\[t=u8H EIpNrմK(!P0UUѴ5CIuxyɞPa^E59V(.>dEz-9AӺiۖ`r i*o3-AUV(SRp$1qwGsc"(*+ŕ@G0gG©T0KuC8tʶd"0*WqDV̊'Vl{&J@`LY3c]6.-\;6拒r8y,gXg|1a1 ed!.&IU0 Dƒ+TŦ:A2[AެA@\f$IJek >XL$ ٜ$$CHIe,%ǧ.M//JAWֈThb9;Mpy1@1]lLZ n-CJ1D3 7FS†[k}m eY~0gs9L #$lmo9Vg֯8+6I|6B;I6R}կlƝ.ƙ =Jhp==[\pm}=&׿L lh+IEb:ӏ(?)Z&O:X v6 ,}7|ޯF#Zݨ⭯ҜR~mfխzH7o i}o 7.vʇx4Δ!xEĪZ Ao_:( Uc$CGv-[%L!HL )yJFCnp>y!?OstIdBSv:Dsvww@[$iJ$Zww=bqh98/[hɚ[#ʦtNiθ7dcأEN&$D*q6OH% >˨V L_^FgϘwpt,1zo;!RoLH#z@je8"KK"Ʊ/O) q3;MxO)CE~o*3N&|0"J%(C{*JR +J M/ϩ\<_"GykJg tlj]H_M2xi$PP+M=JƍKc8{v'S$φF{;;>f6K6 $-35,fJ*dR#[ޡ?DbASĬ:qcJq %pGږ Ax{'oG9-'C`W}m"ߓS%4 a)mCSsqp8G9^yßs6uʓK6M^'\>;nj`n <:|` &MGW ވ4m3MlXL]9C\VhInq)a'TzZzaP.aK3\T ~?b'( ߲5G''L)w mGy ^y[,+Lױ,TU;wF[g[z}$x~o=BSEN"&[~f>ĉ+ 2& `5k4F 5sΡlr]Xt[Q AbuZN`|Z¼Qj5iG*tYV c-YI׆J+!| D0#RT`tMmے& _OHZEįך 1"I!ʈ[zKm \&^fxjJS'^d9$k#&2: V CGM:6-tAnZ쌹UdR]|̨^ԽtW$ֶxo@P8%_X2.UKVk`Z-TkE0}FbÕQzhydnȔ|HGtFU<Ⱥ0Q!ӵhk D kJQWƆgd:{&ɎLk Kn6)CF63Is5&Z@c e2R\K7hlը-X.Odlr8U2+*2]Vt}t>GACR/ 51,K}6DWPY-'aPTc*CIOTH-h6-My}#b=hPJC GZwu]j"MTx³_=jR1@H g#dAw@O,鶼W|7;78`J.Eց;SR#%H2h`$4F#V7)-wp3 hH|( L=xE6?R^=c!\ :zs_ nq70cbv20ʋ_EcmV>)s߅ ̄+vMxuYh/2_]6DߧmJ>..P4ջ6s)(b>%n7&r~ 4A3Hv߇wꝣ-)&R_mPHcǦ:Rif32Q0'ORcFk+<~2ɧϙek- |0 'S"=F嘲JIs3/7z}D\&]߳6BP*@+MYiZ!csu׶@()ifųNu2fVT,dB W21HC'wm"J+*cv,%%rRK `*ƣUecX+xl@A-DRi(blM#q7g4w}|/8stpDcT+K6F1;DsFn`2e=ЙI!9R5hD7aq}P =!k8<{ĺ_/8(pD׬<{aD CnnhS@ߚm[xnXS<:Siڻ5>&Ģ"I&Ac~Ӕ]":oԩQJ3Y:GX;^oX]_ж 2$ୣ+6U6;Ou`L.THI5uTNuu'|oex4BfS35%$捵enQ@|^Y6OO8(- 1ԛ !x& f к\H['MFs]~-;78B&uDw]*ncJ (`SħrD,/i/?aǘMRLqO~ \C"Fd9fC{l۞ӡKt,B$DAv7yAte*0RKx-ĘbO]Hbv샟h[e~ϥ$b|Hu^/?!.Z #+bLYloL@;j2Qæ]_%G|ޜFy$iN(J)P>>;m}K@YT1rљv.%)Uf>|k7-ըbo6FLgS@3mPRᝧ4B HED߷D1 c Fچkӈ(Sa,5U(f%Rb5ѻkR:ZLƏ}oq>R)T-%ƘdC_k N4Խ6%Ue0s,EC{{F#ʲHvR5NɬKqgSM@r-Mo "y9y18bٟ2*5J1yY.߷f|x1Hך{)#SϯY)ʞBo_pX]rDL_U 9~X*~YI;ݛat$w5 \mF<'DضS͢4M%AE>H֝Gd9><lܶ-փRcZ?灺q.4T!Bwi4m1[Q##D!h|Oc60ScdT,("b\^]s}~)Ǐ3:g{| o~^9hfd:( Z ׬m LJ@۶kA A'zTȘ cw HGb~,)Z;ܗ<THA."dvZ&yOkQ DYٚx3xc$!xƘ|v|@@bc^b}6y@sC$*n̿dg0 |]ݦCFFGqfp&7*@;TYf9ynndh03&@6ˆbWc $Y["[!IR5W7\J%(g7})K_Fn`CjrGg}CӮpM_0i;F0+yaƸкk^R;O[TsE-.yWk>jn\0''xgKn,z+CΑ! nfG[A6?\>*mڎn75PI]Q9)7KC*@|')> )ʂf?a:*2ݛaCGF1zW[*x01?+C;q6 H( .=Fl 52m|I[[w V4?d&R,Gpq;?^zaמucҋY$1hb'TRkqDWVP<R1~vހLA Ǽ.u4ADL&؋/_|Ft="]"W9(ϝp}%^:|R,r'L"uh̒H9?BIs%:p0D{#0CU_8;Qlc(!$=}"WЏ̒(cҬku#q(؛qxBfGRZP)Vis((IZg9ۛ)cU*%"@Fu`GqOT2yD( b&e5b:ScTVvPJq=9GdAkF4mׄ tQWyRb0sw{1M1WJ&J̅)PZSV*a?}K\̧94}=ZDƓ ]Hܦϝ=J& Й0LI } +5v Z &&#є; :RNgBSǖmFX\G9P_H50TA*o Zg\"`X?/~=''njӼј^B9Q". \ ɭuc^r#p`RC B$m%Q,!'H !wEbZ2y'J#6F|LOtTKĖ[DdFM^I,|eK>b<SG`ك$a%+UpH؟')^%@ Ĝvҧ<:Cra/lm#r@"Scn+DO27MC?_{4"__1x]ض;fU ?8y-f]BKfr}ˬ='S(CEybeQw<{u˫;d^"xmn:Tõ5RDT--7w&DIoz3$5,chz IDATAve٦Z\']Qf36ޜ's1frQ=R*\ElY ٔr4HvH(^w~i2p6Bik-]*P-Swqה !J=s*#ZE *ɗRS7Em[uxG'i]E7ԽJ] =KYnw op"q_)Hlӷ"b4|3D 5:_<{|ݽOOQEY=wvgXRM]x$#7~ľH6G4vyBh~ },' !EQO=~M-=ftG.. Խ!jTy*6pv*fIfcWI[BI>1?b>Al]^Q)qb7[J9?dt6T1ՃOQ_3d=cknITZ`_ lhG.}y JuZn9} m+IqL]$GoPw}Ckf0 8M4 %{ >?|G(S ):p|L8cT# mwƎ^̸ M,8JMߵ6Pw5]Wsִ5鄻1Rq0sq}.H8yW/ܮXnI#p{)#Q'5?>lxvaP'u bԎf{G@PhPJIr{Ov\BieS5}(0s}GhZKb5ǩۖYAul;GWN|+I) Ն>KV<8'>xm]4W6tMzCd#!5ӆ|1Y:42CH,iZ)'ʑ)({PaȇՐk4٘ lIxHF!Iޅ^#v`D$awC#yxpBm%'!@bJ^ 9+C -)߶\gHJH8ۚ X0 ,i_־NJcB}6ۥ?v aCQ߆~ )4o |bw}HklۢTd>B 1z..n8ޛt67,:M ]U_9NkN-{{T9҂_s~__SL&?y ׋c(]艶#61 Qv!RT{fWJR*Jd[[Ou,oPRm8ۧ$vL88<ȣ(+JlmhRFcP'2eۥ*7'T|wߧĠ!%wf3:Ҡ(pycxGcfeIid D;ҀLҬ`9:9a2;ExO.uE|H:B%3Azg֬&ކ1WvH@>ݓBHP)ts.tLY֬_>c3&cDYU4A`_qҮgw|g ߥ,x{~ =U7<~Ӄw1FCUɣ褡Yay5+9{焻iEݴeoa$E{/溷l&Icc_{"9m&D`ӴĮfq $Ml.ʦT LFzB( 1qn3JQ{ηt-9UTDo6lBS{|G٘zhRX}kAϧsή|{K5 "mToXouRcBqfrtիlbjuk\9dYC )aԠP w+Q!}N|~jdC̉WINѪ2] *oѣ2( ~,$'(y1L%C'[<(iH(VMIW`ۮhUj8")@c4*x"9Hw *12'{1 3:?0P"mrcc@hCĎͳ;*U_%S7} |bdo0caZڮCA%ᤄwƬ]sY:wo6<Ǔ\^1Z-BfM?x;՘ɈB %ʇv\ag?A KW#R >;*u1qס$AD2KH@ɠ2%|I%JgͱB)*1"2b{a-B >}~v︗s RcwhءA,3]}($#=Vxʪ9+ZZH%ni6V%D:JS9%1"}!>BMƊ"N$gZkQtf2w]~$޳\oSqOwzZ?iY E\T2MT 2yYR ɤ=ߧ[>^^{3CO`oS )(#bJ. )q-}5Rin#VzGG°:ZOƖ yĦ<s8o1ޡ# )[9V\% NizCKf LT@ K2BrL1-)Jk]t¸a(I!5F*rTkK!bKjF] Kh|ӹM׳j{Q+6mǦkq^P?ķ . }b ,qX*% Ƣ c-11E얰8Ӈl"kim 1橑Ye\b])!(CHu381ÐLV)5>gɋDH\>ynjS\ r7'Ldx9okQ 疐 RJWjʢD[GG#,*VM!tA_J2Sߟx&&DjM;6(x1e niC@oZO Z|VM2"t1!\ ttmII0Ե1:L)xB4ۂ,JB^LaPFi o;h}K kHU H)#INb%{ERRk"&3 Ӝ8gMHYK嚺9?͠sҔSR c2<5Buo߆|q RLQB(_Qh(_whXhc 8OnPEuy'?ݚM'Ss8%nCv,*NEűCcQ 9.²:[l襢 夣Z=M.2zKNjy-UȰ8y(12qU23b\#i9f/_z˻ORU%JJ "D@Uw~\Kns??cZ$BOz4(UCֽ ا9K-hDUu o =wH%¤HDUT袠1ɡAlH${6E.8b "߈"=Oxk>aVU\{)鹈1|^{ p=9 >"U XO65 KVgIQvBb#ˮA I ÖgcZHLcR51HdžO_uM͉ě5P', K&iniZcbeOzfkc|xV0*k {CRZ@B` f'ow!#O¤n5p+|dbs}I[6-s#eѲH>ly*ζﰽg=umG]]`W z0,5Y,Dʲ ԅ-,rhLd f!|8rʙ(;78Ҧ r)^w2u^B`I({bTP},1c%v (mi)-u ,)'H\ :c&#dxE*c]*ٵIw;4KKg)Ȳ7|NdTUL&u{Ơu66)m%3g;OtinhJ$n>F9; ԁާhP0F˔dkm A\^_s/"JV3HrtG$rR:uLb.ᣘ;nFB^^2 #!YlZ0N0Ze<ce?pӋ/V[~w1GO_?]&3'(!)fiX+<^l<9b=Z-v iF :!JL|CBc`mxu:e`ҽ@^~Lg# ]W}^ԬZ#FB)tAJTzĴ9?hǼ>Ak("jΞ 6=*ū3NN021v!j='7|_7;@KYxY_/[5ѧ2x՚t%`8<}ӓS?EOS/ӟ~:TFPEwPVłr~“ma_0>\C~}gi.k)ZN:UXnl65Ն˿׬kM2%iœ'oQ|DRq ;y'P1J9Ǩ')J֬@HFхe)QZUAQ!h]'+%6+jhI]y3""&H53d70*' ɞZ(KL~/!*d>h T]GD<cM P1$pUIEwi _a݆! ;_t\mHGlrҐ"^\c@z{o4oTtm:rR)?ȟo)9KD%Az/x}hւM⃧k{mh:oVx}fd4YM`4Ř^ O%dR{jY{RX?܏}ox>9>w4>ts-?':1TU/,{ p("'p lۚE9Raa߅<qSZbr FVbX l6"D4\\RwsV0ӊ0hc#SΆ mZ !Jy Z)h 1b")]椪Fvzt|(ங#ï8=-; kO˟Ԉt=/{J]W-;kMin iA';Lky*\.5F-EnFWd %eyx?fǿf" P>%M |z:#fɋgA|4mC]m=~/ڰ^md? ?Ӷ!8bx1<`I={d2lbyO۶TUR v=28e|Zq6jvka%}`FJR!vh̓w7saHF!$;Tk\\f>~%F+ 6fٜYb%$HR ZӖ"E ](@N^ҋ \pCJ] uInL&Zu&!wCP<kR%( l}2LgFpMSbUOvutqFuX@Hlv^P,-톿,Z<[oNQ&$x0-M./WW| dB yF̞]6u4[>y I3?)JBw[\!VW W!y1H-1esEm%r 劽E=]ӣר{e̲?#}I:Wi `' kzoB i).Q=8{ |o? v)"l7g&)^z |*DRDt5& yāɑ,d~Эm7 :CM%ɔh]˱6vS=1~G(鳞=o1ǽD#}XȎ:gb~\i厏VQCA+7c'8,ݱ'PWFZL/.׌O10fnc=0xrɈ&@w?}//0t|>cq2yntbQS(Kwu6M) CQVf! f}QeY11P1FڶIe8WN @RgmA)MYT(Uu/@a -RB+#cȁY@vصmXJКJk@XnvMPt&GP:[8w0?y1ZB#R*YG &Hu23^670t]g׎=l-QZkhȄ=4H~z<>7 3<+`}c1&odƔεt#mbmxq}tq֫yUM8dž9QOq&%! %69qݎqRYbt(A%fXj11Jz|bmYC%Piv[͍$#1a@wEI߶tĹ U1=}#\ϴ5-YDd^˿wSycF]d]Jv5~[ʳKiJD_`=)uIhEhWnG4gBD XJ=JkN@UF Q!˶bwk{LdCat!BڇCrXF7㳊aubS1,A[0ڠ9ȢLΈv߽$г[~EqQ"0)ۙ 8_]קw Pd)7S!kR7 %H|H Јb=5Q>QuCJ_ď_EQcnjQDՐ򤮵gJFƏM;v 'gm@%Gk-EQ쁤}R.3k' !c1X}ҥTC.G@԰=2`2$gpf {=O>&W4Ρ˟PjIr5ӾfuSzC)vmt;޳t-+hOjv'vm')j d.8/\N,ONJT0Oy;̟=EV%ןqwڰ.mSj*Kް}V}P)έ$#l7؛W\Lj튙NfH >`B .nѣbBr%g<Ʒ9=Dx<,,X.m,=#}Ϧ3ߏT$`yn-7w!4pݝsYz\1)2[{?*eItJi %qД !T`RV聭'gF_rk#Z*8ÍLSLYeQ=)xuoHX=n_9a ږzٌ\U2% uK5zYf{\Q ŋk>#>~ g]XQrӳ-5$%>QB0!x׵ɣ51AcJ&u7.R%>#)@IDr8#mhBM"1DRƲp=R) S| zϱ o ˫@;v~xSV7wLTZ9l MBItlk)lA5v[Dt%U-vE{HM-]o:z琾Ԑba MQ1 c$6)l:- T(.<@n}5~r39$wL?ץzO1Ua3NAv{KoPN/IAv;2Q bqSSR5~1mat`Vf쒈O]$8lKCL"\̘Ү|@hnH) Qj"~D Ҥq^s`gJ>kG2X ŧdc_-o:G@Ͽs)Df 88w;t#XХ؛3Ʌ iϟS/\f1{TDz35YfJ@Rys8S^B7>_L{DQټ0:/=)"_tPqos(13z,xGCA\n?q̉dټVŜO-!9$SBRy5aZF煁`dI$^! L1[}~b8C&DoQRC] ˴0T&/.>j-\fqE5=w;ͷI ?_vIh;^ëw jI!XO'|]lN\ϫUz9NJ[(]I3sjDZǮӸos!^Ȣv˗wD?a6x{u/PȽ 1x >{Ϯз-T &)XQĄ|o{͎hw"Ɉ4R\\ī۳ G(C|oS$DEǤGߣ]?G?kzT66);bc,2L(?U/97?씮kI{vZf͏mTeuTUdZwަ:KLuXQ]Ex0f ~gchɠlCbSNut03 0V{o;)J*9RC]Uݒɤ&@"6Ǹ0ɞrˇa! >Nh/_~̪{Q*IYٻ* uUk0Y;ν#Ys9T ]zdfj|DuVzDȌshn!Bd8&RN7*Kr pEܞ҇wlbs8>~bz=ixz{ cJɔ$ a.WZ␴$ Dłyyx~»ɴ"nO 2{-s\Ą,+j $Ri2'׵-I6p}[}نZ;&&ۀ+|M!$)tC׆%R_/xU<@ΙO3*p]~{Y,Қ%o?JHv \Wuk/g%{. 4p qȖ b|1$iKAe_@:mt{,/_˧^ӏ P8OdB3|sC>MTuI"$&DQ!t9 L13cڿ ?v,KVCaKdCG[JyG,cXԎ|:)!aI{p#ǭD.،чN@H\^r"(r=or2^g* 9=&d|uХ2Uph1ZgPԚ.'}$˸gK)Ew䄶1}<G)=8vJC}J);HIz%̭㧜Oh\. |A]κV}O> hN,S6 DeA6D64%˗()8=,J$ %kv̪-ӷX'>9aױ!y wWw3ctX]˺y)5/hߵBE [̱dO,<"wB*CG&Nq~3=]#DӊP֊v7|#Ylt]m{V51Q"[RbRל]ZX&}= @)/?ٳgAV?|0Jb?^;68H mL(. P4U)1s 0T< ?)84x7>"Ȁl6 -/~Z#S^iwkn.tZk.=ٳN*vvC+M1/躆dgmKu)XvtۃRJʲ̒iM]M)77[h6L-h5Xt N?cڢ2R$#/SU=E!QFi J .O/ >:\0B *I=(+p=29! V(14=QQb84X=Z/ ,y=UJCq|dSﰟ|j١CB&L/2l YL՜>,( \)` feq0{zOQUlKbϯЦ`xnpXIm!!H[8OY ! Pe |щ.F>E9v8SqAX_f_ F^P $WH1-mkQFMc`wW8})Q\-W4vB Z^bBtMA) '5efȵT5)s:K>欚3+*P@** ScMm ʮN ݼ~8Q"9e@ʂ#b (bJ|"ڐo)!%1eW_ϗy#G~5>pO&SI^<13a\JP%bî_'&OI|cQ,S0xRTSɜ~}Krm~_w9LQh(3OA2-%)ˎR$E(Rrxs:&ԱUk IDATKb XŽGCQ6.3=q4h FdlDr:J g Q)H}c_R) @! "}#HC;RWx cEfnFA1m, В {~$cK`f31{gA70S't1eߕ)xocuRh)IֶS A6DBI RcH#Z|>:.wC\f{HS 7xUM]ӰC`^b6dF?K4tGo)\]㤤Z% 9P}O@+Z ܜ?`;;|/ g?_0qR2~QGXQL1RdTĢBczՖƶl ۦv Wp*kJSEMdo[ڶݎ%u]QO&&EirA5ycd ,sR8k늲,( 7Z)%"#&O Zߠ-{D+Ҹ%x)2RHu_J={_/`/[^#K6{g->d[rWJ"3*$xVѣ \/9u쯻zha& 8*)/$96mF3{{o^{)JY}eEO竞">@8O 9"H'!08\ RHULSRUAEOqMVsLi6սMp9*=zb7zI*JS6#V$S tR"cwY9t/|92&k|٭vǺgi;e>ĀLB+ʪi)Y%*1)}K  QZB2ȼTCH7}"&E4T2{!TfP!Q{nd{Bnj+:> &JI]5B( C4v@XNGYz7!@ON $JjcX:VwD">*ߜEqq~9Kn_* dgoL8R NV= CD#} LHbݠ ANC@ 4<:3JƟDZ4 gEe6Wa 6X*{.1B1fy\<qB%1$) [5[J`w]D-"wB1=ۆULf'WW\^>HMcyNQgQOqFS%j0,p?ab\CGOؖe"#DʨQ0.̔r%3SC~rM5.,&)b DAdrIfOd R.?"\$貢vD<0Cb}mMrђz>|rš lDl6D" +TjF H"cfPZ`cawvA 1&9ٮWYF5Ohohm6|'Q YBH(iY~Dj4 :;gȎsm"{ލqJ}ԢCatdV nnS)1${;v IHf'(n]KlIIYpG?c<1("Qk5"Ri%Jo< J*D$9{p\mnz ѡp;6s-xZzQc Γ}C`<)%R&ɮHgX/EEl-дf#5!/??G:R)Kl1+f'3[dfG1 $D:AfƷ,w-u%mp>aDdQNFyO'< Rh~\>Rw}5Y=Jd1a_yC@?*O=~gx@/>e1(D \Cr\ѓKt [s)pB @9C7#P\N}|2Ǖ ,*T1C)QiC @w~=!ơ[f^zfm8>;$ceX`8>L kPPuY)#;uBCݍF7I>sw'sz@bH51]jb+RU}8H5GҧBhT:w.@&F(0\! OH"u#qk<Q}A7>gLH}SFU){E߻{7@1$ c R >JR}o>+D NQ΂tV#6&]i-ʐ DŽ@jt:m[TL&)m"&[|~K^~ěUQ$O>Dzccϟ&D ..S̍|sja`%IBb8>_]^Ip>05O'gxwW-Kt"3Bfixa!?iVc<@bg` P}5~şc?`D<߅̏aoFCN20/$$H65ѵD5S?@s"#Dm֢>! =M '&؆`&iY@Y:Fk8E@5THU"Ln-Ig4sH,YHWP1d18l>I+qoiihL1\ Vc&Qd m쎽^Jʚj:ӧ|wv ב*l|j/~Ku to($DvDF$xO0+*u=lN 8DQK-k,#}H!B@lZO)=}tDIbF( ޼x)eH~Ż''!%PlZIñL 2JyzX-1@ ',gt)rnuG2F@ SßNI2$0m@J vH$DTQ1i9Wl1ZKlWl>yNAH"c-WЮ弹a6D/)ּNiIoiio'<+s$ˤz@'ve@r|ߗ"oZx aq\^34$FʡAcBHBj=0;hƱq7>òE EŶ\tV6''TՔݰnz2ǀoAD (e("!>FH"DQhT9E|DP7j2He?OtZ. h$=̙@^crH4#1zt0k+){iepay']CӶ0EE=h)ub g8Z>|Ĝ(fbZ"@>p"{E)1;GYzr :Z|t<<{tɓӚ(ݶ']&HBJ !EpB1 %%XB$ Ľ{Od|}H~0ɿ^~I"@B de},f$]Aln$A;aj@' T\Of|Kz2r4)AN7DF"'ȐG]IӜC{pJ2E&bf'Di"eYH%#XH>0ŶD%wktY"̜ɨ!L ՚,앮k-))꺁,g/(4*LQ2l^"kHY 'DxpwZQY۵0>aq-˂0\1k11HzKRja(yiޣ0zoQ(BR^mfuM[\S,;8W;L&P5ځ錍ܶ'ԑЅl˓C6&AP3?CR3(uiK2iIy(PFRی.ʖ&t U5&F7?2P!aUHEb&fF4Tu60H@*#(J$KTJ%4Z)MAL(h*DCƦD6]b}:ʀJ4|n,wD&"!&5sxI=KNkfe#;\WKMd;Wǫ#.">:*]0.5 `I,4*hè`E" W)N$-(".Ta|}ŋܹsC^ݠBJ˳AęK~ PQJ*Qf݆MQQT3{FS r{Ң1`M /bBGF)8=1y90d; AC)EjJ0(P'ɮ ԯ3)thMC9>5_*ĢDc!GaH1,s xci&}()%.^<C2R2vS"'xh"?:e ˳tU6- zY~;p@vo/Q઴M( :aʚ$^kCUM) G͒e6)%9 ]l;>E& eU8 lFkќuOe)4$XEz%u& ,^OIH(I|#R oȣs3se`4a2J[y)]OoE|Ll^CIqOz<"HZ˼Y;9!k|ek$޲ 2} }k;p]*!&!J?R<*fMCTڌqX2ޙyNӄցz6t>Bs[ 7o`vl&a 콭}^^sI=o;V?_SDBD&&:/ցSme~"˴.REE )kV!* MۢcS0p땢E}]k+>(z֛ 4SƓ)ҭO8,>EV91t}=)!7b&p> m шz+VL-l^~4R/R* f[%S!D]3 γDs74+51cD@(sR1jCT9)ij>I aj{琶8<<^J]?*Spp8 IDAT2Y붞0&r;!`e`K.[w2袦*K|H?snwhdlffJ %Zι( ZHfZ>gQj%fR rIFz, 6.ps}Yyye$ֳqM}$%MUγRHҙ}𐚛RY[AN[^L;`|8>g{n:g  W-UH s3կ?Cʴaat.NB =PvM+R'4*y]L&RiK~ʤ"wNg&VyAhm3_ hBʛC.kIYm⅔S*%]1@.vCJk(JR!qhQ= CG<}\-5e{?~h5%>HzHf!.CcSD,^O븮̀1Fta!&lw'|=c^*NsNNR"Z NHQW^WyƔRh㦡(J\LI݌?.ppKGޑR$4?%OӍ *p֣1s ޣHYe33?#|Mۢp]~ux%JYf0B ~+b,%c|x4W (1+ "ς[i^b\Oz8< ]Y1Lp6aڲF|"ˆ*)%UyI,۞،:|.l\szݴt)`}<{Gu6NK@nPeUjC "x'?E]Hu}. VE\|cmcD3* $E0SZ1o&g ΪW ۞n{fsQS4uEJQMGe4c *'kCԚJL9FU!6cxM*qv;BQJqHĜY)3oױGMG#:I*J7oݥ[iJ=uv%F#5ӦwwNs}cl0e#]3Ooc)b@r, ȼ¹||E1NLGLfS֫%G'f@ֱjzȱ0´sj9$upxt|`>_w =o}Dv2ʲ$x2&1GGt9Biw.h*Gb:=Ƙ"{Avkx vww8:: 7M#,]j{l J_TuEٙNڔ{Q!%1FQ m.f9]@a=e^3J}ղv#m*1uQ3z}&K )NaqaW 8{>!Qk)RdOi4ٌٹ.OyƊŔ%ZRD/)L2#XUb\ KB9Mm4Ȉ'O}bg\nY[Fpu&Z%{PyW9"0zd.99,.Y-̐J>BT.:^x~ +%-#EO9 iO"%o.s´{?gQ|Bދ?Q"Q cPJOl1AQM#n0쫔Sztnr{'BH`r=o8~o|Qg`vin {!&WEN+%(7 J%bu]4 w$ߝa;8T [.A4@ Eק|yC~xmiцb33t\ zѦh4 nC*w %؎zH"A^e uھ[=4~g=/w}zG: c{w6mD)c̩n YFk` s6ݻnb,]A{xاGrqZag? >O믱Z0*c8W=Aɦj&{{SaeEe%-eUsGOqy }ʋ/|0"RQ3B׮?1ˣC(R,9"xѽ{’RRfBR(SrZ|܅}I>KZǟ#(Z혶1[φܱu)POf?p!Ft|Ѳ,@VCtt%lY>h3J ȧ0pW27DtFo!x ^SD䞏>ruDZѻfMnhKb lXKnܺɪ])ꚺ/q0;=Y7/@^D=" . To!@5%zb?5hB=.9s^e)%1ts86Mq@Yе|bJ*̦c5*Mj9(m0)܊6z9? 7^"'LѝR01&&LJ6MGaSAᴢP^cQCZioߧPRS;}sv KN{^)w}6 ))؆UI;?늨n!QK$=dQXUUҩ8n޼G٫Rm5]VJ}fՌʔW1X,麎uKEU , & ٔ8wn4t Z)6톮벬*붧 #)#GݽݜY.UC2m4#bL\tsܻ{w ”LSu8穪)RdVE.KV9Gfq-s[vVYl<ޚ]btIQxYoMʲįξ042_gS֖ 47=L.@Q ׷T -@y5Aqrrut*IS%KAXHJaLEQ FI "Sׄ>)a(ؿ8U Þm -Q7$M2_Z&hr!Pc95U1PXIt:7G/TU6/}`;+̮Cy(a:J`nݜKʠ1K%k5mGut8PFA>dӳf4ڙdex9F3_lBP@=̺A(G,YUPF/ tQ Pe`˞\( J[G`|8OrPg 1G=Y)B_ eP!EK Ot)D]o f zP)S9DeCYS:~z 5g9-ȓ(!Aj2=݆פ h]ąM/>o8u}8b[(oU(ˊ'|ɜ_Cyh:kF w89ˋe65"i/I(eQ. WO7s^Wyk_v$lͩla+'`D)}VI翵ʛ] gTyO m[Gxt>zvb»7O%֛uz/E(SSNvٛ3>Ǥ x=*מj9a.29d] +DL-z}rT)Ն:wƹD0J1u$sf5f4L ^e1f֊GQ׉4BiTi0EA5T0)#X5R(FE*KPЪ hJ PݼЂi> N@U-*ZsBlFf2%Lo+s}U7_C=Kp!{_O2+ԩ@tBoaVbz-S v,grUUTU);y75⭖ЫmlN,X8C2Sb/+o.]ߩ%}`ָ)KJEMo{\e͵k0j9<<* 񈦩hXm23@G1Y@Uɺ\ u1M؎Oh&$t#[)Ahtq6USFRێNFd"A%P1hc z6 4ED6>c- >K$ay'_`@ox晧_N-$,q;} XBt~x^`U\xB]K`$Hђi}'\,*d\1AS1j>1hh袆B)XHf)I>QLou #-fF>Vf'?x晧?1&BgjFky< ;@ɽT|2҅_E锧8ΟTe%ʗ(@! Uc9}bT7qGyOI>Д͈P[cUU\|f4^YI!w}n.}3-;>ڶEyYޱl# 'DIR*d9Wŋt0&ϦaɆY暮%aJAS,J),g_h|98<>x(T9 Ѷ0Lk@N+֛u)hͺ~C\z4, #&Q)rhUu3MhLww 5Z+ʺJ (̲q⼣-uS3xf3z˚)bZ7͘ .P :Bka`YkTAQE J2\|EU;"'+,IULW^KttyMT9Lv.S/shdGY.VH؅Rҟ,M![4ڈiVPh%'hMN5(;w'H1:IL) g{le9^m8lIBEH.‡@=|f"GK8L>)*T)TEi uT՘^ Zu9 oVZo=> <Ʒ>>/ʿf@V`Hק9{}39ࡇk$)p4I(ho0@p] SV(*bВTɠG [1x9T6Vgގ-}2 -]Z OQ@ c >G'>+]*Ogjx|]t:e'?*'P+Gw=iRܾy^W_~ e4#B$?l!ms3?Yzk?C?"^|;Pr=Z{]*ZWJBqߠT,E%bX(hąk=OY|sG⿦,JGW+6*&b -kf4Ő0%>߇;~mHpp{|+c7 MRu ATUN8Qx,tOS/{KZrp"s+Df\] ү.BHRSXVR9{>"i&]/|bH ~R bT\@yCr0%zL̀)b<ÚMPJ ].G&)lqT5<ǹ7|K|P([D78Wwp}$I=iQ}יerZkO׉j*Jd[#꺢5(%ijh4ʞ ^m+uy2 Hϭ/ ]L#˞5b}l2%jn3c\Z Vc^sxxtZqbt]KT0<ܿwrlg+ՊwR uS]^yU)]ױG݌X^>Nd_W5]U IDAT2%;;;Şk۲jc%HBg6m15umEf> DRO`L8#hi|F߮CSud{$9Ji7씆OݣH]7ݜoNsHĨ0g0`O}kD$D Nꬔ.e*V'a#PX)| BP4u|q (P87,K"EގI 1E03x}4C"$IW `NJK겠PEx}a|eT-8+Ii^_!)Yl:A٫F3Xs) *$tQDb9sBITd4qb DST>¼CQ[х1'6($7%wgCz@ox晧_~}z#C& )+f̟wc sPiK(%5TI b +k=G}OX:ןw/)& f0 &iF'v_`6e(@j ]cxz$'_, Ft4q"H4V{wNZRj8,\Z`2ALTE+/7xk/qt6&@S{Lxa;L&c/n)Mó ܽy$%c\;~yp@xw/µ6}Gn }cbw+)O>af3q6Cg/C06œ<[hw.`㬱RzM۶$jeM&W{jb2u۱Zy6Zvvw{.)E^lC6 0K.m%feYi[Ng}h4m;vvfe`Ko=Nދ4wrppx,6hLY1vˊrr-I;;xUUE۶[:Q\rjEӌM~mɌH;88 F… ȐDgpV]mcޣsXkkFi24lnx "($rۦ1b3e.C4 6Z|Z HT&rB@SU]Yͱ9n ]UL#6 cUu4iu٫sHD)fE\/)yP9)Yp&@  Fօ0گ5S{.stD5[\. ]9J/%mh1$G*2֤|01ҵ%]!NX)hn9G,*|*k/sS§5> ןe"LmTrhz=IJVa9SO1ͨG3"dG@_͙cy|щC(%T0BIsRQ![qJ\2抺ݦtbd}۹7͞jCa`l? ;0ܿwOqԚh.t@0`bx*PϪj222}np3Д\./Z2Y#[1 $IAmy;uX h FߦB뜙10lB-NL0_W6b|D64.2<WfÍHͺc,S; 7.p 'Lq$fRLr˪ U]w7^y~n)A,F,bǠH0uM׵‹̏EC^uC*ޡbĢpEIr;Y.mΟ3?C|SqeOp֭lH (5> ._KQ֫o:uUqe\ ޾o8R$QUA7I:xF-)½w_2E)0k=e]ؓOO~5]'msf&l( qQ[gBIqI|X'I!.'ٞnpqk{Hȸ(a3v.3wLCAٴ-!G ԉ4>9`,%5($-Ŕ[4X{ +3IcH뎘)9*C-E%qNE3EM&\ łX,l6S鬣Zlo1֛oq%& qu]^orja:bb\nɄf=!m[65d@6Z1!^Q f3OJ![G;k9]o!IJ#u2&E` YUQQMi7=n᝜e}֊]Ft9Ku]oemq2_0mC凉t[n}oq0\g 3IEJ&?2/ A^WYx a͙LF Q:.Kv}L4!vܿwBI2/_R SL g]ukm肢,7'8ݿbDbIp 2&;*BP\G%) [2(̵l/Ĥ:SPdhBJ6xV&D5>G39[ύ/I7NEj>w@sp]#bs֛`=1TD0eAH SՌLv1޻h<^b.TfD3T&pk,Ѻcd. JGHQS@"ƫҒDیnjFhi9$̉GSQ T%-1 l@/ whpxM:xO`ggw*lzHi J#<"itֈ>@)g-? hRg(&>B0V$mWVX}^ w>x{_V0yI)pi1 Đ䦵)G2+ܿs׶ҍyz9kɤ&dOUV\~n߼ɍ7d:b:x'O‹>sur 0Fs 'ܿuLJ>Qo{߽`Pd󾶍*EYp ;{ǮYXpn*ϟ RR?ؾlNB69@,J+i4h=]'! R(VV TB)/8QFcj UTVT\ TnTeҝE }"NR!4" !M$ei ]9*DrFvq RPI @1C i )r4cVw~Y^dzxKa r]p]nCw#m7hå'4L-(4(ꚢ,~?$ZJwk_ג!{ߘ/ʚHHqR^вh{a+yA0Zh Jl [n&lH nբDRU&5fVwߝ"L^Ή/ݐ+I)2 qc>}9꺢b~wfҟr̼,-1ꚾY_%=0SI@AJw{vZ[mhrcɓ+J#RJ\__3qt> 䄺Ƒj84uӲK5~?a927q4 k+n߾K HJffOaY,t]G۶p^֊t iQUHsӨ>zim2S\.'<}Y;'*H))' ibcY;zUh@bA\P]Kl[Jqnې#UaD*F+6 &/BI>drrVҥ3"vq4 ֒)LEH٠Yb~^`s4}L^5|&p@s]˩v[ytZs~B  떶[S;6QG=ZL{k-/"ggg,!c_{.9bwkg @E,1msv3l0crC-Yp^/p}]TaQܽhhM"LTyޕfHgxmVq4Qfs{39{D:KŞ3'9}:_?I8*/ AInrPJy6pgLߙt%QWf35{.r=V+=`RŁ#W Holf*}6Ͽ՘/]ݿc/g?4C1+ ]LeV:t̒ᤔp,|NJtBou{$rsŗ_{ewxOqv/)5hCԊ}n)V1x)3{hsE-ν;w__\>:?3?Ҷ-}c56rFqv6ɟښqw2{RDjcwpffx2Υŀښ~Ss6_[??#8Lrs2X~bš;}HbRB<c4|p$Mc68~߾ }}Ns=Zx PH ^9#EaLś OR8+AG+ I,ʯwyfB:QMF1G\?0:0zƭc A>.hV}BLX,K 0vnsvvNUWqn##F)ںt a hkq 3q-Q)|Jp)H%iFlQ1S=ah ˯mW?-)~'yo׾_OW?m8AyS_XU"FMv˻0LsXcQctb0J$ G#("C}brV*Fء1)Fkkl=öO ۞mKR08% H.uq>* .ڋ'-.aMɻ>%W_d wЏ=vI)s!E ]؆a ZTE>Xhܢc<= c"i!ƎxPGG n=O4iQXl e4 !K<Os<> ?_?׾gxJKn/~^?N$^X)Ig?F1MŠA1m.B_`8z=?)AȆ!V=脪Ĥ0U ڦݷ(10p}m UG bD%iѲTJIdy<~{q 1ƍD}$/j-]5/*͆?_7I[CJS4)R&bogCJ^p-xϿΝx[dJ&_$}[+_u?D xvۭtލ` .cOJS;O~{}_у 㜕6b* B}}.(_\gyÇ]bH2"qA9~8wt6n^Ŷ!9;:" 8}G)eaikPFaT.5r#f;Q&/* FH;XՊ@׶.DU4E@eՐ0!EwDKniA.ˎSe{DH}JIbƘJ ngP ۧj+nja } h%J VCEVPDŽFB׸w }l \8k-ɞWKv!ayc2rFGש/82 }zO ?:¸ 736#0TDIZSigz@%PJX,;e;.ד 1[>(^~%Ʋٮy>$q\:cٰX,n16kx&[RԵD[kl6wnV)i-yX,FދSU)%hbDV#>m3$+jѰ<="kAe"Mo5j!u]EJ}&$y%12"&i"UKjdmY4qa~\4M/N"i"ѳ A-7ܽOuئΌH^;SW adA+܀NSibӚG?Ĺ^ 2D ! iG` 1 Zsf*S^GҊ! EU"K)Ǒw)YI=?T9 }??<'6 „; @P"BalP m0U˯", 7N`QhD)EU7|mŐᲮ;ȸ tY/ZShnx7 ̀,Ք#[o_2Uݰz=ɣۭjC*V͓ #hy{?$xHCϓU4 )Dƞ7xmV>"yJ" (ϐ3 G v!]Er?_|a "ZKJDZkzl * ?L0Nr_wŽIwDP1paNISS:[Qܫ4ys6!BTIًdYLMLv[!9r$hLS:Dw`%H:1EơuB,.JMƋTq1ʅ ѣB-c c~?C֒"ZӶRbL|=햶m&MyUUnYɲފr4}w}ap$U]IJY{<)n.vs$<ϥg}h+L{7:0%ic1Wj!U(TJ݇ןx:)*ࣣ*Br` pZKz L'zbc!X5lHK?ʃG{O*)@aI1 nZ n߿O4}84CD6M$!lX$r,es,(ޏAOl=KA_ib^1IL:ZɂW_4C?Loҡ7 ?C甹[8=9SxcrnctUH1a#IOE¼,Ra(z|??E7^YC|*eR8KVOH:QĔY.ejRYEX Hpx =7u>z]7"&9 )<;bnO)I'ma$Qr}^hzP*˽SZa- $dam>@# C yWǸ &,1 [Qjdڣ挔@3ejlؑ B=(~OtDQGryhD xUqqCQ|"WI$R2 4_y>fgB4F¶FgtBxy5aTuMFQXH bO<\-΃($RȬU>>)j͖֨N-*"uJ<;ޮW gnF gX "cd}BzSM],0 u gAHHrj%-`FIcrzy n@cnD׵00 g*Ȓ\6:vv{V4mE]W7Vr)妮Y.am6pFZsrr8 8nrVOc&N.%0* å T`:kD25. vi>ǑfAר7>()fOSjySjPc.`.+_nfͳ>(p~p<HIeMZI3(d:wtJz\yIݑ$QӴkd٠1-h(q@yiPR[zbU P&8нa a1;̬)|VI"=73`jPqCH2vy¸up֭u11hmے z۳Jhѻi(<3P$uJEVlLa1=w|ouר9:EWR r-s6Eۤ,"ÈIX#V|( gVoFx= 1<0pdB9d(Ln]^﹨pYV^@{h'Luܽ{|SbQ)%DʔUt1Y4w558p.PيN:FL )XMS!DTFcQ"9WkMTqc d,fQ*|b6PFy.ײƜU 9\J2|M.&iYf~ZyA@bd*}BC/?B^T?8R*Do5zheAE Z[|Ҙꔤ5IktRdF)a{BL`<DM+|]G $ [2.k+WNxBbr*`RDBE_JzďCGPM4!z"ZK}@U!JR|xmۢ"8 ,gP78. 咫# jk1Q:aTN$0()`r}n|zAHAcEwrs"߰~t5wvH*vL Qʍwv_ VO[7w:o'Q7|~ZeoL(r$ָi9(0pb0J r7oZmSڮ2fz ;EX7jV:m'A;ڶՊb1a)EĻ,?M^3_? Gm;Lk3 ~~G뚉[U"Zl6i_L\C—$S쟋 "m9ikCa)@N U9X^PzGt^)P[Cw|BJ%Y3 5f)"P 1d]i0sj$uW̜eVX@JG^~XפXv ϾÐiF݈wc~RrOik2Zu^6/?#$*'op~`-u@s4R}0UYS]y3DCwt &h Tm-6:kv OvWya)elf'Or{}fMʍ~O< /G$'uDY:6Z9|1ZOs$p7 |[.zn Ax>>Jr( )1CH CgMNo3a #%ѧ@W(1#TN$N9 v]7Rg(cHjv{/L]pb:RS!V}?()J|TT5~]@25%ᥜB/bN>'dsJS@(߇B|s!H1:i1r:\rJ0&OCXUibc?d",A|YBZѪ Mv.55KbFz?RFJ T"{q6*Pn$-T>fCW>Pg  l Hds-uJӄxb QySbi #(r߫[.mvMDH ͢ö$eyݎ)VY6AOqka YL)K-8C&粬/b#eS4'{d+> u.wcZᛈ =Nk9ꔰʰ- GJG'iR h&$pKqEU& 8 TsksM^{ދG\u{x!DʲZcX4M>o㴸hQ~.sD/,Y뉡YBzry8ch;99F$:~R@,g.d)Tbts0aLDPkHמT)G|Rac-EU/H#!y?f>@? "M^91<ʔ R fIJImկR"=1,w 4&˹%=+Fndey>H@ҁZob _?8::FmGqKB8Ơ"=TӍXkJ2mIe#@aIhFLx/ 4K.HpJ $\ֆ:Ţ!%VҨ0W!%O[7f>bBtzy e+a[>HB DJb. 1X4f+-C8JwqhYt-uP>??9|<'6bŠp.Sҹ!W:*fw)Je&7Ф$wcGbD#)^=P>M/,9Ƙ: )>:s`D)ET ɾ $bnYIѡ E[(Ir,:W@hH(+I5D8PUY!W(zKr_+jf,\ηRrΌ=RrtcK^:?k,)Ir۳Ov'O ыYs2d1渾EK\SRR%))`t%"8 6b:(͉8  " 2*RqHd,ZMJ)23xű' $1!""#B{q4S:rd6S<#$Mm̝_bV)1EHHE KK} V=OI*rq~G [[ˣ׼?f݆+^,)KL9McTJs*lSc*t!{Z2*%j={_*+JvّBc\mt z3ɑ 8lČuxlMZm&ef:̸H5J96|NOO !$0mm#iXF;1JZOs_.s—wIUdf1R~^Cܹi?C;9/ <,!x1j.,/nΑ=I'քpXYe{e<-z07U8'͒g}NT)īM9JQʈw,(K奩E(['Kjaݜ$E3hlCDk3#fm G? xn׋䓚YCbZ[D^Q"_I;?VJ#)^ kHVXBa]jυ [JWc{VlBN]eaܳ۬X?zBҴbIXn.0uby G'wȞ^;i")gQLKH $ L[ dCBґ04v`;NIT9Ax>>!D dTya?żGO3UUq}u?‡ϰRL0 7"a*R5Փ'|+_3yм7-'JpڃP9R;4*>G)3uT923?履)_MOKz9󦜏2߭Ou[eA7gXH03b~>ytƃ/x<4D$/^2މ:@Ḿ\z0)9#x^b.wR&$7%CZ wJ)&:8*V$~>¬PQT,ҁ?D77,n=U$XQF S´ )8e0I`UYP.wTtミ3LUaHHWz7 S**DeX8)UM6?S?;%Y÷GW+ͣk冣-Ow9I3N>ڧZCdǀ})1r /I=>x꺢k-S#dm!8q?|;{Ou\VMr&5Mwe^aI*vIJQJX,> v{D&,Ri zǍ5UCjdz[>w.{x'4',1ITcIT$`v.d:ȱ\[) k؄;|l.|Z"&תC&g\YOc?,C c3 hDmM6`\bBňNԖFx"!OA扜&Fج@Nh c_4jC;oy$H1ƠiHRFkȳH/t7+%md2=mndUdTo^4o\JL&`lEJmL jQ  S\*߹@p7HVs퓇P>,%]Ȍ {^T3`,m~)M! ()i%IOn 8;%:Veh51l9?ZqQŲ5O}z>zzkxty"RY),٭V|㏿Vbz,ͲN)2yo^@Ves}IB6Pz]CG ݷ4OS TauaHJ>LxYݟC:/ Rh~Ef遅Sir_ddXsf:yAK_>g-.s\:7?9VrLEwUxvG.~)yRQ@d&(%bBI2`ZK[T$"!d3q-馶FcГXB amkJe 1@&9jT;1!fZI[ySb2C4(s;Nw#>/Ox\Ɓ[n?Xsr}1tuN<2C !0k=x*Fy$遠*?`n[$c=)%S0p H 0 poȧʻxLs8\__\.ٻM@O׉ D"OvJ{szzъw 麎ְ]n"umX{ SӊLnG{pxDnK IDATŽ*n[&pA`''vV1.u`M Sˆ:eN{=m=_gw]y/{lKN4{%Izg_*響ÇP1_7ڊVB ȬFkiۊ!~ۯb02<G Wnt~քpGLmPwOs򅟒 sebW([sru9rLRoHMe1uEJw8Q!KgLBq>*QReȬ6zJN7zmϣ$Ce,!kbDap,N it t#Cs!zH֣f?adQ /NGnWuԞ X Fb^)7|ێ |<ؘ3Uќ!^4]]Ė>S!@Re1iϋW8uGrdp2#(]̹wļ-2ge^dK/ү9eRҲ8tYEpRjJ)i4|',6ʹwۜ{Jgn=ډ}-L~ ^bpSdb#|3S3?x 10=WMZҪsqG >JU!"%w kD[$<*IG^!I2",Pt}黀@ Es؆B2"UCێb"*Pb=٘|V*RI8/% OۊZR O/Bbcܲ+/; u} գG/3xţ_=⥗opf;hݮ9{~ Av:M#:UؤoDڔX&a*)> :y<*Z5 9uw]{xHUS!0~/~B3U3 M'_VvZڶcݖz;,o*I*ݛRJq}ucYwv\]]qrrB-FҔnz1 hTb\LQJ_T`b;4G, x6iۜi$HvcMRCr\o1B~phޔ=- +23Agy㈵u-簮I݂C RHcjk14KVWHi:ldGP>z t%T:*pı'D}( Az8E{z5O8aXcQC/sY+*c_$W6j!jmPFF Rbƍ 7s\:)eiFϰ.  bAF u8@lǏ+E+4/ݨmĵUnZj":*Hx-2큻25 :AZऔV{sx>Ol^n.ȋ7^:qZF{T&:%pH,O)RR$%As ya )š)Ҁ,&T,3ED9yZ rY=Lc9tO@)SPiͻrrRH( 9}|`^@tż֞8:9n35ۊkTPX,F[ mUE ǴEwvF:ciI?0oR82Z76HSD+4V #ye a,^bm4|!l,$oԌ%l+Kل5\]*1;Ctn*f3CPH) @"N Nܔ9̔2F\p]NP%bi٫v{IMz\78[q?=c6Ž~DziQ_Fhi 94UV"ӻ8NNy>$L`V_fLUTXPaKn,CY4qSjc!I֜r5 T9"}lvpIjHI} z=Eg$ɋb -,ÜV69-a ol uk83TxiLqV})rsaYnm=0~@ s73n:z:69>ӶFaHN R7E'2~jMXbTM3v<={nI!$bӍn2fRB'찿WWcI$ؓ5N S$h1D-߿x<W^[QIDd!t^n~邬xSr Ui 3Ib"U\LPaV12(Κt[|& ޤjZ=z= R9(4D7si͂(ߝ ôHʟs}8kħ@gEG9eƘx2':p~ǗԱeB-R Et y,jTc"sXCL!f9L{fL _d4FWv)-0FMƘ)Jg4 Z7jrfߙ9^#*rք)x$f&uTPup=z+,cyG%&FQLuRC+; !%RHFNP^ўK4DmؤHh˄foNH{k·$bx3 xA u70 -&y Pf%+ X<}Ż?~?/4~5 ÀRS|^ HQ3!:;)-JrP>FtYW"l!{Ib]5>8NR.L"[ !2P96cj~?Iu8[L17R X#fcrgsi9rl2ʹv1 d1ǐMxIg+t |ĦJXHwvӓ/|5s2%PmZe|h%/ܿ,9un{`xiE&TĈ Ms0:z4lzb܀6 l BʔwBML{Cj=Yǁfc{bV[Idb`^%6{,A)HSJOh+Xe-II(lXۄ\;q!Hbg/CHhe@цjY]>Ak6 Q Fa{H;4T[/5cp[0!DP 5.DT$[HfE_aw؍k^:PQQ Hq7P0y}3:@|K_____K_'2~~0 <|_km~_U~W~ٟ^_zb>~pǏ~|O83Rm^KR"={s8ZH% ,49t-笓⻠Mi\2hMS.@šZ~@eHtZ~aH@r pwby?P̨v7?ieePPpu39{Z 8X7P|$vQZs +o|Dim!K͔n]?AmnlrR0T:*7ߧn ;)! 4EIF1ct LFGhed4I4.QQ3d₢@dGVU<{ֽ4 4`<׫_}ZN[g.*Z(I6%ęf^XB r<HbG =O(k?P@B@'|GHՓJv$lBӥ}z59(uѱCR)]RG/njQ1o#e׽/}eYGɊזѶu5CӜrȆ%ACa&ȥ6c ަe"p\-NIC?(GJt(dHG2 R)m-UuI.Co-w#ʫߓ1Œ%Hj1Zm0M4-)*7㛗Jᔎd>4_Mt5cM'٧r9*Ǿ#\6W6Ј>f!c:ഏ疃N'BI ^kkkVN3nB\cҥ,lƌ F}$@Goc>Nr$JoNs>ݏJBJń G|3n0^}=RK.}|3.w@:[eAJEŻ./" Cz'M!B)%I$~l@1P$P>p"5''TyLx&#( (HUmI#d*p){Vĵu$* pp  )h;V/(8ZܐQrDDT:a#J]TSӍCH=Kו'ytW ()u,sJHė*qztOӷg+ٳ/9MDHBE H7'ۼY#U)#(HWdȸz+% E -ŖwJq_<4`E]w]"}ݷJcʖ Ʒ+̜93~=w}&p ̜9￟m/ß㉮R(dP8^q%WljS+|fro|˥̘%B╔c D'&S.s,3!RqtY? ':iMͪhLʖ0ISuTOPV6%]P6O .f79)74ŒYMNL''${s j&d"sj1,vi/:h2_m\6"_4io.# ("U;NɒM重N.$R$U,I)~ %"/)=!$IZ2 ZuJbLV]&sOum5#D)$@8ϫ ~ʏ[;,e%)Y1E8i%COD%q)%E DQ?a=_ЭLG@P(esHRepS#z:yoM)| 8Bۊ6ץO=E?CE=[ 7ͲR[tflj 8)'ulQJ? )EQm-ۥV($N&9?K~C%N~eOf!)U-_*?ثXD0Ÿ&]L_4L &~Bcy vjkkinn#icFSWWG[[[%( J}Ik[+ hhhmm:8Jg`mmmH)jjjÐB@SSxW L:UVX&kM3uǍrx^]glo syo'yqd5S(N;u.{Iί~+gE,k:v\RQŽEQ3}p 6 Hy)x>!H)WkkcYmrPzN@)GR(1טtsJL&Wj&T|m|* A ԦjjjbL 1|Tk3yOOe+`PJI-{FP2KtPJyӜ|S9pР=yw 朣'#A"bڸ$( @B.JZ&V>yZ4sKKFUdJK>MSgA8A8Yf%<` !Pv W+^E yLUEU1P2ׯK.̅\8CX ICbtF/O!K&QQ0l3&Km}F\9Z"(y2=2׍B+;|y͛7Ɇ5BqG51ĺ8t0 ˆ\6Odjx>DϞ=1ʤO+Veڴfi1YPaL%]M9JE$Sbt:UaeINZ&]M%ƒxeKX^yAqg0|!{[w9C `ńaBXiZɒ y*zG6W`̈́|N"?8^d[g,e1d\6KPj&Su8q= mMDQJ#"88W^HHJ6dCU%R4o hںx7M*]Ou0kz(U4)Urwuw!(,CJ!DDsf A޽I@]Z(Bz ?MӴ;]7 A>X(B *%@ d.qtqTTd5g Bp]ҵݨqx)\G!TR54;Q4#uh"F)C(q=\7i*)ʹ2#{ ~;koV$$ C-[Ɲwɸq5o;`̘1y̟?VƎW\-omm-uuu 0}tV\I]]C na}g͚ٳgkU\{6og/￟s=iӦzjGenlldʔ)0o<"gy&]t]w]lty./bDz?/7 !t<,c,$b'))Ε%W]iE"Nc[Y9bMq2@iEKd/BgJ#lb^~X6Dchq,T]ʦxf2VKyWdw]}uzqSO?L}VUa9Ls))qPk=ES1 *lek>OԤuY\ 0aGcTU T*qiP")(HI^JZ_K-VHRFQPT,~/M#)Q”Jfk}dsM9j!u,5ҥ{!E)z8!j kV9HC(CJC>D^9RQ2-83 IDAT4Wn:)~lSJ ޥ俽bo\|<ğ(+">,.8 4"F&3c|:IIAXoVUf oR*֕t2@x=&Y*UN>[%=Lf((DTE&BRf)[&K֑*\NE[j7MgI(9F'IS㟯me~g I!DINt=RV98A!:}dIP 9(-.B,d@>ߪӸ I#z Ph#o""%J10VW3Fb=='J!$TWnI崻o>W(wy[C:ӀëF.֠q +^!<32*P D"*ɤQO&iP[N=m Jd2u,&AJ|@jk0(J)]D㥐GПZ!R949YC>:L""eunS|%^PPyc5- 4M\-UOv}k|8緿6ǹkwZf#tA,Yӧ3rH;8chɌ1bDz1洋xxAS( )uƄyj|VPP&r@KLcDHi_5c)[$W'8z0Qv_ cJy9(ns EʂJ*Ƹjw0Z3-ced&U%hA',)|87<ύ븜Yl铼s^}Wb')vBK)p=Q,]/t|lAwWӧ 0O7>HnzjI)և&(Iu)LT&LƯڔ\l[lU$NK⋉N^#Jt:G_'RuO!JqtXfޤUSQ>&R%#IDZg @י(-MXB)J @WR!"E b4% zTơWwr^n(m4{ͤ#q&q;+V7x_:xZ-4SS--yak//䈶~'"E"jiXBA@Lm&EWI7+U)PvYջ63)G"sr  OCׁEBFlj)\.nNZ dt_x[~Z)[E2 eQ;)'j{k\L4#$\cQ OW\WuS)©΀c^׃ukv~orfJylݒ2 >REt\G_OAP-b@'""\$Q)"jMmQ%\UQT ۶0h#hE*m~c"rSt:neKQ 8 sDO(L 5˕j?E6MM}"5rHъ'҈ZHJq߶V@{+y'{O~:ujT[[ˌ3k֬ᬳbѢE"]wرcO;Xh^z)>ׯ>`…}OٳYz5dlвʕ+ Ðcr饗&2lʕ+y2e 1aa޼y\y!y0`sٳgY|y>{/wuK,NओNb̙L6- ԙs 47m'B8 ndq]"}M\-f6j3!s4٣гZHy~ڪ&aBc %3ѦPUL֯@a&|>1ڬLkV:̓~($G:id~;P񃖩,ٔ2SFÜ~06rKen_J)Tn (>Z cCr]# "(DQV!+L<alJBIbDO*'TZ bDwP:4N _.s"pTDJHrN$CDP$T)=X8K:rSڢtMIQr W98~0Dd T߫;ZV#ҥ }D˦&FUCPWB-%*"II9.(DʈMA&tlғ?J%!HkvD F(PǤo}/Nʞd v{%~&kQ¸\%dEfrNl!2IZV\8i}dʘsF7iܓĂ'ru_IݿlzJbPDkkkؕtYҤR>Za,,: he\T[ϒؔJKfLNmqPdyݿ\v˽rW&iV *AȤpVCݦ0B\#$)%p=H:)_[ _qeP ~*bTz\+PhkAE!,e$BWi)-P8 \pqqq]\b)uIm99R8N HHGK5cQiLFAR ()Me)=)n B(, s[rR%+2AT,y4iTp<|?C:K$Azt}O` S|BII0*/"&fr-Yx(n%͓|+mf9j6dP8M֒| B\2j2:asΣnrq*K'ΑGO}b ԩSyꩧx'Xh߮;tRQJTM: >}0n8,Y¦MX`'|2+Vॗ^c8NssN>b3g'|2&Lo7вq5kVŃƍy뭷=z4}ǏN:Z=znrF`֭{z,7'q&uݺwǟ a9袙U+IQ-D*3RAztt:q3OjˑɦR%˅J l&eKfRi& f Į8F2f(g֪v2C,5dl310>oAAڽLƍC҄:9nU#˧ehWw1Ks/P___HԂS}/3-AW8JQנTI)H D?ωcר\KPBR[(!u, ]tS/JYˠ6l0" ~ B22Z25~&$ T7*/NB*e/A UgzzFH68ٲi%)҄A\ R =)lSעystk$u0Qt`G)9q(]JQC"%e(x.nV| m]َ.BhaM s |fJ?਩_͹_L߾}?Xd-=a/KZ%$3htsJOZu io:E  fiƈb_!9$דUsp<gV ݌I7UMy WM,r:J/  WcL~V>mWbR$~/?sJ {,D&Ͷ(Xה yTrNBJ%݄tb)uiRQ?b@)XU'JQ(؆'B2E5RH:tJ1ҵw%T[ultM2zhҽ#p(F![tt p@ CEf ɓ˫ $Cj2=P "ȵezdRSWK*-:>]ZXC2%JxD*IJDRDA(l_#AKQ!<"e m~0 F}[Kۆu8* pܞd"Rů!((-X4)dvN3ȣMRf|;駟o]Z[[+Yv-\r  keСrʶf/;I'īŋy0`G'GuW]uU>DgϞ<~cg%<q}TDQĂLc Ӿ0d6Jiq&pt nSwA .BmOo$KE|gţg_.{t?HfJ}u,H<ծIWR70bƀd9M.#>#ƍǝwY-̙_ΠR y7*2 3iiiX>=?οb/eZ-l5ksPJ?iQ*Pɤ%"LhuWDP#`T[${zL«T*526ǯqTLd哉=ac^ Z2nb&K PLrns^375I{[&V|1%Ē8(BFn ~(#ǎA~'=\#yxռ~3뛳0Py[wYUmG^Q "dD!"+ $2f!4>q8+A9U͜X*(&B9zuW$ (ʗRڵIH@j./MukYρRd@jHtJh( CHu =p砩{' p[65jВʐϤ#q U@kA` :ϏGo+t)V SO=ѣG}8.] P=8Yp!SN_~~̘1~L:7f~h˛k;aIru1~xb CL+/Yf ˗/g37x .C9$Б2wÇOsm1qD.VZա|||(˧!}{wO¾.OgCʡNNEX>5 t;i睾bٯ.lJaq]˖#< .xg>lj'tI@9k+{l22Lv_veݛ3f|cA@^xxp+c=b; V-˜3g7x#&MbƍlذSKV+/;+sG8Wڵky';|=bX,b|鸓=n{ߋ6Nb?'޼_bb'Iqn&ZN;}]bX,bX& L:*yM=Ϫ߷iv>ZYvj_y%bX,bX, Ȳ'`̘1|ᇼs19r_bX,bX,K +Yv<3f̠w|K.ŲX,bX,ŒX,bX,X,bX,bUbE bX,bX,VX,-֭cݺub6vLX, <# /wl?' Cjkkqck_6lwKillzj7VǡW^3}{ 43cZGγ/Wn,X?|lܸ^z1vX.B>.9gP`{￟_r{ IDAT-{S-]Xh3|nɓu3pEuٹ4b̙3sȎ&yWk7n\w. _"NtH{Up5P__ UW]żyxꩧ8SܖGZ8s=]\"e3b,s5įSOwwǺiӦQ__O6SOeڵ_1mGz>3f駟fܸq\7n֭ѣK_WW?'tUV{qgs1|( _VRJ>y6l袋0a̼yKկ~y_ТOn{nWva|?)?,466r '0p@|Io~}gym;d2vXxȔ)Sa޼yE<̊l6΂ iW]`ӧOgʕ1dnNX,;a|_o硇of̙ylI&o&OŋcF.x,3/N3o<(z뭼[׏cDze˖b* ogΜ9așgYfGҫW/\ץcZr<_2?{nܓ;OGUg])z\\_uo6wucǎ#<pG5}ڑRr]w>?O* `h{sv^x뿶͚5+.WSSg^ce=vsu׵;=ٙqgY_-{+u[n{C=/~ \qq2eJ,{챌5:(ȑd2~m9N=v4i+VX/n ɓ'3e|РA5kYx1'N{tA,Yӧ3rH;8~3|y*αvZugAP`ƍV3k7;666ɓ'3bĈN=i^|E ѣYd > swkq]wq]w1fÇ~u]c=cZ,]Ass3_NJ7̛7t:Cey:V7Vjv>lۼv-gϞ}Yv-͌3Bv۝x;[o5~ cǎ夓Nbҥ<#L6QFU_~r-q,_x?x\qt{,Xˮmܹ=r:ϳgj堃E `3Yp!G}tK*3{lV^]}^.,Yq0`sq뭷__+W$ CƎ˥^jM>v3NओNb̙L6mT3fį׬YYgŢElLo~;&M7 X&+V?fذa>wƍFACCsOf„ 6e^ټys;tRQJmc^ݻwQXbE_Git{-?p =se֬Y̞=ӧsa:,IrLړUǵkr%0`ZxnL~+ǴX{uWƛ$<裼nӑhWγ+jW=Ag}@)͒%KXhݻwU!C8.k֬F@ۑ6<̈@6"ܹs+D$G|jZ=Y1f ,X,73BF;|ī?|Wl]9vgV;u].*CrңG u4Xpa܎}m۷/_~9>(wR8Ų?`&+VUG3mii~믓0aǏUǴX{b1ɕ$ *ǣ7xe>ϞhW{legsFϟϒ%K⣏>bܸq,^8O̙:HioLχޯZuaÆqDzh"?|F /BƎXx1W]u}&{pgswhɰ}w}u`h뮻owL:aÆmw<֮]˲eÐ., w- 駟Ό3wԩSٸq#lvC#`ҥ\pr!q? 7~x╥C9d_Ų0b}].Bz/\y駹ۘ8q"\pAk,'$.] Q˞`WǛ{ٲe .siwÇ3fxGr=Ѯvl}w%'kM.z7|s9׳l2;f:Z{rĉ:f/_!1#1uO<n{Zk ~l6… 5jw}vV3x`oҭ[rԨQp z׏#F0rmΝ6Qp3{/gygشi'N{[Vo\y|{u]x-[F&A)cxL<7j*nƊtAЫW/{9x+cKXvnj95kE?+?Wڵky'cGy$\p}n']qLeO+̓>=?O~׿oF&Mƍٰaz*6l;s=ծvl}w.ei{w.#Fl25\ÿۿi3Ì+XpHޘ䎰語|gm{wyI$ޛ^^,_ĵX,bX,]?M7ĵ^iS\ΰpB N9}];M@PUU5$>~l5ZY,bX,{8=&.~?mw0!&M%lbst6&bX,ŲO<1cy9c9r.~]]%Ν|_ast%VX,bX2 yf̘A޽7%\eU-ZDKK 'N$|9l}YbX,bX,gbX,bX,W,bX,bX>ؘ@I\.KX&žu]|?MMM-u{˾cövctne_`c"ٶVtiXtvO5m?O7X,ǶvX Ř@hغe-{Qy'zo.m?O/X,ǶvX,{ [62X,eh;`ۏӅm7Kb(VXE8b ayϬld'~ :$vG%;wCnDzMG۔)m7 XzujkNkLXgVDKKYp:dذxk\X,{k Am 6g\~|7|/6o ^_LE<3ۭ'pmwpW/ֲe<Q,ٺ^s-SEV!n^yU07ĢE;+[.~,3{tMlڎѣVX[˖{nn,3{ΨQ#9s|;,U-3;j;<6`fo`ۿʱ Qq/MPlvӑ6^l÷чW~vX6n,#{ >|VC;+m;˞Zubt<uYnRJ 贇M8W^]w1&Muw :temYC=$~衇X~3aDzMGTgfK\mG%Y~=֭#R,}n7\7|7|lvTGgXv +uIVK.eر|'ۧiӎ?s?Es晧rY,ޣ}7ߊ߯[-[y~>뒲Y,{nv֦D,Şut3r'!Y,{n(裏bk1s,wY=R>q;G㨣ޝI}容3= a sA [LYBvCO$EB!@ZAQ,R`P鞞r973+3g&2*ͬ{Nt$<,=n._~>/~_ħ?- +^ӟ|2;ʹ_x%!x/sk_<.{qco?/IB<=$c/+|Ư w.m}?O8?]:/!YO"~y問s?k?._~o&Ў=kFQDǤ%{|F|zYuDz,㥗^⭫WyUz*ܸ]}oB< Oyc߭&ē;~&{彸nf_g/??!ģJe~mo}s~ >_'oM^~{_:s?o9G/~O?"˲/!w嗿'_~gOL;99#?}oB=~ ~8vǮ`iޛGOW~4_Ou~ǻ߳W Ͼ3~^F/O,5|#?Ä淾իя~c ^~*B~W|\~$G@8vc淨S@*oqO~ˏ[ǟfz |gg[9,|A%zѐwbss1Bo#u#ģ{?^7 ׎x2Hz=ӥon'SaG ׍N!vx$zD[$0&~_,rѽ_kGMC #NcX[ېT\^]; ׏K!\7B<vxR'wh<2C'dY.C@P1V4M3Zks4MC41=/B{??O.^敏§>)ӿ7Ї>] !B!xI]3᳟~KaOÇm_+B(4EQAQ5( !t@aECZ;7<'&ig5F%yаNܸ˸0ZiA_zBk8i50]u kFKnM IDAT89%b$ɒ4MNO18֠:#(kߧk<bk E6WG4;v:;c`# ֚NkhYQhzn?&cQ@ Pʠf2]`c΁`" Z'h08Ozy=Bۃ/WKKR$B!]1r R%Ȭj~W!r#`A}jA9P m4 H#Kk41C+KeR,%`!8Ɠ1ǃh4غHgܾ}7.O(=w83W٥ȢTUE]8 O4Եp@vm8PHR]fhbm%(phĨn6@GhQZϛoCZU{ oxf$}zNwK7rpʕiB!B4~>ǻ|gGV,w~O!Om^u򄍍.*F1MӠi+dt[)" xI1I I7Ϩˊe131_Wuke,qq_I㽧 \1F+MG`FFQTud2Fc6WFku`1UD]P*i.mVmNcKfFk,l3후缂务tCO"B!&@ѕ7೿sv臹=Bh%agY?zY+"K]5ԍCiS&&IaT hWɄ4JXwy??G>A覚 ={{*O5Z8&2Hc,Q J)(X Qd Q'1XTed20 SΚNƌ'i͉=Jۥc:g2B`3 6}ͥ̓dediclmB!BH$z>}<0`~3gcZ8*\)`LU:&vV]BaV=4i(x8:{ DQ[d!,QlQZcZ5=}jȌwUFUMF<ŭ.$( ʪ7Yb?ٹͿC!B!X$=o}뵥?WC'DozY1fcp}0J+ŖF.ur4#Pa0()'%mePh'bEQRhBz!MHQGƌGN1ԕCB(JRdqxj(s54c4mxcM+vN5c j^!ZTENW?/gw9B!Bt1MWR}Yjv|Xup0&*BV Zц/;6H4L&%Z7t@Cxvoߥgt8'mX +ƣ hpqQCh{'p0 f21nhjgTuEUׄP3 <@]טr2pޣiYԎopG3J/dӣa9<+ԙ@KεAB!B! {ԼO\ggFˏֳ0!LÈI{~UE0h\Ш^@]7m BkEU8牬bcpqRL*z[[jtUuմcދrZQNgvOtn997 &b/!!B!aIXV@PmWjOz32ӧj'u)5;B (қަà˺ ,>o4ޓ)up|V< -śoŒ=r3ވB!Bq {zwi3wdcg7;3mK$2'8GUՔ60"BGvL|ܸ>ao4YF#Fij'_!'!Z4k5Yjucvw Q1޷#QWU.;014 Zk8"fٻ3[EɝLae<&qrpWkyfiz!Y-&B!BGBͫAgU"rvϙo8BZ{c{pak}< xti1Ei|6P((B J.>K-m"k~c`qqA'XLjes8]Ewr2RmtuE1&pDū@QcR$i$Ӊ^IS Ť%gשUprRp4)Ѩ'!,/5m}9Gr.,x߻k̪_ d9B!B'!cGlonRs =) sK!¬3VRAM'|Y<MbKG\gm=,U9L M|@ MLm#Ib$|Tuɐ(@8t3ĢM%Slx98ܟVAmsjpεU35 (EfTUIkQ.xޱk$݆aŭ i_= 5>(/W+`zLOuΚ9ʞOfJ !B!aH)u$v@ԽA`gT㽢k<{?gG`JMCٰ#N,EN:Y7a:ÓQ9`&D!HҔ'COG^&2ݜcn٥8Ó`8(۩`;^xy/9<9`{"xQdYJ4IeIPN "I3AM{c9:vnpx0 ^)LbiGGG(`}-ӱؼ%_ګTUͳhҼCTSbTdOG/?ew!T3͚ry[9=#aB!B!Ð ;g1dX~?{V9YkV´q.ݕ1~,JvڱAvr\20IL];7 Kneksp(l1?gSX ^w^8xB!B!@lnKOOb0t^mMFOE+ 4P%xGEt;9{4$%35dJFFAEt򔍍.X'Cap&@kF8I(?[yDoCg-!(0ڴ!S0\}{aqEQCY;d oP \]CƬ:DBCߥiVmA o6dkõYv̻Z&x+Y {? !B!NH>j%j$ q~ f˙4)'* ͍u4YGc$KQ4{GQ("Mr6N[7wrL8< .P%Utӈs(D(cq.Htw~c4i𓆎ȭwa[(4Z$"F*8ۥ.'Q5 {B(ܦq>‹}L&4IVBP(Ӿ7`4\MUTUI4MMUU4UQ YQQ{6$I @QP<{i4XkH$IqaAe{ϳg$V (2٩yYGC~B Ua%B!B܇@OZF; f/V,VZ4%ImWzдUEzɱ1"at[)~jI☭5$a28:؈4]R%шnGt{]4xw(wF B0|wx!É#`bR0(CUh1`!)I[~yu(t.O'c0!dy֚$I Q4v<ϻnḪsϑNe?{wA~k5f]I&!B!B'!cvބBŐfv[65{(Hdi{qa!(Ÿ(;=,'sgqu}R9$&"8;[@EiܾCY6|~wSL8dpqg4.;Nw!!Ն8X@kv2ꦦioÐm.6Q 8]: *p!w2,*kBlo_r||rhC`(xXXZ7Kp;m#iO-?ߟGK!B!aIzaybMGVh'U97} IDATi Gc34dYF3lx܎Oӈ8&MS4û@]XI 4p̝]2lnnq%C`? 9~!B!l=AA&o*zP4PPN3 P:T@Z)QVi"c1J« aGЖ)/lS $",`jц7 ~qiΝȢU 2l뒢DImwTi|%6kξZk;uc IP5ãllI^]BŤ =$iuưsknh?urrB]$IB'swnOˌCnvyٴZx<7XC8Dp*iE,rC!RxP>FZ88 lfcV)xܳ/|cB!B!Ò=rfS3?/ZZ {>ocgPFQ5loo4ሢy~^|;;ex{ @ڵwp^ἧ, WܸWMvܥq5M]qE8!IڛBQ5i.,;{xVY5l$jجZ!B!xTw˫iR(ZnG~VbٔYEg^XS:YhpDQ;Y! iETyCt|B$Xu9f<c_6ԧȒF4UES2y0Oxר뚣CoFx1- 0}`oWMpME ~P`4J.?s<1!xlln (wmW@9$m : {fZ!R 10:mχAB!B!-zO/VhhYYo>RY:mLSFSy2xo38)Ql9RcwhZ=h~o޼I*pAkMQ4MC$IV,f3"i7ypG1Jh<_*x c,ǹ}&5J)4coo$MEq\xɄ(H[ћ i?&,zz|Y͝>ϧ>~$ B!B$z<ZR<~3QoMM$VaUC={,(%7oa.k5._x<('TUt;=IaM?(Kk,SC !B!xT=FVإ`69+c$!IyCf54qϗa%qCS<~&d>ad]nܸi13 ػ{N!c4| y1u×'k]8*vvv=Qtx"^hó,M9>:~5~@ܺI9]zא& o1U=acs ?@DQk&uY6FqB!PKfUAA-Z ?>!B!CBǬ{_A+;!߶ք~UʠW~FA JPmSb JiT0$QL'KpM EߣL{g>)˚QQq-NӰ׾t;$f<2DYᘪlń.u1x40P5uaf{{y8U K8i'i/ktwna#io_ Y˗A_jYm9F8ƻhs8Ax` ʝsFۥ{D !B!KBǨC>Loc9 19?9IcN52N%3QQb4BiCQ9o\J8y(&%GXk !̫_nPt:ʲ M\ɳ,렵iJ4, F!7o^CG5⁀6h,Qi],%lqvHx^iW̫$k^櫴YᝣsnXؠK&iH.]BCY`o t g>2~ڴ{yf'z>->?B!B!C1k?y tO9ȯ6FlY"M* 0eKTpx7*~ 9::dqh4(+<%(Eg=dޝȕi~s|mr! 3rj%TuA-mW>$Rʡ2+ #H'鳻w-9$fNwc q8>4Ung=7c0 I&~"<I͛7\_x0 LX!ht rd:!NbzEOժHG:Te) ;DwwHsͥwDB qqqp!M);a-_ y` "SjI>rMx0|+ zUq$xRp~vO?~z>}2 ^2Wm9??B 'aM* q>JuM{i[MUV!n6Y,M۬!$@~!,sʲBq>a9Em!S"ϙ/hkш<,=(c>?ǚ] _ۼĝkʤ__%sqqq?Ņ@\7bׯ}xwCBMh1Ҷ-nlR \O!瑦)JIL&״ZS̈́Xْx /_g9EQ0m#"c8쓤)Zk7?c͔: {!џ讻Rkqqqr!I' HkPX<i ƴaQJ^ SIULPTwܫ*ں ʲX3oAp5f2h%E}޿ǰcgk'?2ɗFÔxLTđO6X bAHR JSi%Pxwm(ʂ bF*AUSniۚbFQdf& ^ЋՄ˜|Ƌ_ж m %BPԆnxSE,jw>!I"Ώ]'Q0ڠXc0Z5Mܔ5+Y];+[z'񤸹BaMw l3sqqqoʅ@?x`#I)%M44q 1f9 x/Ҵ-B7=z2/ޏ1-qDxӳS.i^SXcL, ʲdkkN7<5iL^5e>;C8YA-M!QѴ%$<+"%O70c}E2RJQeU#f)Eۆ(B3y#ٔGh]#=E?B>aETzz;G{<]ߤHqqqq)}@}}GM`@ѺLzEhCg`4WW9}1*J매iJMd:kBCIцmy-WWUKnH$JY.Qp4&$IX"/¶-mȲ qqqqoʅ@1揆6ktBPJIk#(´-)_ry=X,,fK fo{ p*%i<шp-J5È"ӓf9Z4% X`!cz.MdY1-R*@P-8XCyMdAkh4,*|'C(D`r3? s~uxg\.Oo(Ͼu8m]*E;aџoqqqq!]Xr|n?[kmW@H{PHL'QRhcJT%K4e:Ȳ?x*@)oP%ipP@J 1xR(r4MV5Q$M Ð4987|sEw_Z0`i,L&,sf WW\_^UhCWle>J1g3<+Ru]E1uӀ5DQ )EF}4Z!WL/QuU1]}o>Zk꺦i5hx()6Ou۶`888ηBhAl>9:.B($vEƚt{(t=PHARJ//Z@75oP"~ mXrG>8g2!$eQ`G^kZmH"OO Ei@kԔUF Sa@x\M&̳9 @Xn*Ǵ MUӶ0%+dY2]] Ӷ-R rlzR,WMI۶tFQ7=.fwwiw8;9򂬪.Ύ,%›ӻrqqq u> 3t^h3H!00ZaI{)>ʗlm˜3[C969|⫈mdwO3 9)9y a-spT?|+GoNH,ZOz<|oON !Pm[Zjc4Rvdl6, v[H)(OQ9Q#G^1ϓ|Opt8p hmt#t%tWt7@RJZ{7 |=N7ߜs@888ηBZ{wuس>>cE y;UtS,$R S\"{,.4nW]>Y>c>Wu|Q {;;@ׯ(/J<Fc1RoO. DI$ZDa@xϓ'O"CMSSK6E)mu\]OZ(b4PV5i]۶] =-}"gYZ3Xy#~qR>књS$Ht;yo,|Bվx8888q&-8?HyC~ݧX!!IcmUϰuӐKtǼ|݅n%%eUX,`DٶDmqqqq-}@n~דw'zoKWib޿Y$BN[T,L.$l ضO?e7ݶa`mFxKVh)X,f4Mr~K~Oٻw<Y,rnv>{DQb+./ᐽF~puyW_}IsuyJSfk`og4uiH{ʁÃ=$d>an*KZ <`6|5idi۶+nf%uݰr}yY/Ykfw{h?vq@qqq&\ a,Ec\75ڴ=xb=Խ B`,ڠJסKPBHڪ&ٌ_7\g9F-hk )$KǤiJI#@5䊶!j1Ӌy|EW|`>[$)u]s>XݠJ>s?í]tmʚV!|c{w(i{l Dq.Q6(wb ii[vv;|H:m#(W/^n Q/m-EY!`5bcvu)s_5 %jc ܾO IDAT=q@cCAv忹Wwqqqou܄>)~u`9I>F[DBHׯX쎇}}MG3ˌd:%+K,PY"ڶ_]_ҶM񺄺 0`O<9`w̽OZ,01pvy6i`#U;91x8Iݻ8y wyRV{lmx@JlI]$geMS > O ltD$XKx`0*}F^" Cڶz:#Lnm^u7oǽ`X 6D9888ߖ >훥js@F!fiW®Q*)#D׏ ˯[eA }ŗ.MCmKhY.,3꺾"C#|Bӟ?<=&'b=ʪzEI7n4UbϣGQ|z)j|ڰ cڊk<)l!!0d%iOc`h!#, hwwkvvvȲ c`k{>J)Fгm3 n7]DmwA+vqqq wz719oџ۰gmz()кaO?ء(2d>-!{;CY#B>RJ,ggu@]7hmPBݶ@-锲1WEXzAHUIb>%}||'.q#>gQ gWE֚OKL |ߣj&94#'$4mj2*K)fUfIAZbm[("˲SYU G#(hTꦓ 67ެzl$))Q^w98887& 6? NBd{ZPru|>g/s~$/Kʲ" vkFJE|OcIMX.RE*MCf9m h5WW >h]5iG?KWW4mKOm4LS>HE&M0_9U^rrvI8`o{̛7'EIXkmib5ZvɴYmL3ZS<薦xJ=#jR P1HX];gmnMmNڼqqqr:_7}f ds xaA!W"fbSK\^N<?!IRk h"_T%nۖSqH4~@4xb8ꑦ1M+U2_̗e#<ŢaW_?>_|'*^|Χ~dYgϘLfEx.~ݝ-fȹ"{ Rwr}='x8=} tۢ|A3 R%eQRX(@خn*"°~()R(6@F#Y=lu7ZclLm888MI?q#Aca]tC^wC.l𨪊55/_7|_"fSRVUj@E,S8<$feAy,˛uk|y^kzQ%l6Qsrvοw=oߜ!jkc_\_NOi::BJրӈ$Y.紺&Ca& u]bzRy"[[!I_$Kv'bƗ/ǀwZnaR h5mۀ6c?888KB?nn'<֛ yy;U%<<' #9M6%o޼巿 cw9==/ēPW5 }Ҵ-n VEI9J)8 jO=(K^z-I!i/%}zc& eYG0DQ8$IzQ#$I~#>^W_/'b6˨4T P* zL&sP1&[Y.3'Og#-E'}#e63 Sf)uB@UuJ {}P p~~Y7xeg5hۻAkѬ~ &C;888߆ >wBEC)bvօAIV_!?sk9GoI  RzcXe6Q /+1FEYb!}ka,[)Vk |>C($"0n qxgz)Z2Ĥ]4%MQ+#BX UU5Ni,к%MST,U]F|u)>yO Wwu$[U`W{slN D;888ߜ >@ !*;fڍ>nITwdl*UxH4gWDkt:|-(2/i0}ʪ[h V (15MKQ)ƶ4mj&ח'?MY.3KDMYh#!x!ǯ|D˓qu~Ƨ'|0% |W^P4͜ (1iXdT Qs|r5v[L9:zBRTE^H !Yt:k\Ws[~dJ..[Եe4ڢ, cݣmf%yQ)6,@ "+(hu$ϻGn{Amvݽ' qqqq! S vI!nC&d`A*Ӷh)O)-M |1QH- 4mK@SkMU5k-at⭠JN߰䔪,YdQ1n4B*,#|*9y( c,E3gX =0$|0j,C[ה;[| N/z§MmQ9VxI vt9f>:76̻ qqqOB?軥pw;jf1CWߏ88< *r6pxxHL'S(dggteI?6YQprr5(cg<bF n+3SCʦZOuGVWXcQe^rogϏmi eڑ$IA/Vל_\愁b4HQAė/09A ͛7|;ppG}@KhX6ݱ>*QAz6ܫ888οL.aΚ )$XH!n'Au=?Nc @ j/c0vj$}0d<CgG[Cji|%[ڶŘ]ʪ* ~1MSq}}Eg,K2#|1m%*Ċ>q rreY64JN q$[nU5^~f0x 9888߆ >_c.HmՔlnZ!D70bi`D/Q7 )Zs=ѣC,$iچ vw `QH6ST%ы#2*KE(/=tS֠۴e6y[DXWiyٌl |>C)`b9= @ _nTw;a>|tT]Ѵpqqqo@zc=$Uz\ޭOr dm[(f:xM]rrrx0춂f:q)''~*IS+@=ISԫ`8?Ikl:' 8ij"gwo-V>4fg=LhdB4dyQ01MϠxj5RUǤ+˒(I[n q# lSgK#&%mhw0xt{` _MJ:>@̓ ...ys|JQVADE`,DI˗_o*(a/kY),i5AyqyOTU9a3Vs~|6m^Sk-‚5P`fqqqqq)}@>·~!B-ii{sg1p6 Hz)50ZOt[, (y74 !rWwS"n4i V5RzDޘ^bqX.f]Q@H)Ɋ]k?G^|u<uYS՚j(ږidYUP5^Ϙ $ሇppo>{T kvwQJγgٌl_&*DOI|sm[꺦]lam-B*w^]͂ ok9I8888ߔ > [XRa RvU }{lmnߖ )dziJTE [["j!$dYNu Ð(B]DQ^1jKa(B!% |ƣy15RخO{ I}C(H!iȧb2 W' ޜ]e۽>VJ.f %ZRV5eUu{S,OQLKvwnn.sȗE[kcNmN:8ZI qqq[q!>%YYb@Jp|7[.X Kw7I! TMAH#[.JR55q"( R%T@^oYKӴDQG=O^"ږmR0Xf{ C..ʲ;{yx֨G B˘Y,KnA0_\]L )_yQl4UݢMRJ=% *dqqx8ѣ'K<$HmYVIm&(( a@G C<.}{ 4LT:ik}B888M,{UܙY?ylΑ7?cBpxGX( lӐg9a DIDYWՆ0 ic,UP%;c$zXkP( fJ) AThp8d6{~#[e=fˊ\\M %O3B_WO{~mtF_/_4-gOfsʪ"=/A@Ӵ,1(& f'2ZKףmۛ[uC&hcVկRmo5i?h}4pGqqqq)}@~HygcZwu~R !nWK)IAkENKG( 4Ey]izrQ%IO'2>IӔx0 IʜG{|` _-Es`+ˢBkAuɓ{l0(H)PJ1/(*%q2 %4>AˊV[}oX-YF }꺦i꺾 Z,(Tl|^<)׺Gi3Z?:7EҫPN'888|C.֓` c @glPH~mJ)8M ̲Q-e^: cONA$ "&b$iְϘM _WdYlmmQ5eUӟS|3Zm?)hM'jɋ7\rNfTuMk`YUA,<#$oGo9>hd:LŲ~=.ι\>ES7|>`3bbۚGE4mvS=R4gpY3NC$f kǿCua_J@튟-G6 Z/&|TzJ>MUc*K(i*$XUB|Xe:@]]MHb?WTUր0 qL[Q1 WW?'~Oah֐U UQ{>UyvMY\f?<O?seEauۙ5裇5[!~J#^xrg <#ES%WSʪVc-ARR7 Y?y̰ruqyXmPҭB? IDAT* -ͱԫ p|W 888|s.'Ʊw^Hz[)n}nDHISL88<3nFSVhHǼykXϺfM댵xJ~m!W/|Eh.BF;r|z %%I# =zit2ZA]!iۖlVS B(DQְG)5$Q@VV({x=d)_)O/Itg5@H4P6YVf=\ykoGf22UXd*zF$I zS I3Fz]{oE#0CJ0?fJ5+!/8,X&Ly-9Ѿe4_{LQZ45_~GGGz8Jq"#A+L]5_ZGRu $ZG }..9::d2BCI3޹%$()>ƘnTp900h!|k\ @ ߔ =c\ZW\9_:1csF4ZzϥŠ8X[d>/JR%8' 秧yt B(E& yY1Ե!RQk ^W_?f|p8b4S &ł~heu˿_| ']ɇIFkF{, ,Yf GǔUE 6{٠f_{"(7eN99=!KD1͙ "%Y\ee#%3q8c UYaZbۅ MC~YoqiyG*+ĥM W\a,@ ߂ Xv,, AmL[#/۱/%v_Ify~++!>D]RT%ICק4z=<( ~RgggdYO". bAGU7o>?Oj1'_L8:|LQZ3VƫL1:_]WH(&i3͉B`gRj傺82B*EQ k:in(sƃ׮QQ(ˊ]P%UU19<<`:prrtA^Hi Jzup0$12&4iwB(k1xS9?t-qO?Ƅf@ @ |; Yvu7~XpN༮]!M{+)pʏa !*:D%$Iy'@'ԕU]apXR+U@{ec ͐"b+A/U 9*2NzΏg>/.{xD'SsckQ<6\c)N((X5J )eMQTTuu[KV*B;VsC8K9YڄHq1T1^ʭSfL/]̘%U#ĤYb/<^Qյw E Hc*+4H׆= 8D :검d#a@ @ M "3d٩ Cp9宼w% FT8BQlln}vmGwqRubťb5gggqDș/Mr:Ed:a2ƍV}nݹ{5o_ɻ1GG|Wz vﱶHܾ~(/Q& Qu ! ZsO%IӔ$I5Zk>7o.$BEONN|{ȋ/"/.X.x8;;))ɌmVOQґ9"1ƠJʲlڼЭKgHs"ل2[0M1^G?|a{{A%(UZKE͈A6b2q dYʵmgZ}fR g/G@ >?-@h*"P-RȦ |Y$IFQēO(ʒ(.m| CzEQ0N1yI $I{Waee9O3'pxx:5=]fE^w_%G8[qMj') gMM`IBߧ$ɕs4MIӴIڵкZ)hDsW?/R9ZijA/藩{Xk)ZѰ`:霭FU\4턠VKiqK).(@ o`'(qte$I{9+ҏ4TXЊ D[K=Og8cIb5|A/H9?4a8X̰F38k0g$qLD,ӳ 66/~kK7՗;d2S 7o/L|tA^2)+U!3؋xTb1 8DBIU2b8cff``Y7>2+>cҰBfEA0ڂIh448>Zʢ`}u!o[oy7SQ U5JEhcq9 ydl YS@ @ | Yc^u&½C&+@ѽB"DF)u8hEt:auuEQb%>](˂ln#GQ8gg~} 9uPnfmuk?"wnޢZ>zlrƤ(#OYThk!E8VA}ek$Rk}{s(k&,(kE^k}l']L( $$)R[$"bkk׾[kuR 4>(InNE^j3~q/~ty1M5=@@ @ 6"U\ ~:z~ A5#O@ ElmnR%{1 !AFQfmc"Ycݥelnlp~~NY澺y>YQ$)!EU5=섯 FgGҔ13N>:Kbj+qZp8\OA:="sͦk!I]W<~{R3t]q|rD$q:eSfˏoqq1:A5U]!%z[lon2#qKBAk݉7G)ՄD{I}O @ ߔ =CZa&V~(?%ZXb0l[osvtG^d;;7H>oH? UUɜEisMCd6+yg Zstt6yUbpe+/LO(f% {g %9͙U5*fQhѭ 9|Hb"p5~h1[gVFݨU9!yx0$~~lrRWI2ۈ7Ixǐ8g ;wnͼGHѦgmtA؂_}:@hg>@ oJ!O|~߄ @*LE1Z{@W/S<1U]);; i2^SזE^r||eY:^ZlBg(0jgUU /q^ RH⤤֦2֠(_%Z\ >39FU^zu~??F y5_mn-kc^un޼>⍱DQBخF?k$%R1i wu>{ܿ'|*JU%uRҋ$9[ׯ1*?{Fqbis)jtVP%I,If;(N# !G$Iz!d4%UlBBb4qK^KFg9(CE q\^'!Q*9_Cn̷ehmB5"a] .@ @ |K Yg`ߖ+@B^w;QӾjQRqܼ"~kE H6X(Oxkzᐪ՘0L뚵1( H/ݾk/_>┼2 S!TE/q}Bkf &D g,%AJm46ƀTXѸ|^ԕIQԬ_{<ϙNH) `+@)sP5@QL$c ɻ eAH)2m"z7]c\1Nʽ@  =C\~Z58徴Br^L>k- 3,9׮9Bƪf3.Ѻu$NRJyh2޺.A$` [+k>c/Y/#VVlmn2>cjλtL5VX]_rr|Aaj5ݸ`.)Y ͟}0$ ł| c4JYڟoIBk4Rzs>>>dD6ix)^S)%Ƙkexa]i @ @D?O;iQucKѦj&qvz!I"EUXR185B(cRJs)UtƢӌ,MLp/9[J1JTD[ϓ7(9{{yql0d0:1g0LEYP[5"LㅒVrL#&;hwo[[[:볱RA/a>רH h8@JtUcvM{+޴u69Fs~eWBE| @ Azr6wtNჍ81!Qtrr=!HܻOX_'I {~i:PVXA~|ת'|B$Iq҄(B{tB$%~q|z􈨗0F 9Gֲ $|WVV<|v!||%%,&ST쬮2Y̹X̨jMC-ZK4mfq烮ixgLDSQ Jkkau_qrrt6D$I/.I~?#/,rX@L.^ymfyNÝ7brK׶}=z{/>Z)Y/%yw1JF` ,JQ5 ^`O"fg!Hu[4#_R $L,Zgs}CU?%RHuL.&rzo?SNNO7{c1V+umF1`2ĥ#;Hlo,39@׵OΰA @  @ $uOFwgʈHtMKwI;%pc,a]4szrBU^Zsי|ǻDQDQX3UUeu]s||LUy۷Y[[c8D1跿-'~O> W[!d4P8qLDYiܽ}[똢D;x{&Uaѐ-g9L))ig4Z& XM^uV~-nR k_ ۛܺ 7_ªWyOEHtml;rMs+Nq.+р;~',:@ Az3|Zڇm%rR9Rl:_|y#$2H-YZksTnƦ$ƹ6\EzO$ ǀ}&b)EP8a,յ.{GJEAw|J0{} $#?Z5o&i_Xװ, buna22^uhbR8F}&du4έPq—_}Atש"YYK1!Zk#'h@@ @ 6,5dsu~<9RDQԄ _ ю.jp8FNNNZkkrZi{="/?'3^su=zH]׬)o&)8/JOO9ᰀq!%++clw$I9_,dS/lﰳF)(&%UYqq1`ȭ[7B[CQTD"b)9gg ʪ*)eY55+ܺ}}u8kb8q}:%i&vgYi۾EKwOk@F[o@ @ re94,9`: ܑ$)Ic),#s5B֗MSq518Xq_Kw}9o| >??'\\˯5ggHHkq&̸ 5$/k2x舕ѐAG'h 7WY'QNgSjGܺ} )9ٌ(BX__3-899(_L9VW0!"0Ns~qT[ M/_dYZ/e,]Cu7 &9ָz\t h϶Q3ֺ@ @ grsExрʀy.&dqrzl6c1/ [;?{{{lns; C..&/2R$dđD;M)~[׮an>˕9"pZ vn"DQR7s*vwyysMz̧=|HU|gM˖?4MʨM.ϓ'\~SW]U8|DIz=΋?OH<(f2ﱳCf`{{x,KHdB&ܹ}C~JG }.s^KNgSk͍5oVm1-NtNe(A+@EQmE#8BZn9?B@ 7$@ϐ6 m2֐(X+,Y!ʄè*Z EQqtxBQ$b:b2?g1/rV_?~SݿVK z=JST5a$1PCQ8~ o?g&5"g̋2\# L@ @ |s}w8(V4K|G,38aux$/yaH݊@QG1eYQU^@,0UnSKŠ֒eY"CH|#p15kՒ !l6#M,뾷,jZc!߷sdYit&pxxgglO%ဃS$KY.Jk]?M#uFcYJIXcJuU5b @ ߔ =c})%Rqqvx׋~esXg0V End8c)M65RB&;j5PBvcrی_2)T@ı`a6)LS~_1Ec*Vb!Tds|{ ښNi_u]wbOUUMS'F % AZ5z.[ܶ0@ oH1Y?J)NԦ P5ڱ))q!'v\WN8H$k[()y7vX"zٕ}c0gɲaa |Hʢ$/䋂C~m>kkz=N(kMPokBP$2,!)%A k$y^ᬠYKדs%WxwڔEMMA ԕ1Zk9EN ~)sJ) I-qVMZ.z@d֕ѯ☹ r(@ ߜ =CRW\WƀDꂚ)!Uu2'Y6.Y)GYWtY[[c6QUU|zY#PdiOǼ󟳷GY_(q(1PV%y4/:$qe}𛸬Ϣnջ7x\S7mವ$IPJ!gƗ_~:HQU N9<:w~pBel3wt* lc ֘xۗs!vv)nݾsi8D@ @ "3 AneuS!HR$y饗HA!$ , DB )˰(dـ8I㈝=Bk/\g?뾻1UUB]?6i)x#8;#M2$]+%GE_8&:_Q: UPUPn/f$IݻG'ԺMY;q b"GZs/m$jC˴Ӳ ,K&T{~@ @ | YY,Jȥ`B]s(%#!hL]mk1)}([N'Es,!D"%O+s$I GXM1-j}ҜJEEIUi4/"P׆ɼ'м 6@ҮwK]^ū8?⃧/]:(I((dC6'''Ԧf-]ZrtU[wӮ@/(+P @ A>/[f6n'hC`X֘+.VPJaMM'9<DRP7e@*|6B \juwv@ @ | YvcLUclEYeuEdX.G낪ɋ48k)c8FڵnߣdYx4de8`me!֤io~UUeW1V3NQJEII(Jhe5-c:/2VkW\@nq6|y{]b^_!@ @ "3Dk 4Og,?7($D4Y# j*E)ӆ DHE,9o}8, Vcy>z e2MYV*TuEGЦb2, 4?8A}Ύ0@(ETud6+ ]^Y d^Teݴ Tq5- baWrw$]ws:=fz:e8r]ݻy1^ |Qɧ_1X٤7/f h0Q n~1n9#Alr|ϴEhEثb@ @ "3dykɏ,n4\/]!R^uB VEhmHӌmE loo1N9:FłU5LgS9w82_K^yʊؚ.йlZ>׻k3kGCeQkYZ s!(@ ߂ =CŐvxMХsD)1^H'}fl~tY1U5Q`e>pp #S*b6r 58N&su6W78;8wf)U-TMN(AYpXggCJ*ppț19 4$I"zIe^rwCf E9֜1 Velnae:3 R۷_hs7oG)8agְ$b]7HW+@" X皬!D@ @ |s 16=缛aq.ers$y:ZTx'S!ƙ Eg Ŝ^Ç(5J)Vc5EQPW4auu8?gmeg}|4ں˻`NٸsqjlF/$)9S~1NMCPU5RJ$ijUYz,V 9.;f9{9xFzJk5[e1(!H͈]ȦMLSF9Jm0η&Y5"k>I,Y 98<&/J:.kJM8g4-жFZH~[h @ 7'@,pNx/qeDJP)QHҴJ T]`4s( 8 V;?b4G%e(sL',шȱF|LΉ(rE<. m 1Wĭ6nd뚪:đsӵ1DJqd:X|#$4@/fXk><28guh$pHV+F`+ eE/ z qEh6#ٮ5m_B0nIo@ @ m"3uQ#ݝY~[teY"F| ljǭE ?j\=DtRF2;!auwA)ţGtŸq8?|D|̦3A]lƁ ^ؒiBYXcMMSf߉mP6`;gE4:ZB9@mkY:H8֨8@b>pY(4%$yリԆyQ'Tk%R(++<~Ɠ'd+'lܤ(<1MPs^j.|W:'VH{m@ D}94>!JE=RW=>8R$2OeNk Ʉ?-_]kfspdrA/0Wca4}p$RhXg19‘D~/#Mh#ET(N >O@Fk֚8WgIE9ь!WFD"J'+q(_eoA$ׯm)c$όQئk|[[xjS-{H\^q@fb-Zk};\ŹٜMd-9q$YܭH24p?jM_b)nKnْͦ%Y"٭&XyUw:ZyX{Sb/-887ITضWUlnm1by,; T prbkZ9ŽA9U|x_ޣԶFcԵo+@NRvs*+İ(mӪe+$88u`H(69ǟ\zÏi6bQO&Az֭ z4m`mWuDw-   YNyB)w(~ge(/jA4ZJOgXE6+BY=(Q`9&ݺu.^KA:`/rI(ʂx}sgorg@%( TӶՂֽyExLl"s!MAAAς@H0+TЊU V E4H ضBH)Ńv-looq-.]DUYtkcsvV+vf looY{8 2^[p2`DD3HS>yl[!I%;Ċ2:NMjh*HlSEE1J} V2Hơ~{'4XW̧SΝ9>q]K h+4~LJUxx<:iAAAAx1^FUxo񾞯ׄAF(i:y 2, ^GƄ*k7kZ؊}*NRfj3n*Q;Gb4[r7kϱݻy7z gc}шgN3^S82 J;iͯϵ#5ֆ:(X%   @ŢXs4~(9 Y@=uzw(֑eYO**_x)._ӧ9\p=vRYJ$ ^QPid^V f^`^u B/ߴm`TQT_<fmn*E&dY|@k kUYZ 51hczJt>ec}xٜW1 ?`6q.ٹG\x kCbA2m^b ʊ0,}DQ*:ݩV5pD۷ns~{;\p'>xqp3 9<0qΓ$iwt ko#ʕG_z'lZ ޢӴ)xר" !nۜ[,PT>,I mCe HMUZ9GUUhIӴ٦iۤxCE^Olrʫڊ(9؟3V!9Nc2ΝNUAU9ј )$ac}|F/swQsu تEAAA> "#G5ꓸZ mV]7i&Zvޝf3V%J9667NT)@1m0iV֎z,E?Zo\2Ƅ/ҹby:V:!MSZKFk͂Pj%–6IXxG|g&9ɜlU]ٔQ6;yRc4eY0Xsgσܻ{ m[u9"u隂d j~\AAAG!"1ҭ ^+ĿB9r'jky\nTTUE$<3lnn};;]zs}8AAAAxD:NlBņnR TDUHz}(*ZDkMUU%puݻxMF^B)CQxd8̸yvTmN] jO Ӻ8V@-NC%yj{l>MOeD$I:Q+Xk(L5h<·ʥ–ew,K c(|*ʒ[wﲾ\-E-(Pـg@J2*,wd1_b4^#/vQM [WHqm]EP    <&"#1QŊe(FЭ Vryv'/pppN4&>d1/( h-I1Q!SdzqkmR6*'b*ZmquVXkf]:UTZi4!MI6rCYj4,yP!~>c e_ ^,(;{.^T&`we+\ȹ OVw    <&,{tŚԭ|I >. <Sĺ"PU ;+pI6(47nS>u cT}lu\SO= B%o ҈B@o5hI9Ҿ6, @UU5?ēe$M:dM< ҄񈍍5=z^1&բW]T Nيy񻡨ƎlƘO* rR$   |D:F+֝^KWTAL MƇ+UwcY12u8lYYP91ww3B7\rlh[kLSyulT0X25ZCk8ѱ&z8QZHC pcmNQV=“i (Ţ,9h`m$ T)k# J8ֆ41@ xǢJq8eI!'N bQ-Eߤ~\lqQVTE1LAAA>c岪k51 Xb(αs],nӨY1p֚{;;uM]q]O)maGkN\{͊ $IBY)_e٢R\$1X,LSu1Cԭ\)`l4H"Q6=HvAx1x(ٌ`Pk'T N:Cev8^2R֚4Mn \l[AAAADc$ 9GںmZ`ʴbkt#CSm(]%e.LJk666fj8RL&ʲ,K1=cy,Yv B-ڰ7RbWwr={;;cVZKPځ^LTeNuc4`e8k6U=Q8Z<,98GYy>IZ 95rX+ʵߡ#   BDcd9i~c5X^q~` b8t:8P f`n< lU;yUUCǖe= Q 7yXiv<.MSd1,+)1&!["/NfX[ x٪ /+\emH$)4hMbfEirCZq Ry/=:/rj÷"N=h׬+MU   th=tbURhLguZ"Q RJZY_[,KYgh1Z3_TEIR2%xj تBfCKI8 _ci_U"Ta% `4ġ,m46fo?x9Jk66RVA$lo uKVIx8k!{V5݃q{yOYq]P tM'p޺bO b_|-`Mx   YO_:hBmsnQ-[ Zb|> ^8!EnA8E}hi>=~"ZۼQXꨯ-%FUմ1eUWR4EUQPiRV%ifеñMW(ZityU2RC6= V{ u7-SHy,F Ics6jI e7[Gi8еe#s|s=:50Xw$! *cwwG1JiʲPuI k僇2z6:|g3Kmn1Lul8 TEUW_l8h]nð6u#sAAAa>G }UBP@mJUU981mp8$I lUx7,Az4-*VՕ3U9M*$}- bڑ9w—w$IyAx@Cʗ x\Ѫ2e%>{Ҩ~2xh&TL6QR0s2cJ’PW%Z) OY ٫AAAOCDc% (x)@Z͈U?@$  4PyGfҦ(I6PCL~Rc!eUR \]+TdZעM{_S{ f&KyidZhIV$)J<$1c$E>@JѠ Xg)*Jށ&8'7. UHOja,\0՝EU@~~eYFE0do=@ *    t 6qvʗjy5=cB y)֚ ySA$ ŒsG+IeY +BNSV=ϣ(v8B)(ˊúM]] SU-EUbts(2xʢ X߳(J)Z0^s&s;5K)S|V`=+2W+L4cUBq}w* ʢ]sgmrA.MEL&\0_oPYM*WWjR|f\bUmYcwNA płdV _]8[t0L /-+5 Q M:I1yg\~"xo]ͳ[a&|šM(cXԬw+&   ""Dk{#BTNyh*isXV)ҍH XkY,Hk_ N%sdYF$ظ #䗓Ϣ_,Brͻs$:Mth0,$iCwheȌ&Ӛ %Xc2/8L1kcEᐲϞX3+5XoF{lxNqq[ck{"Y    <"}y{_zD > 5c$ѝuR_ F#PhoVpԭz2eww]͕m\𨐸eu$!Iʲ$MFtj` I ?ul{jw+(<s8U8GCx6fF|5 &VnQ   VU-V]em$_ТҨ<ڪW-ѺEګl[Mԭ㧎K7*Z="GSϜ8>́RTcHWE}JGUuZ)zH^eR0-PjJ/s;ߣ 0hmsZh _CH0AAAQt,WE@m:JLˢCcLF9UUv*\T#J)F!bq$,x uU0Z^1'߾}lֈ@G֋V9HӴ1eVJYcm.y6X[q L&6M;WwMc^Kme?ܗ7b ΋$   <>"#GڼVTn,Wn=nzˢNeCꦍs^X_5nE8 ]I4If{zb1ڵkL&޵Wa1Q,*9Zxgsʲ),rQE 73Ǝ Mj)qU2߯:]i+AAAOEDcȏX @[D~JT+Z 1֖3mߤ4E`81N_UmlZk wDSJܹ|>U,[[as7c$B\}Uf])F(]ph}?~eN|k]ly0䘣"jOAAANeJ^PQAhMPc UoXu^T囘|I[E> &}BU-ʄs:^}Z,ܣ+>uwΣuVS׌: 6!jMk`U`۫V?CzՃQ?v q_+}?*m*s4e   t(ߦ} G–[}AC m?5bUPן'iuB)߈=TSMs3`3͚vrO+h)B%Lӏp6DUTss]m_(5BQhQ.k1L%V܊mkhw_w˭la5n߶v3Ƈ   *DQ*Q,   @#mC-GEPж\6z^04u+K6V=jJ{1AAAϊ@U@t$Ftֳm;>Vݴeiʩ|/|~(O8[|o 7nn'$i M \~N E{x |ooyQ\XW>o>> '/SY/eY~ ǭz5f\7v]‹$   g,|G|FwE^=Z)x׸{.kV< łbcΜ9MxME VlwKc4e| \Lـs1(Q:bٌ[nqxϽ{xy)7nO4dizHpO$Zqwژ    ,LˣZg\9{״y:}_O>z>yU_Iŝ;wX_[skvh1կcccxLQlmmz}ŹEk:GuyqӼVm_^G=UczxAAAADc6G @n @s=G԰|sZ_], عsg1.{SO$I;ҥK|[ߪ[Һv{6-9HQNAAASQ!pEιٷo8u:aa{wDm 'N=6^ҝk+\ O0Ɛ/T(K_bh*kyy+_ᕗ^ŏɫ2] E<_p}|r2ޢh3O='WEQloCJ3p^_oZ$ڵkfʹR C^y%9M^~E^~~7nΟ7~_`HYuzjIJ<Ow]j}~l=6 GQ8 U1YQϝ#IMZn1+dK/OƹsX,I֚M,cssh>_O ,cwܽwwO묍Ǎp8d41/NeU 3Z.]w]>._3Vx<^`ggll:%sn޼˗_e1f3{{ΝME'ORj/AAAᇉTg(!wڵV!,+ˤ*}f3f).F򕷸ݣ,K =3 \pk-kkcos99<Es8{OE&C$ͽ𴵵/մ%IKXF#Μ=ۛ*?['|9qDZ拂D懑h&   ]Dȋ"=5DBw{*Kles6o&Ѩ4RL&f-5:>}o|04 y7 _g͇]^ZlVG̯q/AAAAxf7~r[sUy-? g-kׯ/r^}KۿMsşI| w :F)$Vq.'ӧOA)M{d2֭[EΝ;wxo8q}^;wG]߻{F[jȑR՘    < UQvhx8uShqb]uU#)"Ϲ{>[[W/~Gy4{c8pInݾ5M{??駞ɓx̞RIJ$Te,ɔ?<ܳ\zbUU1 Q(av+eYWUEQkef3*5PV*w_^BPV5^)Ъ0    <"}Ce{{$IԩS\r<_WBg5oV %#QˬjB    <. gX`6[[꫘$guf)_ nݼEeJ]"!&B">'OM+eŏ>ƍ\yQ R677GdYJU۷ﳾ빇AYkΝ;G'i ˘N&[L&fLo~y eYbŋhɲјژ" BͳAAA|!?VGt=3خ_7;߯T(/ܳr^ҫ#9{LS}IҔ|Νws6Z1R,VNJ9ƿ|AAAOݿ9:/yo[]y=G3q D 1]g_Q'VQ3 ߭ 佯OPg֩ϒ m[R~g~s_w\!9$ac}ӧN/~ܾ}PpB ,qQZ|klR*z0рs5K趚~):~GQdU 6 &Ѵ 9m6\!Wfwݿ}AAAO%˲U:]Q+ tm1П.$GFL+W?w4-xM򕯐&qٌ{;;\rWp5aU.qy~W]D䏮b4U;އU4B++ Vu-TᄎxӲю@   ?*?~\4EU~ld,C)Vs9ٜn}ժof+tw#4mTmPO u}t;F4jn:wk٩oyix!CUU (Q[cρ   _2"}, :GzaHCӤ4MI\dV(߯އꕚbb 6Fϵ9mZJO"c;]BӔ-BYO'o5WMG9N5{Vxt+:L)0A᪪[Hmxjc{    <"#?TOCk͹sx7c>c֡Fkx׵wx?`[W#PVS[,z'޵wC:"; c|:u,7 8qknpqv-lIAAA~tD#~E=JΫsHL'D8k9u$Ir޽V`cikV*nꆧҜә5GܣiZ-#bLJ糧-CP׎ݴ7R ŝmHAAALt0bVsR XK'Iy۟9Q\2(1kL-MUG:~!AAA$D㶊5_]ὧ*޽UY6^5Qmj48"ѰMꊠ -%_,EHCĭ%wUX:-_2.R6W][,8V IxϫPAAA/>Gj̯:jݶkn޼<p޵&J5Q4Mp(ĉhcÝ;w/浞H'Npy8Lz ES%Xzc92GįF~AAAOCDcQ)O?{EC!쨷=Gy W?y׹~Bp0''8w<;*υ ѷF)xOCké'>wfN[{'_bmm clk׸q:/BQ&tɤ#"[-ll}>?w F[şI|I.}1HӔm$b1~ ^a28s ???G(pN]HZ{ēX<]&   ?,D:FVW:Q}ߝ:QKzuի|‹ܼqdr$2=s>1Οgc}uEvvv?ձ]|sg'MRN>믿$i҄7|{koP%pLY*|4VϷ ?BMAAApԁVr+Fn||ST泪},tPVy{D/BEc˪i+ /(b*]ƿ7W~Wu9O[ KyAQX .| xpޒ/>y^;ck>UU\Hr>ݝ_{$W]}ӗg2IBSH4 j+ UFvKD`AZauK)uv `Enb$fX@dn}G9}m{g}n}3O^OpXNzE=AU Piiz{FGMc_\Kه2o P4MAGnULunX/Ś>ŸeN[=ᰚΞ믿H$^T(ŋ+<0 ==~VR8'綾TQYE Ux<:pv)߯;]K,QQQ{um:vg0g&Ju"шz{x]wuZh*~YOt W֐/ǻUtRUVWg4 t}*--+P(_(*R]L)= Tx W^yU-֌3d*tuuiݚ6-_oA?۲EgϞQ.YT2LW_/t+jDeZڴZ|koGƇNߩ BlٷeÓ}Cö^˵k.>{&?Y teiڵ 3}޼yZf5k,|>߿_PhqlhYQ K4M+P__Lcpx76sഠ6|l5mjjj){/g'ϯ~[%źo,#4u~:}.]N_?H %@g@ U(1io3cN$ozvnfăD":qxx`xb={V'OL8Cg I$ ZZZ b:;;֭* LӚkדO>![V"YGzy~Z?IȀOӝwީ;SgzaS~=n7Im=aEt畆7yL썒cϐHP(&8qB t-hΜ9ì-))ь3T\\P4t%G53ݭ'O0beTaŏFc=CiժUL[ ldৣC].*{i0߯CGV_i5g9ݿz9fs2ZYf՗D }L›d?4500p8wyG;vP$M7ݤJy^y<B!( jڵv.O#ϧ+_f[XNfMҢ:r>37jڴi%<+>D0eD 46ŞWGWUV^@m=B)b"hxM4 SPVcu:tHk׮W\ӧGwVss6lؠ+V8!u`@SIi^ uww'|Ŗɓ'3رc'6AEEE={zyE44kf<0vK_~YWH$cD B!vWc$J9crWip8Ueee'p@ X3x>OE~{Oկب+RVRYYѨN>m۶]ԧ4|~AYfCCڷoZDb N_YY_*뚣Ѩ}]=SzQXB^7glJJJTZZbTӫUQQwTӂA|>M UQQ!ǣw}7:Pd2}M C1?S5ucp(?sTQYp8z:}Jϟf][ee*++UkɒwBLWut͚5Kuuujjj"mmmz衇tmiƍ*))?^ݻWOG>]qVQQjjjTYQ۷O---*hܹ Zz{%VEQ8qB7o?yuvv&46mjkk}L B*//WEE٣ϫHsQEE}]V-ѣG'È&T%=!uK5 Wn=|}mR_^FbغLf񒒇Ez8g"zZd6mQoː)׫9QEY|E~y}^uvuS  Ŀiy&~O;uV~OS(ҩS?NWuutA|>N%%%PGy{ B CFXxSUU:PGG|Qoozzzd~Ν+ӌUy<E"0 ٳU 5w\UWWYǏW__"MV4lh;$= @ pNIb^c8ߛ}mi{oy@c,UH*L@x<Ay}^4F-0ԤV_K_#0UI3gă bEק'O(دjѡ"yl]a(_h"HbbƆDB!&\~BìuMMMM2MSMMMarobx֦X_PHi{ 9g붮it<_b۩ dhz^]y橮NU͟?_jniֻǏk` H$eݖiël< sLc0Iqh4~'>5%P84jG fhqaCXT(s0tS5ه5VI04 Bw8̜93QNKmsmKR$f$;&A\.tKnJgp:oenɪwRAɮyT@o]0R_vy,+pYL\̡&V nΚ!}50xL7rJ7z*ݣalNm.f_b=luXIGt(6nܘ|@uHC w = 3z*Ӏꫯ]Bڎ>[Wk /eq/oaTCchXՐ){8|l$ O ,cֺ/@0 @RI"Ű5noYu. ۓTٲeUXLS0C` /34-VF.dFR&d7ިVw}\>30m },|,ن#fPRaP/i;n\ `R##w}jkk|e/?M6e&(oQ>9j5 ʺkV& ɛo7ڻw\l[$Iׯ׆  gEQ}Xtwkʕ>? /n\RwufϞzOJJJ3ן={V[oM8O?@ gzGu$]{:~N:h4}~Hk.9s&!uss~hѢEzc}{Ӷm۴rJ}ԑ#G}v|ͪyꩧ emٲEҥ^͛UM\szǵyfiŊ*++Scc$iƌoc ȑ#WdN7n31׾nM>O/بiӦ4aNڷoe˖-Wט h_z뮻v<3Nu^.xmym~۫T.))b[ ۫!t7me,:gm]6۳F%@0L@S!@0&ޞn*)>O@P%*)-yD4B=licF׫^uv0!t c}hTϷ)f̾L'9_2]wu7. 5&yXL!Pt[dޞq00, Ikwj…+uzK?t%kU:|$i_[z"P8J- &|3g|>Ν;'0pBIӥn$r8u#| 4-Ɇ9 ȑ#ZrT[;#a{m]{o3|ez=`KBOի5sfQC^q:0UW4*|ͫY 7\'IQkKK>mm1fLqEP Lz7E͖azc$0ҪU~=v4PqqIN8s:t86WiIV^o^?яuUW׵db-Z0'䪤L q $I$]FgѣiÆO;w]n|>0:Uhy:c޾϶ޫXeZKE8ޗH=:m$3@ NRm1lbAQtZr#v(fs!M>üF2lkB)Цb}^̂X>9s.L=U8rm=R>O@P%  ȖgkA ss'xWsV&'xEIa &̹`g Y¬|Z~oii駳%0쨮~@Rb3EmQ U%,YUaTA@~vL$cz'G~`"Br }L"XܞٓױXA~%V:t20Q566{IJ{9{Y>n9U/TR%H=m}_CC3g$W ՙ3g~аSRWYo;%̹=Y3ų-Zl0Q466޷hѢ 칀}\/ks:UchnsG9x%\ 3fPzzzv<gņM/AN=%xr*JZqc d]>S$iڽ;oӦMkg͚uIQQrI=w܁G}ta=0d7|&OsMHH (@n y}v Ib&rf{} {RCI$f{:S6F9׏6 5.O7&ZjL !³%oO9p'HϩB 6rٷeO6f0z(AMθO:UHF>Lϛ.8*tVL1 \O. l@f s}FrqUhAH'>-gb }_3w1 1gd7^$ah*Qhk$2<[iMSPT!4AB~6 ly;X7trq@L.—ў  ibLgdHAFu"3ȟ\6X&Z Œ^`r=؄0vl13Ï|^D~. ̈́ ,!{ d, X&KQQDPaK!^SV&[P1 X&sh2 Ϥ ~BP2ޤ ,S- j RTE0Llj$eʆ>N9P{ =)A&'n!IENDB`ticketbooth-1.1.1/data/appstream/4.png000066400000000000000000013704141475632104500176300ustar00rootroot00000000000000PNG  IHDR> sBIT|dtEXtSoftwaregnome-screenshot>.tEXtCreation TimeThu 21 Sep 2023 04:16:27 PM CESTW IDATxiuvw }!"("H&)"c[e%E";bWMTő]^8WR]%;rc9$KHp 1`u~|ows~~<(z;}z}t`0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `06i N `0 `~ $a'`0 `0 #*0r`0 `0 #:v㰗`0 `0 ÆCK 6䰕`0 `0 C: a(`0 `0 8ЄA&Hr `0 `0 :hDA+`0 `0 B4c9樓`0 `0 s$^S/b/p`0 `0 $g5Iu,`0 `0 a;$#ѱki0 `0 a>XA" 4fc0 `0 ŔBODX]y `0 `X/1˼P%~;`0 `0"ZHЬɠCK1`0 `0Vf,4["hF`0 `0 fߥxZ"JrC `0 `jBoh6#1KLI̱ `0 `8HC !HCs̍zsGK̭ `0 `00>dPAs#6Xߴ:z1%D8F `0 0o]ađb̚; T:5Z8RE!d0 `0 )LO_"h@{NmNdHn'YhD3 `0 0O{}>K?2WAs=@=Xy;o 9 TuKm9&itiAh "3WA/WLO"$_MJKR~f/%ܾ .ߺoOӟːدZV@&o{\~nڙ`0 sL&T@u?TaܾѡVʠqy]:U?<}䩰D+O]<²XZ"Dtk XUU~4 LPtVka;3FErl2GJM[vw q5S {E(4 '_?+`0 `@zn 8`2sP^R~ѿ;RҫE>q+`/ΖF<.ɿ _q Yd$tђV/q7'}=@?'\|߾v!&"?5r j}3.9;ƅ aBG)DdKwۊC!s$ Xh(o{ևѫC-KV/€ t #^1M=Ή֚7JyfyйZ 8%]`M?)%nGILBld\U&t%PN2g( G{.Ļvn Gi_E'2rCB\Lt'!@:;h -wA%]́zom-#p &;@g@n co k;eißx]o޺} `0 áƀ#ّGI4rsK5cu2.`y0Աv]>8ca;7DYн Z őgߑ?'Ͻp#v`0 A{2gc{WEi(ʘߝhCKAMⰗЌ[vK>G|V*߀KNYp#a{LVbBGx౟~֡`(FΙca9Oa'FqwɈ:Ua&㧘 )1~GԚj$W\VkcG)^)%~.WBE8 瀏b9u.V49I A_:gC<%=f$#IG~tKyce Bn>ю"9ExJpVE@ s*6*P7TUPHSVu-:\aD)]>/mHG@ bYm8X0gH#|j-ޘۺrvwv`0 u Ɖ lc|Зm3 dew#@%gs|Iល*=H)NTRD|_LS1cOShό[jhߚxo^Okh|Y;z9t hPnEEgḰ3ifV4._ura0 aF,Z(:ğD6TV/muGF%9O'gC%}/$q>D3HRDRjXh(CrTa*+(«*p(k!YඒdFĪ蝈U: Cy&Nh哘^~ =azcq si~Ab*Y#_Bfsm.=\|^HwK lH_ ,~_l Gw0k7& `0  CWkkV+i?I:ڒg2|G6-m.EB^F*h4N4\8}) .5=HcV !uHG  KX.w/waw-p-X,q{bh7 'q4Rgdu@}\-.oeNF>/ `аכ榏arL}krxū]324DTIk X+yk0_-XoZ.w ` [[GGA@OаTC @%PɺNٴk0PLqvfl9qFg &^3 gU^yq]gQPkf\]xnGaz5T_Jy+HG|$TJ9Իxbh.KϩtKW;ĉ:diU*bcn. SJq ;iG:R dGvKœzI]yz,!]L_Uw=]|.ES_8RX|g62Gxk۰sKՖu>#j4:D+h+ 4<, ``h$t8k*tzՅ ^]| X΅{Z12~WNDzw+ZI$C~w~g&lbxx4Dat4 Tp#?g߬ ` ==jk~ }+șo\9t)Z.'j𖼤}EF\Z9q$+"M]b*P뒲 x[H#~ЯAWղLloErF0 s3cwFhtR(oWz6ns8!!+݊)W[t@TIGdх|ҽݮ#Eiׄ2,m ag>20< q .(l?՘e1;C4p>FK jg& ^˸\c= 㦖2;;7b4oC $V:*z'^{ Μw5 a_ʕ72|wjmXew1\2h L.{ps__3?O cdn9>FĺY;@__@'O ȏmZ%`0f~?,iIBg#p}kwic1)6VD1BYk (*_\ΒϣLzN%QvCG"R-2˪'hEń./2Щ ՠyQE X.w_ ;$PxqpvgtuE== U `Wc3Ӱh'qW@$$ňZl5OcvPyDyN]-Ɵ O8_0&gbeѣW{hhY#~_58s?G;÷/ekD6IT|2X |}[ AL"eS +(8o]߀;>p?}O|s oky8sU:X{Kw/pYx'?ywp)#YX,{x [p3~ =_Kw>{wnߺ<\|;pe8zsRڠlz>uJFNο%Ogq]OWRqisFDҧk>ޥjQX"[|\3'=H:B<(O]$|^_x}8oՑ#ŋ•k):[Q.N6\.&pp{JzbcWOUWLju/.D.)~$Xĩŗ"|8p\|/w>b;%OE~52 ÁǚC~%Q])sots2W('Sg6uy8y.8sCpsmx{?EpY8q]/ [x w0=v]y>'` o]xNΜ}."/[l#AuȦdIDy_i8wʎeR'}x@Sv Bp@#zEQ 5Km\6Wn 5)>sGq2rt/qZ9Lgldɨ8%f &'8(:zDzB}1<տ׮\ڕ7؉Q F7Oշɻ$9zb* *@p}{=pL;>?wgD}%үMxb/oko>'̋+32 l6)zÞ Q`U pl/qx~&AG}g\@s+U; `~*kti8mB\y5xܗa9z2:sA8rTrCp] Kpp djVYEːj$%ȏq]j/p͚-WR0!XĚEK)}!z/(Z@JZTK}W7.qYFIR]HN.I>I'd$ޡLHp  ̑~RA;˜[$e ܦJ}7,Wvdu1@nVk1m+b УԛGF5<{_``0LwdM#}%x?~|/ۿ^!}}ݸ~ [(` 1؛`>g 鹚I_] ܾu/o;n\} /‡gS 3̆鋹@{Nő#'d$įd0 H,:7aMY]b+K'ᝋ/r6Ýw}O$2T}y,Xʖ3j*AķZښkGrU-Zڦl}OP˷W-bog],};ĄKV&ju45eµǙ E8!am/.tt!5srԼD|>8SZN)$%yRߟ.FpXN bnr݆a)AI`Խj}wXlmy_VЇ?3}q-x_?i!0<1whH2"`0 iuN\>_w9z.s3{=.pN±g܅K_"iűw$~ \| V&Mr8 ޹2va1:і]1mJ#c IDAT4# bC\g+Qczi1ۭ&4x()|H=RxTO̩+~IkW>χ?3~ ]9 ;Q\q qI `0}ᙧ\l9x³O{>Wo,W>??kWI8{CKO׾w(8y'\yd0po>K]pp -Dʞqw#puKzeNΧgQ%%b`rR4iVjV\B8e$s h0 @Z}ZЋmݽ\w詢m(cQu*|]ng9B X\oC_2᥌ou9}/|o-L{)v!0(af./.*M`Bc\LЖnsseme]sl@f~Ur#Y-KKW2KGk,Q#:\FexO`뺆^-xQk>tJ3 Ĥ4n rˤ4n rp)Cg֩qlY?HQo1+$`5gq~A0}V^t uoQe9;>_I:9O8Xs,;tҰXlI\E3?#p vKwIم;<9rw>Kl6Ea{97Iz`0 aBi%gkq 9huE9kwOeJ/ @C [GaykZhkaRk'fnd0 !`7_;6Hʻn1\Ldjq\g]Z3.jJR![4 {We+S= ӡ Bɗj!~bhŚʛMu:;wĉd?LZ,HNF(#CmJG[?ڎT~gfJ扠CUjjYȸ8#B2JIZASɋT;1iȱ.hK4`0 Sb.6 0~UJw8ClxxD2:XNN JeMp!Z|H;z\naYHk1!(2(8itQ3p8bX=|dYͿp@)<;V:0,Zu4~a-, `0Ș+M1枡^PM_JͿ*K*dPG?Jh\`XT2*5j?u ALXi_݇%K X̠LV0~ckck(8[mo;`$#3y cLo7hg}7$l1I=L?¥V}nnllLAګ*"˨eR _tAGg[%GfV'J=y0JhԽpD#݊Gi 4/Վ~STH0lmr%3Z?WLpq˅6H*Y+#^*GbΝ *?1>9}ǡwWH"## }W(9iZ֡D VٹO&ٝX$ikH^af[o>bέˢ@*+δ]lF `0 iZT's >r_rw߅rY,-Xlm?#`$`0 a[Ǿ?}bJAnEĥ@Hx14`,;wT'YP Dzd$kOܪؑDl= ^ND!j!.BtcE+.fy QHI!)Cǔ  WXa%*ERy  HkwYYK`k< +xlxlG҅r+Y -&Wq"B d0 `8tLʱMHH. iݛĜt9(OȦƚ t>r< Q[Ha41h?},^L1A})ɑ欖ZP C#tRd>2Pgm*udytU}8v;O2Z p 27\0OÛ gƣ{Yl|n?EB)B'Wth8I 岚XDw~ 'GhȆc~R|VhewvlnJPw}%r:8 7l^qYv$=X^<`a(dgB"SB&n'Ð)V@(GuuϼG\Z9 E &P>Sr+ۋGWTMҬJfs$4n_Zka$acuv]Ltf(/{$uFI^!DE ~ E 5J:i*肝j&L}SV"*}]0qy{fIzM1N>9;F<4e s#DR}uS]Q{VpRu) 4q` @7^7V`ѥ`n!,(6f(,9= xh &E%wmC4o/hU/`M{ v4Ս/T+߬#=*HKb'ġyu)ҳօ .e.&暈K'v (e~ʥ2lq|naY~+S%Sx)H\WZ?%.kT~x?U¼+סÙf:_꫎tt@FW,MWIpA4h҅DJf'.s2EmCZ7)a\l m*l1.dr93 }-:VH?Z&b]VZhT($!*[rWJSt{Q.[@JbepCjҿ0z_$$L#qd0}VU*DСgd%w4U.ᙪ8%JoCߩZRҷcz@d4|nQ&sG|׿F  hs.u|wq`')hY,όo~\b GaSTXbOsBdR0 o*ϚLIOĩV4l]RƟtCJD A,_Ox ;wFqO*_L^JhnI]Or d0h+즾⪺?U=@VȇCm^56Qoζ}lQU9&]v(cʏ O9^ڥb:#^ (9/O|(ft@ϕy/G,C#}2pr@,&4mʲ<%}G#gSzY!v|T'Bݛ~4Uc) tLa@.!=108|Gނ5?;EAkh:59i9憂kBs\9b7E>7gnQPFr:S˻J`Tr*yqY' 23acM+lIFTHc ZDKb/1w#  pHg`aМ{qDNaMaB4%| Xd #/+,|AY'e=wyX.Kiׅk$H5uQ1#cX9e80`\z;M{+W:SX9x0u-daFMqLO`hS$bL[n*C_pQW9x 5-;sj-/L$IzwHj3.AN%}>(= K$օǢrUQ"{Rv|֟M)=ګLz)xQCsjQ #f$:Bj?eOɫP<4ɒ0uqIV8Y.Z"ENxeSc$q(Zz)LJJG ĜݡeٲX\'^%DOp@j7=8 D O`bͤ^!0])Guc5nVbUWy=!aINXgJ $Pت:*:&\̭ }HEc>A\k#sh]Dd."¹UhȢ0l܌[2fMLFf0$ ]aTĀІe+)| SgHvw"aeXRf$PnR忳my&R.=+], d5q H]ul${z$simuR[SZV)Gs ꧸"$U:c3,RӍ d0 ua6Yshy>65BLM+BhM"N #AN±(gaμ,BB+[INH5\ A`R.)+o!4M(3<#wor%j:țW CDt1ga$a{٘oe ) 0OE1N A,,a,.48u,ixpd:E<:Z M^Gr}5GCΦzzoqCMaU>A{g@ſﭡܬ y8.h,p;7[KyݻzFH\2 YtJی}!Lc0F$K/^GǡcN6n'r5ģG0ʅ­\Q+UތY2x=Pb; ?=9C?b`Ow? N(܂̾# a.ȞƇٮqCsiIPN~U ъܚH) bHG &ϑ3˙>T-ɽ(pt ¥M:( )S~KZFH `0 E38Y~a6DwiwhE CbbyD+H$|G|cEH]R+ K1NF5M#)u2UvkF0A &VO5ڏH!~r& d0 sA9ôR /~ז7vth6mC(4=75ȕ&%M%wT0~ă1DH &8:W8գ)ΪsQ{Bc[_ԔJDmLD8q±bt߇g'LhhvD%;R2dfUTz^ߌ%#⻑ +4b4HpnV ..slZZ_68.:̇EUFRZi̊ NLv(?ϬkUqRV)}# a&8ό0'Î992HY5k5T\GxWVu˨7ГZʀId f[M7bfc"׿3pZꌉ?-7WA }Sl1FSp/ros'Åj_ntLG+dvf`չ>˲aØOwFb\O_@@AL/o [!mnn1|Ʋ}gf֞u>$rOyq~HziszH!,!RB[w.XfRCUEEm8Ε:"o܇ǥI%99+BT~%g\̓](LU3]c@Pɺyn]DTOܲ œ.!L,k{m -g4ӛ|͡A;2[>)_dKtc0Y_JTlxK#.$:<& *.aDLoC{k(:#&:O MT{Z}J>6/82fX2mpNlK'Thxad򈊘 $̯]mxZf#O)vzGCFAX KݺAt/f_8gV7 |#溵A ळ ;ZlcXUKI}ρsH,xJ98qf,$%T;Jr\.IT $ Y-cb:;R-peIr"rqIIH 5.dв9mI҆'7^;}P1t_!( dÞ>izmp`$`0Ŋ/lJ6H8+ ,EmcC AcҷBrdf[ݼC$-Qí B0X(SDT. \#pY/ e$q.וѺ\p#5ALa$HGV'nbadU͋q'e@= @r?:9?עL?WU:Ej4~*+a}[n)E#"<h*GSq50OV@1=(*= h'/*8*T47 ♅/ZdBE>DK}ʊ8c墲|l,uUsy$.[uǠs^ʸ^O:rJKZVh}IZnY.'KY癳d4؏q0so=0`8O!069 'BtX}ɟv=G7e ,iXU H6ҙNG rB3.od@/xyrRȦAԂ5EB}ATǢ.C-})jsȿ5v72 @2/߃]2 !|\O}Vbvʵ7D,VI#HHT`Ԙ$i(}dtH@i&"w%◛?C[ѭe/##6%n- *wpE/Lya#+k;(Ya_ zeFL{ᗌF)NC t@q-x;pU|ܼ h}MeD9=ﴘmvMM=7 ߫}ʘHE;D\=dϞ iycDZF8&.QqI3Opt^Å<][$R\z̩s ;Y;мur)+X I uodiR#{J8N0ZG+ &pЋwz@?<.9 V|TPl Go8^KJN);Z8O*=NG/gy .RpCx=};[̾!~%Ji(ǽ *Mb?<`V tp-KVe(K#WE\7?Ӭk>n\J]م^u>]ɠ7 P?737f5V~{F%/LȄ;Gp$Y>=g, %"tXOr,PၛwubN?)M}bmQ8*EВkY+2]i_shqA_ V6wfBʁ1i=FM\F ȚA24~u[lpG%K#܎)SYbC!K7A!& gYh6CK:DD0#V``4 B_Ivq?tp h=K,Xz7nՔ[JDT;o+g_Ӗ03qHgϽO~^7Kx~іzAS%"q e&!B+GVelV Y,+-&7+?neK}kزB=!K e߀[;w3-`7]Lf Xl! p7GQU˛X H,#Rec:0*\& I,'i}P2h OVrnY#X뛘9s äоEtQ$ޖiSX#':8 Cj%V1LuRˤ:92|i8_{ ن(dXƮ -&Cߪŗ4 D#&TV#/0)yBpH_$M, M?)sSٞBx GtYXn%* LpxztLs4 %4Bו\ ##gZ%N'8>V O5[hnnӒVwLe@h)ͶDYɡ!P6wZ Fs\~ӎUɜO GDC)K-ӚaP“/Nѓ:Ëo|{U"Q/?c)2ׁm֒(QOOmy-"-\NґrJk""p& yt4#]! }5Ge1]XyQB#/ҧ0%NC5KBCHpF9O z U`I'r*XPtcRߐ3PЈɽr#WL$Fx?P|$ .]U*{Jp)sr<_>ބޜ&Y~VY)R~B%/ ؝{BA 0h +(6[6%j*?i|67E+b \~`tz}:gMeSTpCzJϱu }$>GϾ~>}H/dS%u )~^kqOQ٬fqK #,T -;d 㺍q:| 2NG|95sNlG)>rt;&',f ؁:dk,>T*5 L?Jػg{VtIu{#1\)lVX$zWR-TRA+ hsnDY o??PEbW.^/ۻDV2?pQ]ʹAz{ʭW~Y8rDZl6q[os^BmfU]'B'RM2fRe[V}ү랥PŸ<11u$LF u? %pO7DL~ с!ѸB"xL@/ǏɈ[j:on׆5=dCV4c Nq@,L%A2s\iqv7װ!%^cPpDzFv @^ȋhWJdam/#C& J Zm֬{?Å7hqT[1E-@=OPKS,))UiA[TN6!&䎯:KAHVƊuB;u&\_lߊi^\ o/;Ea~$B\Hue*75&q4 ӱx*?W%FAd/Q/# :r̟mYY/;(2UvbKQ*K l[qC:Eu7Y *uVW`'|%t$>"|C9Oҗ: "ɀ@E N$K:aN.0 S)oaaPu1=[qLBthh<~B[qD{Q@Od`g2J;71ZG!DW2ڧ9O>.LYit.ӞB@y൴:J݌m'[ңx|OTq/,SF'gC?C|!~ۭj[>JJoe7DwZ% ` yM<օX>dqP:^/4<-b9ELT;q[ % ')]@B%+Fȭ~ zg6D)ԍHuDR\'B. IizE-(=GK_xp#4!59'Pq?P6 /O:!FAwR cgJFgGR1<z:-sUGY"aG< AOnWǚ͞-j8́TK5< z!E혜!+⬴ )%l\p$}i:g'VOḫ B>g;RqR]mB`7o2]V22Qh=H:0(-qwR<--;2d}4 /<Ю&Q@/HfMA_0`'\rܼiSDy<\Y&9ŋe@DWu(kͷj=?7>^e$#IuCi՛.C6Hpt))]"v CEaevђu5&nFAsRJ3qPRܘ>+WEPTodl䰿Z$‰;ɯ#+[0t<$ #XkrWJxO/Bh-\g== @S;!>/&UW8rܵ8ݭ뗃#3Z$^L)kϽ7vL =;# [G[Xďy'J`!G׈r= 9Eog 9FxEic[[DKOT)x45KnaO:b !}DKjxZiƠA?ꆩrTW [C~mD~ ]rB*-zuy*L## M nbxVlu13ȣ=l+Էǡx]`X%ѼT4t7mrL\)r$(z&Gsut+jx L@IzmDrv>GH ݦC-@q92 L$i$G"J!~[Aw)u!JH:%to}W݋6o_E'O}翝|ws;~ڂ=?M:r~G>7ᷞpW}^I~->rz{pҫpէp;pe> O 'Op]YοM'%p=ʹ/WׯGN<8uUx^ypҫpw4p+pᵧ;Aw`k?y'<}/?'N]HzX:f@h-D|p71pW[L"6qi|YHrtO6;!OѓQXE<&@eGa3EޡS [ =_rzs1[~Ot-eO!t GXg] ᥬ6^SʳTҞ]}Cic o(f& dYEr$-d,͐0&Xt1\6-gnڞC'\=X8P ۩=o\ i+fVr|Qا$JxA~<勯nuJl'Ko鴻{nݼ \|^}Y,ǹ~n^Wy=ٹ7_x>|^ot::Wyo yJ__z>Nq]-ڣwS&5hиCi.˃hdy&*qU8t+OeuɏTzvNIxxp xVt&y8TvU+˚y٩0wx'VWz IDAT>D#ø?y\yP>)%OAIq5]pN܏F 8^Dv@֋Xg|p>X!ٞFkYˠc|:w:$u !{}  "X 9*Jd9Ux +3VBSXlqH€ݓ/}0K_rfբ!?嵐 R!{**,`hզ/pݖuM'E TO꯽rgcoZ^yKٻwa~ />pp|5l/uw N}`]H :Їq- ǃ0keh)cz9Qc2'iׇ*q(ySpd[^kL+p.^Pʓ,` M'̳4MxVilnSd8Ɨ5P'7d1:uK K1"T Gd3)Ė8 9BK'C8I_X[dX&?6J";O+Yq(KN/,Zdh ECo\'Jn'?hj[Mn;Б<1z+b/8Ke'x S iFR\Fm#gz'mrNCF;&'&%L zЯS~7&z h$;Ҥd9_K2Y@'W/o \*\~nݸ ;odq]g;()ǪE?^'ѿ,/;=%k M7 2ҞGZZ!5Qn9RIasC/dӍ幰v׽ҵ" 77ZE4TO}d}.ag5+l%,MRF?𢛛D36i)?Ҷ'אfahIi^Djk)/"beLiHwNWT Z%+S 9B媪)uSjf/Tj9Dz#K$kXd3|$bDMH~jL5{_kTq܀gxoS5;|8;(vu<_FUoߺ |헋w a,;ukl >O %>,z-fZ!Bq|H X45>K9 b3+`oz:̫#$R=1sqR_yU'1ihyҫyd`rHnȬ5aenV[1y ̻)Q2㇐`(ecML[鹒Q3\${'O w3-0hfW-Y#wA/;}7)K!]<+'8ؙ^TySaX8}qmx;"d"ۜ?%[p? >ׯ /=zbG^/ZVceN){p_-ozY9ݷ 6. /#f-D" ʤrcuJ/äGwSSαѩԯKLcASfNJi$m*2d5nHq!5wfrSH&Prp}8G(~J>A9-&@N(s! )&Y8P-tzj+ox˒ǧ9z+o_?.ZaФJQ?1G'o=E{ܗG> ׮ o<Qz<xphQzSpx4i|vvn%qt;!\A+|38l (VF-y1xcK/y^z %&3Qk2&*c[Wi%/ n4~Wq2u*Zs jDw.2IʣQC(&S#kP CCb  fJ:OPa;3ˉ):hM(,$; G+unbӾH<"B˄5TZG1#1b}9>'q$|i/1ر9S[U".*pSb-0E*!K G,W?W%"UC!sxU3ſTOٖ ďr }:c8Q)Yj9-? Ï|^=UX.wsa> /Y7ׯ 'NG}ϳvqr+3CC{˒0;qߒ/ʬڻ{zLFr(9U94 !h$l0 CMY-l ,lQHmjf833RյWe{#{oDܸ̪^Prvĉ'9?"aG:>6R8e'NPR9TWcG8?.O63{*8p, Z Q)>߆M`l2~H C6)!.` -~s ;dubmcBWT Ju3C+3g&y9R Z")6-UܩrW6%݀]g1 k F>Xbh+Py}lc|"nQVXq>rc*Ϟeŷ3O"O7Uzm:$/;Ri;SOE.o˴=/wd{{J翓i* x wpYcbKDF{4ֵ2+k9̝ ># ?ߨa[±O3Eȩøa=J`Wv~Tk Ln{ R{v^.wVgoW4ʧw[?wGuMT|$ &B)9Y/vbv; k}޼6yo "bt{`L RZ"Q5TiQ'Uс&UNaO'2VoG23gm 3ͶER.3 \"ͤJQLi~Nkb<%L Ӈ'*2%`( rtc9 +}v꼺 2ٷ:ҧ?&ky`?,Cc(?6E \Z 3,N;|?}!e)DC˃ ySF/;MH ?ScӍ(1 Wa[oTQk5VpXS)SƵ˴i+;6NekX3,?@L*eN1kD,!TXQηPhs =Fø5tH#!GXVR^<9C5! cNV)aJo:Bɢ;_gu3^ucCלR 459#̻MC<6* HkorP!q9dcR=&Gh 8?kR>py<4 hEYxҷnì]ZT an?oG- i&X*pc+_*|{mQ5t^Lv #5R.)mkO& ճlSnN_>+_f.ct JDM8Iu@پDµ_ W/!0 eFYlɅ~ kŲJqh̷VV*䲊 UiΔ=6ٸ(AO9tPՠكF[c̶Av{i ZI}q,,3Ye0=מ<(>yGOβí6]nvn't` hSgv}TcfAkN^U]6-vU| ]~`sUCKE@ʦ ]cs &7yxEE%;ۇ+_Գӱ)i,wAGCK΋3EP=d| a;Jv+F@nWܧ),byΙmbݢ4e%JNz9(en=| t^`1Etp{h%S( @CFjcsYQmQ$59k:@L +-Ǧnֶf}nm8y7.ƕsbC! '$4`]*j[Ũ#MAKR*D ݤ~n\Cuu+*TDd )2m!svoY޼ٿyߣ@~t 479v=VP_&sh)k f2v?}QnkQu6FT[.WVZ\k*4[۶D_'XRz> Y:rc4O*Vc<i,gC"BiTJ}˦;;*FqVTUnj>nj wbQzy,oal?jb%øI0*_UQ5o/檅Ã+㣪}',&p5 Myoz'  R"I!A$(V؋kZ`U4MhUG!PKRFdw@&JPhFM7WVi,.c] 3(6 ~Y*L1trUzvtUd.9O-Y 32نcRWu 4@oUq@h'hW[WYMXt4dx>j PRl'EBvr[i*/Fht,7!\ˆ2p˖Q|bReBEըNoLa"o} }%лR.hNw =-L͵Z!7 "241tj!Cg z0o*! ;>D3?=MDm]_Lgo=ɑDQxec4"Krn6asgntqZ7. Xۋ>"$iLj7o}M#Cu25d'A"}ݬܓbz:HV2W"Rh'Y+#uΉOWJǓ(Gՙ"^-Y8PЎ0qؼ!V|}illvy5)\ eKKy|`#;Cy&iܘiK4J/DӧpnevM'oymkb׋~ZgC%~yY4޺꧷ pc4d>qʱޡ2tyxo.G;,ll+J}ڍG@bjh**M]Ue?lGdoMV;.?diG699`w$ x_ j_7ðP1Jhtcj u:$֙ch  D!Za0rQB{}fȉi.܊Aj ,}Mѩڐ:=]L3t`j H?=Yel2ֿ6+<ȏ=D"j 7Sc-śr}[ I\'Q("H4l9M`@җ$gZY9c%Źt,8_q ?Ϫj-u+q.)+Ƅ;[s-3qeyu~ɟp+JDgGq}gdՌ!k*Kq|39ɥU^ ?O{=GQs60&&|lQ`oq=N%\`6Ab(=K ECP^5ۙ_0qt(]ri)u-yۤ'tl"PvjE6_-Oי)2A7%e/UmWrETjإ,o,8tO Q3L߉_ !suW48fO M't:YH'Z'YE(dbݤ,FZ=7H`"I_iʄV#h%Ћ1]-MS3="#%̜hq93]61$+v?&=rO;vБ\]d6+`cZҬxp8 @Yv}҆Uh 88פ}0 -qċ7Y偽4>Ps$d P*/WQVY iJ8+m"*ƫZB}'=<1~r0-<& ;&G3iJ5`TZK3Iq=i FkWB$nns$KLjҏڃ]hL7F }ݪCg0:׷lYfK&^h5Z-":k`ۣ>?4TGÑfDQ6̟e0E"^߰:(3D;ۯhpx3_d'<0?CsNz7>o^K\֎a ;1C&Dz0<LJ%PTXJY «,lE8Kd:upaRU>JYb0΢&UF9 OVbɉtmt%9'-BY 靬[B'kXi9IuԻj8xcҕ6ɶӟnoˑR9H`ţ/^׀e 85Ex[&іM+"3pb{ ʉ'M9*Iۤ,$G'^:a=BIv*Jwy (q90Ӗ%y=ol~Xr,,]VAydm7nbiV7Um V@ 4l}ǚK 4}EG[ 㔹(#o3isAMsF|c<{Κ?Vq%<"7%jvRV|VFk`d<Av!>20hmUQ+Ϊh7>%YýM%лgwa!k&e~S58Ih9b5fp(SJ3ԓ(IlJTh}D3ԗ0u2/4Z)Hꯧ92j@@ 1QDӋj~61qvw89j^HԨќ4K$*s>B<.ޑ8 0wpFT.N +Wc (I)rt~xYPdU<]&fWS]xO17^9e{fV;Ļ+ 8s|Nt:U$S&7H":}\+3T}4b5]/WhD KMLqt TI"aoPSMT f4BtBFk6B Ā"1lvb"-->.@'F;,NAՋZӹv.UhkP: D-^ZCWcGi<"~gB+7ۜkon-nM4j:1Q b0]CD =3nRmEz6*I-c&WX3#@UBR%Bv~m7)A>ʒ-OQBǴϨ⮢{\9q a\.;JSjR+W2J(p썣A xqi1T|d Ȩ<>ErJX*/+煔@p RT{us %Oͷc}Pd  *۝qM:2P`*1qnm>qڸN٣.Iʭl R[yzh8L/yb {ޕxx_ vp뙐+^26 4m4QߤJ6$b_[140!u"5@0u=a$lw{ u-@%Bf^)$${]fGZ\@bԩckm}KL-UWB1[LSltzcN<.DEC"MT5t=bף/C?Oh!˚ޣ =dx}u?:o!QQ IPR$ $IZTѓLb(@awSEW|gY|lfw/1\mHΤm3"](v.ڎTגt5'W\>r0MCF bG;q,dH>u(SYXh_Q9g-#WfETʪ^`U>> FZc0ZTNbœ*w Ůjos[|.QJէ!.C?]{0jݜ86-fpq=IsŸX yKؒw[b.8AFb ?&U:MƽK|YT8maK kk o-kWs]qPٕ-qnlcF '.&?-pV<=ᘘ[&AL8e^]bUiWIT$yg4qrX‘?=->;s/^-~Jg;wúQiy }%л ЙCLHzO 5} 7h xh z %(A7~Bjf *Q31qB0Kӈ{1F2Pja$RDhN_P6vY9ҪsqFҬ!ZJ/1!*@c Mј0x hM#1ǖ=q#K<̏i[M߹LL囯z=Su;t{MvA@$ZHtD"B6&"37*{-T ; aaF*$To 5p]AkxD~2ps:8G}HN8>d *CeeFLϠ>nz,QDC0QH`7bs%hPZ9JJ2jCÌp._]Y^[]ekysf'%ux)P3Qzb` k5}fg`? Y߸wrK4>c'P$j!QgT_a{=.suo { (c*J=؋kZ5m!su7auCOC%~UܳCJqWӲ|c+G4-KN:8<jՏ"V/s= 跷h,%չ%N)9e.4 3޷GL i/dZ'}S<*y=8 wo'g)q~8*?np۟OJ4:K+HŐƣYI{z5>O=߁~Y]2,_HAmPJb;ʰCڏvҮ r!J5RZ|IW,xĊi<䶀i.qn(#-޳ !S;4h26V:eIӭK6. )QHRQd6%yEfյ\,aV7JO,p՜T y3gV]j].gƾTKf?LaPXxs˔p,`6׍JxO* {#0(D:1LCHz$>L_rҥ4 9Ugj {C&\ܡaf&U^Dht5d2)L4Nz>O"{=ڰBj5:u5rl~ocpj?qo!h7;D;T[;Iu+UMM`*G=N/Ͳ٦E7vh:@?apu'zce Vwkѹ9ԩf,oO_yiuLbS ojĦ:&bؐ) "+6c!qjHU ӑ>qK Wj4?A ˮ|ݭ~ :y~T%)Z ,c'?|O$?{|Q1G?z|s؟c)%stI盿#j͑4g/~x~o'IqH5 WxSߣCiNHo7o}[*=rvݠ)h צ'ErV r?-X2ҏD IDAT@BS]|UtMBbHzT#ߗiIAyc#9gW~$TPBM(m) :A+5ahFޛ媄Ge?+R_wc-{F%؎1aL?NF /2lMҗ8>!߃] (tS@bN-&؛Fv5j'a;7MMF2J$]:L0c)LR@*9~d!ul (v:}zZ#3D:sQzo {Eҭ˜OB7& NLtk E@#1 :ztj6nSqs4tz7FhCG.Nk$6{}ŋl|Ho&:2OtO¿óW}j ~}Wx^6,1Sh"(4@ A! %tjJ ٩I׿IHxF.~!}ԢO'tqan]g{rJ>7_`+h{?6PJQ0jH F:Vi~XJţk_d#U`B"TTgfaAPQYyXFIEH)?#( 0N32"J|: nJ9C*kw))dmV~G_K'ccߢ${=˦D,=9 7n:. 6MnE^T -xZ%;t6wuέ=rw0t2ǥ9RMd PReNuAV vm'LyMJw0p"r]4f$ht 6z1S5TFѐԵwЉ9h2k_1;JncPdx;I@shi1Q"`GLQS <#R_mX9>]LG !Q3Ptnxnї_ͷXYZb1=pOYyjFk(#hMܓ0izmmjt$lѷb1f\Մrj ;C,l4%>g.K{.t.7w mz;"1M O LRs.jƤJ!Z }G)uʡ AGոt \m- bl[m,+8.rO C>U!fl}/y˯}9K9[4^D1±҆(jMt?S@(ӾZdOvr3f3hF_,;E=UTC%J5ڕ1k _XO: 7R5ߞDU͵,[wM8;GR).䏞_cS%U8^YY2l2EIP)W,,nCVmASo6P9ޮ[R'dc- &` vrpuٸ8睗 >oDI>)k.(wD xh}%л$/TBdf!uP$Ƞ"ntS=C2HZiH"tgU&u$*Ei-^(xfA1:3S5v`."$FqkL5fRE9*Xػ|bF5%[]]CGרϯ X\@X7؍aP3O?ZҦ帊0aaKLdʬg=t*(ag`3DI$BDwǖq ;n2`ss乗i?)jK//Ọ?0NmkWz|JosiN[jhQZ _3"2}Ν2,4yvit-[F>D 1dܫ͓7 M%Ԓ ?s㇅5Ww<53OټNRi 3Ә&FO>̳[˗t<:J3bt0D14'\-D`b0 LjeBBŦZS5ӏ \x*[*,KU:q!\m"%X8|ul޺ GO+orI6. m6nұ՚ܼ<GR< en\ӳ˴/}럳qu=Ldg| <6:+~^ӘeèZ23wSlɥWD5>4x{o|eMjF| m䃟(@C:^azsK^W8xy՗]h i8 1;]ChMjoSg_Z%5>ʅ=L]Mtmn43h5D+ۚ 4j5A%钟:8\KXycOՊ ;|2ک(}tѻ߸׾Gr09Gz!(bBC$|)n>?ϡŀĈ!*Fhj܈&&R ViS^gat_q KJ w`/9^avor'hͯМcc<2@`o7^<_Rˠ[^23sG,/ųuq<_A X"ӳKA?xۿdD2l78:\{YgOԒ/\~.'|joowYgIڻk]}>Q/~a鿞7Y*g>颰ٿBx/qgs|U˭q۫m^}DT.C@쬱vEE> Q5^xrRG(5/wwwoWJJ >  j\|9y]ZQ)eedv~0fvO71?lz ,:Bk\Ն&SGю5, ޼9(/wi即q+K m0;tʖ*ᡧ~1wU5.;LZ흴^G!rDkwJE^;w94/N mat䔓XzC 1^g[?|Քc+t+gke'lzAMzMX ʐA`HJ.@E* ~2O^pZg_{qe˱RX(G@QAl3o[UF9+UQbl"R2ʪ5s\-{P׽Ԡyʮ$jJi 8>P7cmD./Ъ{ޙi H|1SY!5`YT@>N-go)L6Jt~_M\"MVNхv(W l( 97O/x"niNWVLR"uU;ohc0jW { %PbI%PoCN^P_fѝݎKDZTf*1nl zUj*>5))8W q26t1}hްݭ"9DBbAҗ0h4Zf2)hEҎa ֧kD0%(nafa+Qٽ,%!j+GD&V3)LJknPNnu wlfOdGj>jo 3dnvFceM2hDT4CfrO˟6yun,bpG:3gۿKhQ -􀅹MϟjD?EӒܔHz6еl+tl= S ԙ1v*xr=g0&pf9ׯИCa\]n^'~4QoYgsf{)~uABIt H8M= tP8TVDQuv7ҩ ݽMDsf>YZGڿC|ѩ0{ݑw{|fk>YfWrt+Ql߮B֕_9Cb4FdM .Qtw7xZ< (jhZ'-1*a=@54 n (FPпF(PJa"44k>q?;R41-lwu f:ΖAbf:Q&ĽF32@Oը&w54btnx`RHCRse+Dh5PG0#v/d}yZ#sIX%\&iEe0&tml>6 ob(UIzg^;HӔT$.[6hkNX8{zR$u#[on"k{@*f/~(~ƕwF$bt}5~U{?zLBcj6n?oxmCKc(Ѥ)5@5|h=5M(!(bHRH 9ZR%b;qd(޲; *$ŕq9mͭLWΡ$o ;yzsZ=U8B n <ݭkԛ3ӹ@[%HvIjl|# %dұXXcpW֯O&}S=GN~9v$taW!~cRrZW_Q%r@[HxTT6F'ZugBgo&orOX 8m72n] I: Ydˢ4 iwZ{XF KmUf IDATY5W Gn9&Y/_]0 Q{* n3Xݲi{E0%mK\QpN=)$]RyMP`u? EW b+T4ؒ:NV޾vƾH$Aqő4#)'3+쉘c{؞?cCKC[(QB\mVUԭAtT[YxW(Jixd}}'|3ymEW`9 kLT;= ]wWX`Р Qs#o]wi+iAXZpqU7'*8G S&xsgg%:E:\Ss[,LpX4쑨]XzY^޿f]zn[JW=< W~wqC_IwC+ܷ%cSXY|F`ڧ98Z$8|tj/Gظ&=2e gFjq8o<9ミϱ+'`ҙg1Ƨyl0R(adzl\=OKF&|.^Z:ZkG()1$,!3"?`dD+Cg41=FnZ_bdz4_ {X~ňPܶti"'QĻ$ +9&[^kWuFҘ%`g2ū.ˆ%=^^_R7Jpf0&CqG G6L: d-8:,) iqbJ\  H2DhqDtx9HSr1qDBiH'3݀3K7sôxOH mJ4vEsrKa Y'S>'4Mː$FIUPRNl2hsq\ [QL'R%f2Q=&Q}mY$׳tHtm}f:A1/#ɓtxnf.}Q[Em*vC!+Aϝ(PKi&S;x/Ź& u&:;P!rF)j%d.beҏe-Iݍ-,W3V Z]\e125t(68F כLOԨVDgZ7Ji*N|sP4.35b3=[h?Bii؄m_o]]}f&+8@WMFc Lc`Pqmv5j/\8!10k,Ԅ6[}} FMX,_ZO_z/1kdЯ*hz7W{wN7hj6VKc_kM1?bF,1Z.-W24F)іF-{ܲ᣷: j#S=p"bqlf;>5xi^w!McdbNS309w<(+^ddjكw,ufFݤi:1w<(ŕ?Mvpjc`tjB'TxWRWƒßoo2sz &{=@H`bM;| J^JO(PN}ك62 Dv {tf E|*AX$I\AUaf&T[_[ݐ@J(y|LT )C g O;e( qJd;FvUanX{z K}'"7µ=YN?Yފ}A}=Jk0U_#~pvnb@w\2ZX n.r7Ka CgzL4Ԫ  +rC9؂ 6tW6xDZm\ 3(+vh]́Imn3qC,8T-Eˆ&#%-HOӹ|=SLZ/f)st^_B~^IbcM640[]a{?S_[pev=zӇWS?KQ>J4,XsɭFGʝ#:c͓~  =OZvvcoTӎFISm/Hn~7?\R)D`G#_aR##d7AD[ SK  I~˅2y$L~7>{>͑a (w~7|,|˧V+8>ő۴x?M#|])Os<X+B^qn7gPG GL1BG㟥y7ĞoQ|˲ "џ4zJ{2qWoRN^l(QA؏L0P+I7^G&J[$- y'[ͤy /Q?*A8G'f2N7%if2i]J#{{:I!Xk{>v1rovU#ԟ0݃ 5Uvt9VҬo_g}%mCޣ2z%/FK)PZ+;<j:AT3p =tq5[PS} MjJ r]ƪBaBcz6h!c 9 . X7ی1=&ؖnЃZץ67b=c U QѲTg&NBRPE&>{V`l1dZ}sZ,X(c᯷6. ]֌CUjfɉYVyzS4a66j2w-8L7|D,ьTi҅>/=g AVcs;?fijg##vzTL:+|gs^,T.Zeȯ?0ͱ& >VQ%O6^_0*9ZI>$:;x2m8#$(mz?ėl?5.=/3M."-#IڡbiNA:!ȶMF"u«N-$ò.v%yA}3=fepD­*Pu(`0£R+R4KQP>+RQR6'cD"2q=y PP#M^EŜ)~6$}Lo@3&W:QeEUxxi&+ovHe[` dП:<Ĭu4N+ٖ>%,+diE%ևLTSu- ~EzSF. @&kO<>Imo%i~}n]ōqPܳgC˴ lOiQS]TcO ^F\$=SE<)gq55Íj vzu:ÙM Ts7 uT֗Vo\槪Tb zO(E:g?{oCW{XȦ҂ K>n;0Y.Ax[[LZ&3hf+t^/ۏO]ov,zM66+m77ʓM.uvq`_H3T}a9,-8OQU.T6K<+wMǯ\mX;ˏ5l;CBr]m`vSvm_;UAwq/>}cs٥w SULG`n?9J,2rH7h .2Ŝѽ6s:^CZGasKh_=~:6\B.F6xJaYz3 ;nmwMևβf98uP=זX֓|+U*]0iqWj^*cx`S>Υo _opv÷t,1:%;:_;`%Imn'x(`Hر@+}RHr2EålLHD 찬g졻Rⴒ /#m'g!: ?A3fM=|7A$&a T> `+%S4)+=YgjORS&]͔c)C!SE<&Ik{H'+ lEa ޴Ο(39D>sH+7xɜTq .۵bYSqYQ0"Pz.KNWk\O{+ß_(j@vZWKT-c o5‹2> 1LIW{*݀}lds]Ҥ ] d9,*G=UXGc8*Dk }w3g),lff4Cė'Kx#Mҫø52+߼lJMmy]m3KR_n̎h1,muY=XVV92;XJ=YKk<0U23 ҆U&EЭ?zoR.Z,|C\bOOeylS \K1gV;>i^kLPҖ +\֓<秇G7Vqufץ_Aִ=Au{+Kܱwv=|iU>YUGbԶ{=OEF _: g׻ޱqjT0#Td;eܓs CIGNƓ~.de߲=!ɄvFv3i/h2eYhD[ۤ *`tg2X, ϐnעsB8]4/PB.)/-\T,o$_̒Wlf$t()ZUiT m)%d8tI"mzW&]x.ougf# (vN D!4moB$^oA-ww!)(Q11>V U, jGs.GǠb;]ǩ eYX{\; 4 1o\Xiҽm zoѹLL02ݵQkKX~8`,1cQEڳV_r ΞY|;Z:8ךQ6[rXcj\!P:~c ׮aaxp:={ً̍HopWVw{,Nryè ޛ  ՗"畇4"`59|Y 633R.c18igmy~*sUNoh6=EZE5gϕo݉-sߞ*u,DO_侃U~pv4Ub|s}|}\xC nDm |}q!56zgh bm!!Jԩҟ+NC~0S.nrdg˳^<"΢R(e'~Tx IDAT'yɌe `Dɲ Dp+WdK=W\r應^ 2.$iigHDI+O 5G*ʜXi[v2ΆfS.į<(|G'*ӡ2 ?jXn uO7EI -DYNք$M;ļ%n1v0}昸Lڠ$d.ung`w̷ȔMT0 tv';:H*L+ٽ&xNVEz K'ӤΆe&T 5U(d64xMn߯Ц_+iߵ`fHܒ,+~LpG&+g6WОGGհgme/cuVXJ &'n}era̢ˉQ^_#&PBmtp[wY~%>t0Pej(cS&8p" A+DQWhOf_S?0O_^d2,Wc=d14 wE_tq,;x[m5QLPh'܃ǏO3h:cQX0'$T7@v 처 mvX8$ɱP"c\x I>{5ɪSZ䆯$O)6H8erHQ<\ %m3n l\_a!Y5@5"V)(uAȶ7JoZ1bmTrYC"Dx!߆=%<*g69چnk`+{wp#+v*j#DPXh,+++W]@ՑclyZvxihwh}|׆?Zwfw`$KPxFqe Nq`PF0 4f/3y"'p}{6k-K(`%芠UzAM-Ve94.]gf<%&vdhF.N rȁ9 l5Mn0^"~tQ/X 2ZcZ=& [^M v9icp4>(M| 87`qjoњŸp׷PXFZGqn\Wp}_ic>`XnXg4t9?ě]]ywڠ.kϽʽpx`Vj|Z/=͍-l3TZhK-0+߳Vc4;mlpm~Tms20T6(y S~u#ѳ>lw=}#Y-aN4i|eW@v#x()\x2:HYV1&ieԦOAb}+PŬJ'iV Q夃)qAdvQ$LcM"LM(P ,1A٧Sxts:?6Oa3 (Qm2Qocte; N[CQy;ӧqTqTDxu/7uhyK-;Wm0&pHYAl:x^ JXb!pp=-,#cG,U# XQha `eN=ZMHGl8)ase Ai ux,c5[4~}w=} x:Ggͅ ߧO"W۶`y>s5nqbyObq}֟x[W￙3Om\ }D>I$QDKEr5L╝ۑ d ,>l pR 9\RQ2ACֳ-- |+K.g~u:ݷ ۦb~T/5̓(~ԗMRJG/8+T~-L&]OR7.޾J)E1˩2M 3iB$*z^ֱ\<&Q?%'l>b1OC)[)+@ 7ip2ࠨz">-;tA݈V#aQn(i]=zRDT>O/}Wl C_ɛLAG;B-I $“x_xnP4]JCa(9ŷoŌp*e0}̴ZH,̯Ι$p7L?bn|ed*E" 9{϶EuU/StFkh)$ ˾;m!ka] ݼL`'^"{  U00fP BwX06ՠR(i=\F7l-ABi=8=;LNfסWMO*/`#F/B]G1^?&)Lq:擯һc[rX XT;=?~?ghUЭ0S:g[5%XhBa0u-6:N+̅c Y^e94oqjMelu|.MP;0ٸ@cV[?*w ;Ow6kiOjno=;0Ϳ. luM FW+8q m{u&(Ms|偃X̎4மc|BM6K㯬ݳ+4)|cyVsЫ} ep:x h:}iT0*I!01ߠ7upލ(66F:-xYd~^h5j9NvFhLbov7h2Z&5Ec29mJ|VB kmFhMBb&#n# cXg}DA7^~tbhx=:#xT| f'4`+Sq _Z/~ۏ]l^nܯZǨw_| zι+"ʧ~xdcfa[Ԋs|xFRlS yHE0gVG뵳|qMXz1(7ZT.6{|s_Ϭw |ϣšA `x'^TIH w!}1١$~owLΜvis.>5{A4_鳽aƬ4DRjM)$3~FLRx{X䧌}Τ/4K^k\+?Q^9DOnfPzT39C/AxzF;Iה֬ďJ\v5$ciLrN< 3t_/DHS3EuYzJ8gmK kW(YHnMm8A1*Z*pƇ|K=Ohȷ!GZ#1I{jR =E&%8[)W dtγT <A&<:1!eYX#fi'{o=d+Am J,7Ւ^nȆ'q4]AWJeڛ08emJ1U-;ş_R^é+I}ɰkx/™|W{ t&0( IMp8{o 1+ >3sZ*h!moTl7iœoy66zNQҠOJ[.Lj c.]GSSFoB+ nVñ{rխRW  \*0Ϛ+)Ml}sj TPVW/mr+)܋-D{`sp}.yٻwh3?FͷSNix_=Au-?c흥S=4bJl\Yd7Ǜu转^ /8}ʓr{yyN,ƞR oAG,|9:t ~59~ߞ~>hma[p f_Ybհ+6Z sWlnQ`<<e#;٠qx8_>[^⋇oBE]IwF'_VI ?Nl=ɇ&`6`@cװSZ>PypwE4SkTҐBgqÝ //cmrNEw!tj_}S7*|+񥐏HYr$._7Y,>Ozlv[SD+~ΤLS!ߓ D۠tɄK"({p>IS+I![ՔGdĐ+_V""!(vHe$laK<:xnv8r=K Ů6+  ov^=P:n"V%mblog3G}@ nz5(E^g mTZ3BWk:  ga> DGamiL TA+*3: }*w_7(,cck=|\'+} Zv^qK4 o#!\ni<ۤWFi94Sab"-X\i[\esjob=?xmfK}ΥN8HS/q -3~3o= SHf|6^vFF[iZoCFY^#`! 9tz}?LoWyE4*4FkԦ0ˆ*<{^C Z ,;`F"a_CP1 (~Wu 8V͢t|{|XqUP؃[l aR`)RсѢF:{j4SNJ:J)2>vnG| pv„𐛠+x'b9˟48I Rٍҧ EEW qgpJ*^xŗC+I` P'ɍHIy!C dieWw0h<綰o%y*BVx7~!+l}7Zh'wnި@f0<@%v$D_~4 QF4h fubtr=G} `t74#*h(@kXl6eȱ}8M[T;6":5h |c( ǿ)V3g|xmE|Fi䂮{SϲvͲpˇwC<7B JR+ H\оЯ>љNKM&g+V/٤RcrQ?Ej#sJ%Eɟ=DRurq_~Mr_={??#|?Ͼ]qCc- _O=v/}wRr%?:>@k/XjWRUAbqBK2/c$rg%:b*?) H)dxH'+ѤS,oĉ$Wa%PXv"-EW'8V* \eFivizQIKF tiM-ȏDHdNxzشBޤZȺ<@,JڇAۗ$+;h:hЖė/iK38C-)كD(ƒų 钼U-!a\C=IhGM{fZVZTS|OIDvILu-~nIF7}qvM?0u^7FL 'A 6;ƶ'G. m\-ۊ,6>J $0vFJN:M 85_.Unע3ngtzߐaG/yL?aiinzoEJs~&ۆ2y#1W}ɣHF-jſ===(K*D5D`]Ou~ 3*G8ϧE) 0{nyo>NҷǩN8t#ӟLW␋߃otPm }Ҡ)%WqlȈ8݄FlܾO{cq1 > k/^J_[Η?ãmVz y ) ?׿{ U|U m+g06R>װT&+-A͂uy0SĆm꒖|s$;_{g``Vg|` ­(*sơ[9Y5dM\eq#1| ZKL<¹[<Ϟ_bѸg.8=7"VziWhr019 6cXuo>@mr 6M{m>˝gES7d6) k'.1zh?/Pk VQ<{ﱊEU, 4S/p|4g5+^%X{Gms i(9|LO%^PH|Ouǁ LWY*wx_g}$3nˍ`#|2@l>T~|܇I"Rpdzٍ y*BIWʙ~T酝ἆ@ ɡ0$('mS9IغzN*G`kf1;dLc~.q0gyMj|4`ف-c} K'9r'4&{~^4Np v9l$h28uϩ-L2C5 EۥRsx9{"3#Ts#)w>?&~ON%CB= t2s$'wq o&x(6$& 6-hTٞQ+aZSU$GkqL xPI;ޜt(gcJNN"ʄ  J&ls$re,h 3١k"ϩe419l.*1LUړ.$I4bF KPMAGeBdb$h)@'J컥辍PhYn&2!KWNwC`V4=uML%-Rb|zZ`z{`s-o_ EpEFɲ$Rxq&NYƙ$35U3USSdTv۲,-,( $A$Hroq{]xݾ}~{O.Q[_L GQÑ wAh7>LyT*D ޕS8xxk\x.>o~W/y_)@"TI(v{?D}9:ۏ_ʬRF9X񱑍h͕wkdK/kg(yMjR(YM UW&4+y(|X\~h^v|' .̢A{z4cl^xKK# _ ŜoKWQ8Y*O]bxN.5nʷ^YmA,1Kog"ʔ {>Sigqv0[w. \8/gl=q]<]Q[ot{ !~ 8)V.Sf}?K[՟M}[<.zfm-Ǩ o1sWN:7Io~L4yít`Ϲgs0~sQn9hKk8{\;w )q5,pطY:[(h|վy/?^W^e>Ogo2qll\܏aCtS5ֱ_=@֨ Eï0}E*=Q&G{[̅,N_?Wv+~WWO?ϮÏS_VpO㶄/gy*>&4?z?%y87z>wi()*bbl$TU,߂淅nja)e 7Vю-l</x%)~ AtswMA+ x{ f _ާ[d)p1kK*tżҐܳm} t;N+G2}7 _P_3 rPfvAb&.A?4:U0f+_&_.cftLV:Po:z#{ EWPFFA Y7X+hZê@MrYZp\ V DbV{zt hhae`Y4]:Me}o|09S㏟1GOg>ݷG!dyͅZ TH/pVi'j{Ag|ѠӨ &c2Bc|VPM/.x 9%,WP2ʍ'senK\/|Ì~ui\,Pe-C{ nOq_kf`dL;A`,f~2[K /\ZWWxY87E,bQ+Wt5=ͪhl:Gq܉#wk sGa\BiJ[5(jClͬG>]j+|l~X9ucZ8\`bi}MhKef_g&iqSb\Vuu62@#(ҍaG/{|n1Fv X#a^x>T8x'QpNX 'ծ~N}_3|8s7wcTz9_qJ\;?"#e{u֗gж~&Or𑿎rJ9{w4^}s}>( rop{P'+l ze# .)q景r?? qٯsg~r Sb8o's?sїiV3o}k8Ǚ*[8N~#Mز$QKbh[yHbdp'}.:ڕв52-Mw(;~o>˱ogp+*kwQ_]xMa#5Xo5 >ϟة?։Q>>pa܂s_5&/O)fm*Z JD4 nWAqũy`݇0c<)N|nik2:> :SMß|'<y?}cC ݹeP6ê[&ᛯ 8 N3Ơ,<.-5ynn&XC)Wk].5qѓ9֢!>*}X1.[~S[߻];QA5Qb͜a̪o̺Ӭ\@/kxG̞չk`gPs/keH>(ء.32;}$fڔN  kg[b7a3Vs.v}C;n _`Q`[a3qЇz',]?ԓO4qs]<;|R1yG 5L4;^n9 q'0ϟgQaxmt}[vR<{[f8庞v\?x컜[(=Xc8_wؾ :]PW/\>$?{>k NJM_Iu/!]}ѿ&cI\8$rsж=㡘׽~K/KYGۅ{_|Yzƒ"{$( m1>c{RvQFa|AE}mlsTZ2GMO!c:\ MK F|aB6u:KwZs4:Ӛki-\PoÄߥfIĖc7.N:`~tqp47umw{z;J$# O'HAT`qW3J741M4CWfŌsqy/uQZaPXLJ 514Xm J &Fp8uy3MGG參\B+7]\VXE5,bb#@JȇBr1RBX؉si6}LJO͏_/moŅK60Vaz|k[:@J個euɥ/k.f^T%!*j07WyT=1Q+s{{ +|ϾβkQ(k͢mpEQo\'g.L *(AiUrn^>y,i3g9~ ZղwVi[2>ee篲cNz{ {V_RkR^YCͳ>9͕|5֛²rUXwNi4ė*VtpPyO6ד:ܕhDo8֐1䟠ASjѨ{'}zo׸v9]k2hElV0Ƨgx"E%zGw4ĦPg#WY_R`-a  oYԋW @幯~!4z֗3dSr\wb v2{8Cѥj'ٴfˬ2;|{'x<ɽ߬ӻeG(y')qcɧ5xgLZ{wr燸2$Fm+'YugU?lS*_~+ghY]xMDqFw}݇d.{1yEvq̋lyRii%gI^Jcq71- SӐwy)wkZiM'|r+{=uoμY7B^K acyz~zx=ܛٍ;ޕ F_A6ro@TmR7D_zX_Pm6uӳ(DY$iIY'6ԤuϚ`T R3 AOXWf6At,Z ߀5u_X:ǩy% úPﺕf^ KAOЈ+} 1Bٮc/3y /M8=։tU2/EQv=EjL MjK^zj=hN܅uF~ȋy;*4mĥnU_e%?~QBtSk$8EpUBCvQڢ~2y.39Ա(7-X8.uR]4֡N4^.⬰w{;MǷG G.iU֦:DzvUe.VzKU|.KWX{IZYIoDlƟ7kӻ⁙&F݉mk_Q_?g-qT/Q̗?Mʩ"J^y]w~rw?o`p$E4'CPEk6DO$o3GVz =۪ҵ\QqJhvKO4SDpë? <1񱼌 Zzs? vIfg˭GZv-&fU10?o305>5~q-%q:IL};o?#?+_-?^};w0FU(|b=2ƚ? 4h=bńASx>Ty!~aEazG*=cFhuOaTQS $f+`/ F 5(`O2Fup4CgEQJe*X<݅KAdԧϠh< >5hǐՠJ4U;=ȞYIp l3yZaRe W/ ӸM*+طh IDATm4w݇qK'qfpmUlp㙧@- vSP9Uej֤ZhA"N J\Weü m).X[I>أTGXX;sʸ'.M/09ƅ0?8j =V*V)|cQjV'W`Gm֙d~o,jEpkԘzUk6:10vkJ.0ExZ>+*K*e5vq$LbkLazXcq{XVf/1μdʓ1t?…#TBC麨4um{@%<9<AJ-3{8ݟgj_pTnY˦'hy;k,\=t;LYt-hEt ,O_b` (_ Ƕ]%,x?w|:`YvFm٘VŕQ] .X_?YrD383c[vci ՞A.sWtŒZliqlO.-?G;$&ʑ/Os,< ivzɅZ/6)kY/^/psveFei6܍xL>oNh"AU8P6]=bPhol,- 4kkwz5Zddʹ\0]t{߻=sV/'~ k#$ zpP^33}i 1|!XnvFc%QHlG/Vaŗ53fr_D+hc lJuXM]Uu/ ga;/=/F%Jmz,/X9 XEo;<@'OvًٍcK͑{w.^f}.j(e ZDkN7^egd/zd<)WkW BI9,Zty wD MݿZyQcQ;Do;Bx# #vXc˨-U $ va ]v/v6VtqJu\CumVC84*~`U:Ac?C4u*5SV<7-Y5ZU_&y:,`M7n*cm|U|i M&upW|47{%JSJ.Gw1sQ4mvnYcu WO-w0ꏩ-QnXtAS?2} poV{ܾ?Noߺ[xK sNr+|=(^ÿ'zuWco)Ur_`pbdkz(#L:%nǭt1N~r^ep>Sl=w*Mil#WRM>X\ %@Q‹O2.f/ ځѻj^|9J]4=}v '?RjָrcFS82Dq&n=o-;RT3p~ek5'kʞZ*Iʙ3ߖ",nI'3M<&xL溸sq(~Fd]GȽ :fIwʛ0ob粮?̷ɯt 7ÿQXm4n LJi;Zk,\6Uc9(_b*PG_[eٛ1`(a @GG1@x1Uq>_ SU5U."ʬ@P)T1zʃRۍXhMll2}bPphZH:#wQjq렕;Bw+ߧWMϡBPA\7(*cJvRi../{>1jU\=JYAE֥/v _$C(Q84(bGqY7%EPmD,M)DB_X)*TXs SB)E&:[ʋܺu#omK8[}|~5fi• S,yL5 JCTRw<%X1AO O:R8 !H/ohZ+Eu5 싎 U}02}Fwn.\|/{gJb>LΈ IEJnL摮-?M= gdxl{7sW^&c{8_}3sۿ5>8_!_W_՗*gQ>\9$gq'_GD?gƉ'# NO`N/Uan[疻>.>'Wp=#m?ϩ _r[-?aAkZbt <)ѻew}v>3_-;2A6rZ;kx#iu#,'20-< \ķ;BK  q?>O}-d|aߒ|?:#cy~8/=Um45<ǿC[6vv}ySQ-O6A$5Ce4utkPI%|dy ³qtLX򟎘*ѶT?jim}۳uQ}Z;n$q&?=FIlBfkSV#MŔM’n=i[I]E)ӛeӇ1)]O>A+$B-rڤEeIe!kSf\Tqm\,sY3F##fU(B3Jo~_G|>.W  dƭduI]w{^.?m:JS)~Ku'kQ"|jE50tzW1@SZB#V4Vaq@ P!e%1)<Hxh(࣭, 4>FX`FfUJgd(eQ -J)\)(p]jFKkMw miO=}m-60lgmhl:p 4 7a imp7>fUh%^ t[ddkBA (H?W+Xܼx {(vn)<Oĉgݷpw*K 38;Ufmn{PsʬO4([ nkQuN/n8TIXLhSTf(|'! W%v8pUGr<{Vߖt:#Y G?1i&Cu6W¢]9a9C!k}! ) MEk:4Oo/@(Rھ xs6!ߕ#Ec]-(dA|pɁ$-Z^n5iee~??-W3<,ɰm#"".wf4qOkY#I 7qˣzIʝ#j@QAcoaF@K @(b{(@gybsΦ\dzXK&yDEst^@1(N A([+7]cSMn!  Y,&NDNHqm"Y+WqEt5FZJV+ʄ/_켐j:Ė_+8J x3΅xqw5†kmeFUK(6,gh$D׷1Znt ;f?Ɒ R&ql..bDsvl@ONtVʒ_?e}H$#v@TX^\;ko6N&uN4x3yܠ3y7ӽމ=m 2_C b-ij. Kbv1nޭX@QNQ>3 `ZfGH$vE@p$:c4X\"m?JI`S.fvC;;Z)hVGOrm7HdSXcBK6t踜"` ʥ,Ɔ7,o ++| ݴ zbܵ\=}ۺƠZebeϝc%fy`jd[S+ui*-Fƛ1( 3BE .g^Ly:3X@ C-75E*9~}Lv2mH[rayl2n&x#:&N] ʫ2wAeԯl^oDmxǎzAQQ6?CP$Jވ^>#x ˛zв%K.U:MQ,V^*9ZM o׎m7S^KdLZgID(D;f7\qEnfL |"p1QM}NU3SF'ٛ {A| rwf qou^'FB=`NBZCIn DEC$V ].]X(+,_hD 9-m̪ʠ*rdb@K6BcJ@'J tU 9  5EP$>I@ Cy !?! 5bv~ _U: k"L@ -V>bPvpLhp|ߣU-"Lc*d4m |'jH[AEg%L\+aH_ǼPI@J0#emuzuƣ)%zBuϠԙSdp}ƻ\@U: vS1nƆq'+󬜻ƵKL/8ro+N _V Op>`- jUجQ]ۨQ~mvgFLaN>W.>NΥ+2L것}7턏V;DLxA`[?Ե)XQW ^+Λ$]zHن^1vAWB_ /6Mn?] օ°ډRAMe_r Li k%5XFkoeI\xri3c6oC2dyMHjJ46gi,U_[qKVq0gqQvN[)Y*>WQZKnvMSɅ]{.ߛc@16ɗ&},%b;?qx*W7ɠ 7 m4"^ZҎ(nzךg*Nz$-dkՔq>觍zsMkNЗ<;H(Hϫnc{c:rD{0fxiu;H.?7EqŰf7*MwBڇݻz8 mH gJ:Jn XdEh\pW9AN`"T$@#=%֖Q.)SӬ:YfWxպn\_/˸(B?.K\`Y@JeR0-RS5c_CEKMb$Ch.R?]lD KK6Y%}v*Ϣ$Ƅ=mʚۄY;teNAQoC\?jqZwʻ=wm;cyr$ IDAT,O37*-[[9cѤ[4/u ڸ<}EOIQ}|-sU3 ׽H(?Kҫ Ҧ2O/3T<˟U-]|_k\gI[RuZKGR}PKm&MtI!97q**M4zspD%<%Wa}nX4ݱ䭔3%zQra,ZTm~-L')[g_cb#X pN 'i߭swM'n6)SH̑m6\ tx Zؼa"3›ÀZݻڔ@V+i  6Ό$J$Pœ`J- 3)(_Q|@@{(S l bQ|MC]#QX SqB4 5JCRp]Zjh@cCHc y XT,P(0 PKk$HmÚ:[emm[ƘU=)(c$}gK'}aŷ \eЎF-.pvѝ#T=Es\Y'Loe~xe :MHiE28xBe6G`QӒ_`n֖7n|mnhU 睄b_7 xmXMhO6͕h[mmۢlZ$( zmD"/sn{P bY%E>x#eoh@/ %ŋBNmnfZLi$6 dAlY#ov*ek례dI9#CYB&#jI,8v|A6VNq"۾r_:-qFNw;l+m¥潬Ƹ̚ZD渎rлzW@'P, F_0$zoIR7R`O JD`0A% f)z iJBC*R_{Dc\I=)ס Q(q]hRTrX (o߉qxC`Z6m/4 FgŘ5cm1HBQ6DH>um,t@7V::#]Ӎ&(L ڣYtW'ٺoaVVѳ36<ʫS\v9;ž꺂':M| 4 Zj<`| oLS A)6ĄN>'Dj#dhN5 i&MTUfSa~wbaMæAvt']ζMxEƲa7}-ݻmOvR/?n) nd\gQ%iޢgd/TM(VӪL]&- qH$ga5Iq<+p-m_+--br5_x]nTAx봶:.*kyo9tږFH7׮s(M = v:Mo1"f_d!O%ͶQz$|=Vżg "4OC2A _o-b5Q76/$Pd'6SwO x*]IA-xQi1Ϋq桵D3X钥psQ>48-qX>Q~sJI,7 tipP1ղ)j HWی KۛZ뤸7yEUq`A 0*6$8ۢ16RsSbh]|2:bPB)S6TIzͥΗ$Rp'/*oiLX.Hz ڒ]7r8vv&\n.ɯx6zM]?K޼}[JcBe m+a <H[ba: I ;VrkߚmuШvY;Uyy?5^PbjN9Dd]L_C&ns+z(`$_Sr_\]St(OG[<6+nf2뚖kz Y?\64IM|!. V a.|L)*(t=ElÇ5XkffJq#j[p,:.^,&f|Ӥ)frt8nlN#O-6+WTw(*zgU*y5As@$琛s>^H5'&)/A[XYsۻ%S|k| dI.d-Wna]XK&W$+(! DWGV1 C)XN#* \xUxUw4J1B'U$e:K?$}aҌ2C1@ʰ*trE|A–: `>Щ#˖5X5O=ӧ/zI?mp|-`Q .AD b<:1( xaҡ@9iu3tZ-X,]4cǾ< *ǿP%ɂ/cf!Y">@bB.srV-cg2}oi{|BCǯ͛(ۯ[m_TQugy7 d6$yIUa"o 8e6%: n,ʞ*I4wjlC,oH>mqzE7,>Ũi&<(Peo* J(G [%76s9vflڏpΥ4+ @c`91"#pڿ.,)jp? WʌcA-%feAU4>*-J2ZibfHK2eIMn K&Y\lSt>qUK )eI4AHGJ ё*@TD2$G"D!׼ $W#WoVMP%>J#&>RI2Ŋ""Ԏx+~\EUԜ**zGv36\x=xhfhp慳W[ 3b%%\p53ڡNhfy v"Ȋx,v FJzGuq]Q ? ֌&РFEX `ǝnUr"#zVxϏsi.lkC}9?p*wQ[Mq<$} Ę;H[t| t:09E NQ_vbfhMß9+iwWskIM'Vʀd$)\UxpAxEayWȄ;"e?>} Ʀ7nضhe{ݾyUЋ w_;Gn86ⶵ}XP w62B#5#}W@W 0:bqlʎHW6e,K96p_:CKr*~ϱdOY*;Θٗily<;C"ŎY=Xk17ȗʫw&$b8-dCdVH\XKGH] QJ~SQl'Xt6Xde9qɟB{͗o泀}6VSςϦ͊)n )\<х .S`$LǦ} Y.=p"\"^sK̋ePxPb\Bc (MfOmK2X^| W@+EE*YY(H1D 3!QzB,.ET(Iˆlb\ o8pNxbUDG|3奰ʾ\kĸY9O;EBkͮ]9v8FF喛Qhq044T{XpbZ}wsJ}qmQŝ<3gپ};ׯK.4.vbv'd'Nۋdq.mtصk7NbddkE$W~ "töH;o]YC3jXv5ߗe֯_ghNOgnV^UJG _"o|5__g|ɸn\Cgх[rRI"_ISd{ l4{W~ /|sDHaCw2Ml4#mT!@>W:* =2C"]#%Mj5+B J78>1:I.R*RDv*?SicG|T)'VEL<ߠ H%4GNrp_)Zpa~#zQxBG!E.@v|TQAMi8Ae[hlW&KC; O|DpC̱sRU-.OPngpgE& VSD}™M?~nߴ ?ӗᇭ8x!>Ÿxb?Yӝ={gu]س}YJëVIݴۿl}oj8w,}}:l˲KZv$_#tO˂ BAKwNRđXyG! .o/'Es1ǥeh-!-3VVcop*~%> fOe!њЛf{;͊?|6R|S^&(/tI3;+OYhQv>sKX)Kwɔ}946`WuVLpsYƘIuLU_GRPy4q)e4ܹˆ=T\MZ>mT/Mʫ1n#>vhG RN oC\p/W:Pq|n/\G)rD7ya}t3Hr(N'@)M+ױ>}+WsjT >J+ :#&Hm?^Ru>iOFY8, IDATx, U*HNu3g(l LiN?7|/瞻y{ONW5]X|00G?7[o'B'Np;y ++:Z`ۊ|VkNms#_韜W\yi'NLU5l}~uI>y$}^t{=^~7UC=za*Y&oҌ2E Sb|0Z%Lgq\:kQdBY W ۺδ˃3{& aI=>m+ 3\[*,Wi\~ƛeM]]h ǿBאJ.@SR%ƍZᑜPӒ*xkU"H ?BEI,:06-$M($z7t)9K:B J.N[D7PQ9›x ]<@íVE!ʡhtEL@rOgB׈Vܹi y:KVl@)|^D+**7ւKu*mJ15MG!hҸpL;ǓS¡\@_pͺtCLOP6QF} r:tӈZSwug͏d,vN8k6&\fSO/8neX8lh15-JGjQT qA;9s 7pׯp ڽlƍGرclܸߞ _dӦkS,C> V"ey.<,-[_>я~o{ٻ|e{[x>%M:3at!=Vt|Ou.<4W 3|pK &X|hx9T(k yv? /.}Z2./>^i\I0Ei#U1m& ǒ'oc32q*=խ汯4Q RTKq8B3t~fCKWCu@s1qmͶױth;GxN @ěN @p4CNJZeCWaIq.:QN9W[/]T%YΞ/pt1683ڧ*h8qZ-Vo7Q?LuzTȢ[HoF6s!. ZN'w,ɛ!`=]cJ[21My(beGnٳg;v@D~_O>A>x{So6+_aj*t4|9s/|GgfffZ?>?fjr -0_?Sx]xh6yࡇ>G>sazS;Ǖ@M6vlm~wxb?NN_xbJ)~w~{O8/.?=Q o6)?|%nl_u2뇹UGf?ַ~w~q<==+|ۿKT|$muycIca}G!cq"s"ȟϤØ_e #BsUJ~7j?=^VY#ᶻw)%#,H O/a)W ץuC^s>݆bήx'`eQh&7=ޤ2#A:m3mquڵ^z6^GhbLV1~DZD_̍*͟8Nw-k|IY8z+˖-`]]ukײk./]ּZ{-ԧi6ٴiS?<<qy#GqChp/|bt:o2eAROl۶}YmV֬^+Wܹsh۶mAqs PS{8pO~Sg>z~ :|099K|gom1{3ǟ?>;n~=oljnLMرV|sk+Wο>}跹֚_f%Kcjx]wC?IҔA6=t0Joίگwma b3gP>> .yFVN7అϖXדp, b,9_a&eSYDtcM%0_qp%iS䒏UZ0WIU%K 6fwI°Nȹ`I+a:hwutVPDc9ƣb_Ci\ ʪ5Ze Q5GbOĊ;qC x-$ L93h庸򄊣 :}|7YrC;: *Q)Q)/淬 &@1=tNfKs(UˉJG-d5GQ w?3lݺ%1-w8xfGfx0iwkciaE8L fe˖233wGxil۶ɑBd|596߰a={O=zy{|'cct}$ݝwQr3ǎEx;M7\m[c``E1<Mt~(W3;q {{x2v<T8ȁyᝌhpo'yFGG3J'2qJ lYη-?1M{~ 9pg<6Q,W2@yy7XE#[Uh  oyGIR$4$F9M tc3+ͯܝ[%h_3\^JoP0/ІP'Jnj0,HR(6X7I܉*Cٓ F1/芎Ċqp:*ʥ\Jsꩧټ|}Ёג D8hG&wyذq>}P޽%h4^%Z :&7+$C!sn99v♗(R_е,tt8rk˕@<,w__qMXF]n[n泟w?۹\i|~NJti9 [l`߾ZX+Hѱ+KB`ɒ!z›֬YM^]|Gҗ^nko{mo7j*zuqAΞ=G;cǬJ2h6i6u&Ofҥ4 isٸ tQ֧ztb&\'sV6y(cYҔtmf0.稜L%N4vZsf(D )#*(QOUx$*v";n"u3_(PtsӞBc2-rY>M((7#dLa6$N&[`Fcb"_\|yj t^2零2F,RH$9)x"aEŊw(RoQ?[؈$+)Պ 7k p“Q L384HQDLv;2k "BXړxm[ Yנ>'lt-Ggd5D~+ s `(WuxYxO5aMN181EsBOcȡ̸W|GQo4Wd [mhTg!}4>ZDrF2 sZm3iKwO^5GGǹ䆰Ç_]z'?޲hpM;_Uv츑C355ō7t0?P_l׿-[Jo||lܰ'Ob Rlݺ~~v+?ֈeP ;;m"gg'?SO}[jxx# ^m`/^dͼ5WJOozu۶&__5~5}P3m6ݺu ==$sgϞ`ڵ> t0>1co+p1UzEqRHʔ U"dI7Whuz7'B`.6BvYMqaɔ5޹+[> C3a6v-^/{,4Yᕍ/9NFOMSY΢n^As"J1墝>f;Ar TF:Z*1=yfX68$_6#mVkc3ܱiWd٧Nf`p`bb ضmozq\IٸGpXLn o3aV^7S'Oef^Xb9&mQZ8>Ύ7244u]6o\)~FFFT*x Xr%~'g M9\8h?15fR̩7n%^-oIv8q$Vk6rJk/_^Μ9Æ >9k^}/Zk.^^:L_g|{!3emnZ٠ji+[_{5,Z̅q&^Y(V\`!Nɩd>LLLrJx9q$r oz mҭ TDxk^񙙙mo{+WbC3֧CCCsnfgMZ,ϊibfG9֛4Hc<+nefG݈ |k\'l?Sd |P,ٵ-y-w OLgL3[&Kf$k⺀`ư 3&Ijjq.fn.ȴi~<RG0LGw 4cy$EPOmm^={x3@`<o+]y#Z滙Fv3}?_Gu.3k@dp Js֦ߎq,K0"RGFx`O7wr\,2~n)#: }儾~BJJ WY8:BsUϡ8B{GYd nsV#q= t| a^du$p r>6m8!T(hDö Uȅ|蠙;HZ8ɏtN'@:Pԗo KN3.&FFwp%z s9(W/ >xgLtc9'|zXTWuG2cŧۮ{^9WᣏcP$ pq◓+><{N6sYΤW4έEEA}no&es:3HlS>B"Iz1r,0Lp[H! Wt"JjKHu|^2 ACU2wl  ڂo8YG|f/r8m8uDTH$|:.GGgvU9B#`|&M$redisH\L}3u寤0K;$t$횷q)-4鶃юp{պRRŠB|>GqyfsX WK=R9'%ufvd0iHIl: u!,:UF~M>+dM(csaktks)| ,9믹t'0J!S1n"?˔Hאַ{" $]ZD9O_䘷8In KdqiZ.BŕD&AdGr)բGآGɕ"K X)p@-^LСtv =сZRb,hv2hx:0=͢Z5 @Cuh 94ɎDEtpU!P_z:z] 5m d*+9wpq*uԢF6-eFUiVtQʐPd;bV"@%+$Mqf"FٹIM73Yt>RXGgd=[*^,q=:nUl!>1Alܰ$O-9lD IDATc_NOUBw"NJ% $<%m*`2[̬ɯJry LJdTJJP H=A6ۺfi/GSU>Md"lDaIG#ce.:YDgsD#e-"Ne~5hfB+E4ȯЍˍI*VDč!Ϫ9Iz>͘&_b!\x!Q0!LSTuBKݒ577?LXՎ>eKMKv~)qrLZ7&%)p_3!jk !sJKF0  W@/7\ʸ4*QH"iwlnfԿr'|%FV۽Tt(I,b̫cfk"諤*$>J&$U! !Qq݂NJŋ,m Ѵ[Ӝ:~mjМdrr111N'RިUji~+;(E]| >p\ReGh!p8L:>Mֱ՗W)jA)|GVk6ӻv~N0G1~`-86]PT{+j%y}?H,JқP̾([I:$4l N~-|`)gUE冯\27HEc|fxZլݘMO)4ESd`ժc޲yW֎%KdWf`UHF gA4 =񎬜KrV4]q˜;=vy.8+YʢL̜CIAep5:x˗0^&| B27e?'(ڔWuK ?,vC>i|_g9Svk.6ovڋbʁ/S͂ wY׷k/&Q5[s[ۆo~(cY|ye9sK<&,pT YWjʅ|-D`汥#nQRQ6CPF^e)lzg2slKQl`)SeNL]cYԒKӥ7b)L6m{6acvyK)XW\UĐ(J:k9#\"%U :n]R*6ĖZw1a!:eXEib%(olգ#Ey+% Jr@d<1E'i't- a>n\i|F>L49| [oL3('g$֫4=4z{"nXNJkYCCA3=ⅳg976ƅq\c\aK-'PNi_34u &'/v3-Z?3G'|$R9sVc]眥(aAX)S˰&0Y":1oW;#y쫛)V&MLl]/n0ȶ^ h\es >ϰt&T2\fz!zu|'yU[|K)g|N\l{N5щᬵO,=64,CrB;\2D%8lRVLKq2i~+1ʖ{a$\魨D s3 ̅ +]r| ˗)Ҡh(,B^L$]uw$8cd^"puR ?h'q, c8V^zLKE>d:qꌊֹ/gsrJIXY}iM$E+DϢ.nRFYG(ؒ(PqbHDžGiE:HКirAoLbFG>|;s o2M=ąHY*GQzTjU:j^֮]˪5Yn=KW,gVZkМbϞ'8snjO/n芇Kاn Tt4_})>_899ZkoELyU~@cԙ 0(ݦu!v_9[\`3_|2 ȑŠɶl8fVQRT̺ضf|YܥBK=3*2E~?yEm'YK4]֏<\Q\6y/@&WRL0܎L08D+e$IKfHW 3}(vM :CD&O(LбITRބ*G4r(zbGXUXը34U:$?Q|GG2r9Q">~=q2p]@J%:ŇNf)w o6{=aDCKYf^s-nMװ~rם; <[モ%KV5Z>3 'ϟ{K{ 6 ,c[ E S TT݈\:815 tKMye,x$PaH a)ch\*ZB(A*)˦ nzT~}5l~E#fat-g"Z ˗2%^1޵-FKm:il Jm=(oD7%/: Oqؚ A7:kȤPEbLƤ;jmf g!fޤxflZxG28s++eKn|E}=Wj镬 KǬgq[Xu02iH"JG!L(*2M;$,$L /ENRk*O:^|HhN`ҡ!k Qgnڬo+?(LkZ1ܱh ȎX^Bdׁmtg[ 52[+qf<dz%KY2NJ6eܪ-E5p6>iCʲd&)s{0ڥۜo7CMڨ߬ŚRFy , h]#ێϚ{TJ<7%z`C깝DF -"z(JJ%4A^׼K]&~cVN|d"$NceRd"jXz66AUQZNq%:#`  ? UGPB(+j55e*hN&!=\ |fSʑ\cfz#x^k7o`3$^ı:ufIG+v}^.oq FObK`elڲ[n7qt^+γb&:^LsAv>4`<&o)*,Ql_)G8S.HOfY:g9ЗeS?Y˖l!o0y!4`?bؘި=/h1ټRBWDG$vRBFķJTA[/ިn ٔI);8+ȼSهp7v*tl`Q楬9˳kCdR6ajsfwU ĢeyQ[ɀD1S<,:ʃ˧Nz,O-eR>h-fP&.)aa?]Iېg@axu[E:.idKυǿB+S M['*pRk0}d)u›X>:27zT"*ۊ%$r}(~B1ZTxx*<K*.+jV5,TB+ESqUJh%;|_GZG3Ӥ&|[n[vz ΏMp'oAuTO.0'ΌrGh ө3ZVB4~t18 "Pђ|u1^o+X#Z.мsa6zmխYdK)rY(`p4&*Vm{>l.[4{~ U%e*5嚒SЪ&Q% DQ-sp)WAOD2=ɱ3HIt{@Tdh@*u4DLdTq8*UPE 9ZuV+ .Pwu@!N?n9* Dέ|/+W/>EӇ #[…=?_| ๚mVs=7r]7j2zz =ÿw~pQ>Ѻ͏'y­߳C>]qT _3R&@N'< %*k0G暚L:ƜoQ ǜꄸD#(%@lBCv`BR vtMү%F*;$Kҹ$EK~Φ?Dʿ3eҼFaz,n3u+$QXܤMHZEycC$ee}J#3F[ƏeNY4vD;VRuh@"cQgUO \jnxE|[kڝ񜐦p=z͛%At59Xϻԫ-*5$ ›5x5:/~?߳ez7q 驻xBڕ+3g.{T'LM>=]W õy5.L;- *'@pJtt4S0-m,*O\qt@uPUUyo:Euאe>Œ#j2l>cу/˔$ 33ʥ;>3pv / Z޲s /+]HbMmKoe}{[IHfc @pX!l"?`A Pt QKꚧ7{9{\{̝s{Uͫw޹rʕk\@5!uLk ;d ,ScUZO3Z8:) y(A}1Q%j`Ҋ1cnHScT&07?S yiϧ#mg)L”Vdm9¹=c: Sl%ߖ !79̷,&Ju=`zD@9u!azYt,xb,8MA ?G xdaC[̸\af+Bi|0Bmo];G@pp.Og.1S1f\8(y''qQ ?3?Uvuf8vßIqsP7n6%m5KZr>z[3r4+9(, U㸻8rPʹ傃yQ?fwan(c[)/ps]ш%GnkWu8#8hͽbff/ 6 g7U9s8ݑ$ D@豐ns/ݝ N0GR=L;bVS"J̴?FhSA\B~Z-]vrFıy>[Uqu4AV-EIt#: .&yN~V;щ#K:m«<EDM#ZCm>>cd=,B'+8Gcd>FN{oIDp ›/}yv ΥOtlpݖNmR ̟ $-+iFwa:oVή5EJ3t?6: =6R< $aO6slhmЎ ~ۖ}$'AYn*%0CD)NB%_c1)"[Jn643YgK>=c[R]#j:J9v6 Y?gkh@3tv%-èz$!Yź{(&" /$y@QH55f6u0i4%alJEQO*UJ2)j4 WWu9SZSb)or4Fװy^I"Q'> "5LDC%lƄ0:݈70mI)IZ1E7L]:]cRWN$596Έ\*7@ Wr8>SkB=6J˼|tgh8NChlo6cZ/3m^L-d-̆6#;pC x8&͝"5}0v0-ozIgt>h3AڬwA^?|z50 u"f_d-^j\K=c?`ʪ`Ph={[` >prbƥ°()̺nP$xE1M0hk-6Ό>q=)u(5Oo<;?#ذљ 8pZXnZaKr!,Y÷}Cl7߾u[9_[hy4 ̶3*Fm'Lk,\×~BiYXB#:vEdjhuýUicU;nmܬphaz E{Ә#Y0TpF0(`ʺivpɝ[+TFsz1 wmIM'ȽbxQoVx>ոu%lHrnNsK]Bj9 $qLSRΖ},>MW 9;l{6؁dh4e&56|6:^c 2Czeߌ%Y.e|:2<Eq$ ,#]dh}?9D}ksV[}wJ67R o&C\]څs9ҔjLZ.Kk[mϻOȵqaco okyÐq;Q×ΓG B~0i &yHzQ/֙Q-|w4%CLS}7]Oyķi+_MX!iuz8Q4{s[me#Ce>x;򙂓{:hwe3?{A͠!wƛ]xic IKi%x0 u_1l/7ݕo*c84K%\* Y\РT|ZgZMƁŊ BxCj^L"@p^a |Ӽo?O~R~`y*{oq՝\>!1\q?4UųNanܺW>[}jLd;Cl" h;֍b|؊PG0pqQK.K 8j]UDUpZ7T 'RNr5w]Ūi8mkP(kPs x#F8( c1bh^ocS5KfĉmԱ4kVmklj2 H6Zq̮pr6S\ _W+\'YO2BCWsF l1ȫ@K vv6+\5Fܨ$)w9婩 P-ϝGdDKɓ  6۴9R΃Csc61;VX%j۰$hҀ|rƩͮT(-Ht:4 eO2 \֖nhę&#/0K;z?x^b z艰f[j8pP0gQ{:)ytp'϶rxM=na&|iZAHiLtYM:>Ljdj<EF#Nv xY2DcA2e_s3UGc/oTp:~ cKz' 5c"$q;Mއ~땯w9=F$tg.tuvDZzz!8Rf2b\KW. pt%˗fV9õٜ(dC̭Wr֮>೿ʪߔaaE) ̬0ya9Xzt'd5'prlgS|孷>õy??pǯ_`J;޽c~~ X߹__Gahjgq)p5~^}.c#`mFcD`G\%O^={xkUk Y㸾\plSx쟹yke͹]-n8O_R}S<)Rrj3R~‘j`e_F۳ײ'\~p:6>\$kX\H!>q~&uQޞv. 1;zk˔IIMc Jmܔˀ0iҜ񱏭%m˴KMVw:=en;}hJDù?:Kf$2-766:4eZ&%}_cqnE@#ٟ}mZqz y5޼խ03AMw-?FkQht%|{ջ@w$ɴӬ(ΗJseVr4>khCHA]e]֬ Ɓ6P( rh-ˢ`f{^-Fǭf)-X(4֦oPX7}d>_~֧,J˹Un|coqXȬx,/w5͹ē'C>p `PY9jGirɓ~਴ޖuz8^+cU)NZJ+u'{nêq4kLJF8fµ^γG,[*T sY;>ywꊷNWW5j#8ꈾ`FŵR:7XK`Y[7DvO`ܶX%y1"YU7-N1pN͊YQ&eL>wJnez%t3*uL~̴W ;!Q%i]u+[v?umېM}$ˇ- jyzȤtd<`:SMxt[/{S}`>&gPgNê G$9.̶}Yc/]qL G$>wypa-.c1@F"@c;c+253µb+eiqMs.΍Sc7tzS!\ E%#f1+)wn+_ygfoBʠ6T}[R.pk,%+6<~o&'Ƿp͊Bp!.`޽S?,?wGl),O=4~on9IAFF6J % W<~W f 3W;NkjsbUj,iᴪ8i5X@U0+ Ή㱃g.#kqWۛ 77 w;;'kUSU*i=0RX(<84 oU5@CۢnA h6TdDuqj,/ND6y6cYQ.G `{LR~קo&2+Kk)i!_ !n2;- ۼH ) &K` a* )K&V~58\dvJ"G y/)IhHh-]~uiZ 1g&tǮf!J3}o'>*RQwI* Xámvѿcsd\Mfk5Fha\r !b9ֱ3!͉]Isae3L9*1Qσ]]}Mw;=QÐO[  =Ftq_n3w1~/Q.(exËtmil.Ų0BB>sm>jQpP̌pP btiory0:(,3JQ Gq0+ Jcu`l_ޏ }hCkYJfPc}Uе) \12`|, ,sRUi1T:k2`Ee*K7rJf?~,?Q$Y Z7oҰ, ֩AبV9UiX9rZ8N=>ŏ˛BGGS ˎ? _G @NJr#-^ތ0r`"sK^X܎|&7[QEk¿?@_kiɖgI2{&%X G]` ١pI{cGC5B΅$ ͠TaI2;\ al[S'!$e =dF޽#M'BPqiTq޶ֱyИڶJ{;+ʯIz(OAJ{X{?A()w# :ggz} P?o}XTv)9Ufnq[?x#hvω=WYi\"Fl>bp%fP~5} #' 7q `` ",BYpuVp}6ZJqu6?ek50kiK9cXbUQEߔDвDmGK…Wy핯r7|2eY<u]cEUިA( E,,Uo5;RJ}Q5_z9Y|;]SRՍ˶3B,)m6α-X55'flظyL#m?;xO, 4(FaXpx os[uI|<*9ɀ MXOS:Sk2# 5 T 8Xċ IDATD[GD׶q0]51WXu-`n)!Zk3<}vBIAWYxs{-8|vc| }M Lj:6 _2 |9!K_-zkg`S2y8 ۽xR:Sc~mJ{YuuuesvDm?x nB#n2$w2GHFcNt7>5/3Fg6aj"f]4U_[IG'8m1,Q!IvezEIz@J"e_m={j(ɁG@RQz ?b!Ȋ`̔PaQGp4\\\80q\GQ Q1t^ ^A(YZa!x?BM{SZ(R +ul[9_HkЙ7=Ýww|f(,˃%?[k6SbjLXN9w۷oRU KSzWyfeK6qˡ?5Qij$J#v0Ea EW?F OcakXA6`-n"2ݒ~)lm9_YWPcruV(g|xα۴s {EE@vϑBͳu&>_tJFc'5&\S?W9~5._\xqqկ?}%wZXq3}FgM7F^_oricOu,PWw?cC0 eEZͿ cPp%T~I@c)Nǻ0T5q_U  [`P9[9#^s)OCZG$)LZ$Ģ겣ލ u[[[߯F)XP1xP)7~¤2o2⟝h@{NSo^YPUL[CZިq8.Ŝ/X9,,>bRkbuFT%67A$!Z>7ty ˾kۯp#?N% O__FtꪺPt? Z~/??Ms_!j# uU>C#s+` 2ɣYHj; .9q~w tZQ]W6"!O7i>$of'ԫخsEiäɡ5UaIihp%ew}}00yaY뒦wS6w m%c9N,&y3} 1qnLY83SPr[37c&nZj$S4lz@c8i8/vϣzvlnLHRz4@ü۴F?ǽqfp ?Eo#`Fdڣ@m0 k1>KÕlsai+El!F4+_|C0Zy)af so)(i0|pH(F @Uٸ)681,R0p>cx#h˞W^e>_bp :kڽJ NzNiiN[px2wO-Pk NedD-@T;oQ=oW;Gq 榝#.zA9Xae{I{n%Z]D5<=ͥffE5[ҨPj|̦icݚd~OM Ym,'4&{?¤X vxwܯͿW_/|NjݺHMdbǍov{;,>$2jk<=WhnnS/beܘdW|ۥnE/nq0(Ve6~\R;2-VG?e!O72N ;8n OmI=ȼ_ë%oJF@;ە\q:m(i _۹5r[_kz ӿ]e@Z.#N #G)°v A5ȇtrQXcnSȎ2R2i#xzXL̨LoG_V-l~e4p-ß,~ƞld@}A=KS2^}2˾)Y'%XnH|x;|ڋ M#P:g|XynVg$&Dx?iaZOo3^AǴ4ཧ- }Gp4\]diJJT QtƚN9?ócW>`%Ծ7-(BZ.سhRe`+mZ,J)Y5bnRU1Y.^lq/fE^SOSNǬW+fZy -ZCa8|q|\`S gYY2/Z3"O,_Gli Qo0:oi]pnvJ펙)UCnӖ߀mg%RyQ2vl'*ꯛ@i}ո/'xP.,caKpJKȭ;p|p0oPOO*GkC/c%Cv"7౏{ǿ|?11٠;tuy"_Z"e,@øHضiNc[P~cQA[cG?"/4 =~Ǜ~1X3\=H=$ip)=\X&#Zm2\LWox$lq 姌: 4%ƣc'?_{ ƅ3!}15$;.mƆȖ뼱4^r4Qz(F.Gã<ɸn mD;Iž=Tn%7=/8@@ږ1Z)|D;wVXp݋ׇ]"<χIb<aT=4&PvR+^v FxԌl{U_u!~H+}Nu%1%6 jif펙VG#:F!g8[Pq^w}w_Y[zkL)s(Uc&uKh_t~~x3Y'0ǻ]ojypxeyٜ9GD1oEa1{<4 /:ſ|rvW#|a \0>Pi2EW#:֍Xk6N[,,edcrk|FʶB#P)4l*VnӸ|_~~Cwt7gf-F-UpZȹX6G9# W߬XyM_c_֘ȋ?jhkid@Ҩ@|if7:WZ9jh(q--Ɉh mu^7mqcr󁃂dMYc׵F[Dx"A+-&(kNvFU3Tzhb) .}Ϗw^)A>bۈ`k/<(F4uɸv}kNm"Rn e\~r3h0"z$jɶgyH Mad:۪="(PjbKwh\vL v?uh4',!G1YL3<ίF8 ~2Ͽ>8{ѡ';(oOF"LI=5u"QciNj]1#Y#P(mϐѹA߃M|*|[P{#ؗ##\ |Œ s,l 1 NO-(C[Jq'p9) fR 3#F{}"jsiE5B!BEوPwgsN6g|1*ɽ~o~'.O]' Yo]q0X r«/c>~˚~Ӝr+. W`Fh4) w7TitTTXڒ9LYpx͚7kN݌ڀ3mCNWa~"MLg?o4a,J<)T WcT-tΓ0/,޷GUȀ =EFvnE;ʅ}ݢiܶμafECI-eN׶Ai^N*(28A L?miA=1wNJ׺}WJ`qV$mWFhNLEwLz ,\4 &#*I:*SI^E^a 8tIsb^^/2 >'ܿ+|{e;e=זCa 䄁dM;aJXH۾4Q (A~L&Xj,\#$;n9o1Iw Nk< 2aX٭aLx+Y#COLB@I0F|θ|< ze.an pqm1lQa ) kz%>?ϧyCEw͟k6KDTK,%(Y8,WWk8iӰjګE؈)[cְVqRW4UjyIUsTxIzNi R7sz/(~{>o3f5)`}WpEP꺡8rggQRW^yMt<:A;q7ǻDv=.* kt@ly"S >. oxCq ;Dz7 ,fs% X|!\)x/pv^ =1i{SGI`}Jo̊GFOwsk# />,"6֋_ =Y*y\820cMh:cZЈP'2jٱB!;nh ұ] 2[0P:I=rq2DHgq(ޭ-#oɁߞD|:'f _>?u[wf\1lLsH,p1PFtԃu$ѕ _O;\8W/,2"ieQ5[6 'VS>0m(!_Ft2fP=ZY1~D@¶=fb8*py|Yrh,si@j)Ōƒ {Oxze P͝;G>uW 5+'8, gUXD/mb1FUp*5zO  NR7:Ǫ8y5ђfp^9xl\ūH}\ŏз7߼[,o9SNWx;7=u %;^q/R[qp<7(Rzx*EY 4H{%g_⩌??fAZC74ehWj A5k?4Yh#ksmavA$c(r۵:fʢ`PW%//o65⏵aXHT5HL^u=o?Qv$h W?(Qo5|ṷ_xbִǭM߼Q6%/r%R׎Yk*k7=fhP' 3^nZUGݻțZF`qám\ m͛% \#ΩKUEpjpQjV Gj16Q{[11R>ޟi8j^8g3.`#̌2C8D957UYa7Ɲ{ $Mᒍd^I(4 0&7_W~/\p+/}Noѵ'x۾>8)? :M|] Eydf̌рcꎽJ&y_}#+I3oVdg=]#ITAnFAr?ҖזKp"]`;I(Q**":F.~ɾq`쁇}eB|PFB8D]5ARDzl {"Ob `vߍv;C.@0 Q߶dvW\yïJtuӖ`ZƚwC8:4Ԇw{34:l8ֿ9.6OT&=a-%NHvE2pHJ( vd pX'+21#O>A G:GcSpڹ=T{.H.3g<6CLᇳ?ɯAz$@E*d{>tjWRAi\/ߴ5Kc8WX.-o%( ZJ=nJiZa^w]ZܝTT*;o/}vu_WP7B7.!8cڸ6PiUs jTq Gt RP u a픦5x0ް`f0Em Y޼}̍'?gJʙ0Y / /w1_(hVU> 7_tXWx|? 穊{>!y[נhfܔkR{:I.tj!d *-=Q % 3 X3S*NŰX\aZ(VZ  7YmS&!k:W)*becYSVXPd8>]2>8(6Ot1NH&kޏ@+P"M-M*w__>?w)>qlYf}C-<=̬*~O`~{w]8VeI"#LkJ74 ۖ2A[E,Iy eBݻM+yٱ{SH B?ٮy1ڹlÛ[ S<ƫI #"_?4shҋߍgy(Y˻'TK٧鴵ۅ3kx b-FM(qqN B;欱D+h'2ƴבYL-X%f%eRP#8X6JF`TO9w6^4Un>ϼ8uZݥF #45͆5pa)T )gb,9ǽ\%P[Z({<ۨP)(fs;"4Fkx|Ɗ_~{?طrU^?ѡ݆ptfAׁw2n{7h @IQqLؚv84#O~C/dC")dYH#i %JIAFrTe{o7@̓'On'OHj1!+㛤玡? ~tm[ "IXڊŢ0b0(22D+pF'"S#1qm2l$洊K+A2Uk ,_kΏ:5u[s^Jǹ5Вuσ6/\zorx*d>ϙ8g?9Dŋ\ڢs}QIN2yž{s+ *wWA\9;(k)ն]9ɵRhW\۸ lR4[V2-_G+>[hɲ{޵)i97;B$Jc d-?|lY>m Vk5T'r۞ sGYZot 4,V78+Xc FkMXnی[ m-[UAiv\bk,i/];F ˥ Dqƍ[zܸ=={bJO+ײ",(P_`$x&{xsѾMH%aI>(҂ *%/} *P2r;/rO!z}1CsSi;iV&V8Qٔk~`ri&> R_l[AYSVkKf ,)r$ Zjlq3ldȁ+ "6?I]UtE g`vpH8 HG&K똋uEwKŘt[#/"|-&CAEq7}4[&D|W^%54 Nҥmmy*T~@j_9kMUj5<MRP:I^us5ϳ*n v>Fʩ:,+e+գlNj*9WҺP}0tVU8 "ʲ,߂9Z)(dԍ{jZm}=ӺBj<j0W~AD˂_;V<)inDrpwPPZOm εn!e?X,S]4q[G1|8@ųd79. 1->#PJD@YK kZ1Ԛa/aE -b TNAܪFB"R|)EN.2&Mw] vP ÊZs}{o9=A)|OI./86Vz29s,>-q_N]_è(Ɋ'3kU/GC6Lf1w&|կ7gc8Ǐoq8~|QZ:s^}9xzI!Ģ>Cn1$?W2 Vh(^ Xތ_pCA'N5ZG=b& v?h>J1/^*X^KE\-c&H{$aᥛs򉏑1~-o_$->~$8Ybr߹ fb;/QO[*RDMbX4՘5r0g־.-%nG:w|,6kUnNi"hFtl qpѭYQ8cs9v imdi~H . m$J(pG]f+^^V@ h2k25W7qUtU~jd`jwvQGc)G ʶYW̿-7ǃж~iv{R /y"hE@Y#ɶJh*A;\[HK7.KtNGg!\Tgie-ګG+\kmf>s]yrVRxsatgt2ˢm#"피;9 8T%"W^j9gNjJK)9.tEZ"tio8`vWuGkcMf;U[Ӭx#Yu uFC氯t!<֎ %{ ^uibN%ߓc&N[GQ/a04⚔A7F+_6UUʯĒ(K,vw]ODOo_873% DH4$2©ID-w~'N蹛/=`v@/#v(V2Ev8b8a{`_?1d,b5Α4#Jbʠ8'MT‰E$a??{lNogQbc爂3%omU$E^z(8UDjK{ɞ~M& F$NX_sekЮY<7ߛby/k>7~Oxpǽ,¹ݾ>ߘ@27r==͎ǹ? *WؔT|!Bd`s8OHK.D6W}XbbAj2MO""0w]LB}a Q7A$;aQCx<%DwGaQ JI] n ò`X67G KhA]5G )P u+i NsyJcIH3bq;rƠBI[' Q#%P~dˮU .B N[~$@SCmMqUpˑJ6,4/ Be)Uyg̽4DM!sǝoM^h]}+} kRा]chqluii[lAt5DtwVp${Vϱeu ѿDZg]-ki[[5+kvb[٦*Ui`?6(2\:zeƆPju67mIdȯ_e:g,qVLtNO7t+/\C|Jy ީ'R4O7]̻gYKw>gSmU_y훡emԢnCotpGE0{p+|wP3e*Va3(-"B%}**|)[T>P8VhX 0ЊAH"FгU!z>ϸp {oY 6 V0Hy雿sɳS/]& bgϱ /Q$b86AfSv|÷A7^-u/#!An %^/!3D)JnCxꋼM.o9yYJf4J{C6'q8[X,#Mmб4s}/!}c%OW_wxm` b1r_=UYK2*Êa&Ybw,= MFWmZ%lX_ !2 @$˕hsMz{J$)#͕_w8F(S.U  -H~mqf[͆8(,Ot[HpvM!˝˦Z)8+H%Jdhar f|jZ!-o eCdF{^/B~!Rٴ D b-<ͮ Hhph mɨ_*ӝv٨m:evit'v%|e?g ?M>U=}ZylVO-a)슢{ mA.o|~oqZr*`"bkaEE:w,&Jr7\d};"۷ZHl& %H4$tR",Hk̭!Ej/K CdS"/PY+p|zOµg0@_rˢ۷kc⵪ V!JaMF*KjBN(J;8Q`wQSܼ|͇/@aS-"l_56et+4#J1lB?1))c%S۽]s2?"`n8IZXABh K0Bb1bR8mkŚao1NR+l?~8g}̢ܲ(S k%_bU Mg$fF{Y[#6'yd6CYrwHP b$ \\xYgǙWPQL:=ϳ7p;́T5w9Jz肾|5v.t E>|UO` ñtR].$-ŅW^`h ~JVΚK|-}+fgb^8uVg MOSqKZ'uřo[G8$//j17{ h,|KPhfibm+3oUFNSنNN5 lk RP+AU8FM<8 em ! 4k UWJkqXYXKk+=N9pc7mB-U9ҽ|kEBCV/-8G@2ϜOumsͼUAR]~xJYb>pݪWߖ<5rU-5aRZ.3/-j6OjӊZ/遰l?*/[N{^Bp,IP*Eί)_ Ӓ[*Wtq q 0( %fXKUhmF,)ZYl 6ɝ#FuɯX",#S Sdaf$1 `($qɄ,W!I3䞍 -أg(1 fSfBCYA1Y@ȬBL٪*62A"LB!3)J[(qGc)XJ,Xcm^=` (atQh֔f}4BXb(2 <?s52fϹ/@/Wr ݢvS-ZXir8%ZWx-W47{U+_47->M> _k W j|Mu^bC4, '7]h7Z5Ip^h\KnaЌ ŕtoK/k+N]p]q*So#բC \Fs'Bi]X hD׿r _Ұ!^$ &VX y"͝SR 휱2L2CjXYRi5|7a-B@aG*$2a71G&anb ƪX'NL J+RI~ aDInT$_GKlƽûo$aЏO&d[FQ0&+ 7vwe:s%5UkOj1XkV$鱹k#ɵ=zi)YnUd.9ocl]GXa6b5s E$cUXBDJEA9r;?kWeo8x3!=20këru^zZ+z/Q)d,Zb*:FH7~{,^6˓#&a/MY֧ÅDE8-:hXp;ʬ<*&^mIh>%&%߬6vMZ PZ˄=|iQ~4۾<_.5e/T8q]+hZ|_z-פ)eO7`Fj6Og4aؐv;1J]eΰWr S:Tjl:iAUCmDM) UϥY[F`URzvrBYVm1& X<͑]ޖG;p7|#scrlTRmR;U=q,lUuakOqFZM\2>V@ټ{McH=m&z른uqP5a.1K2=ѩ]FnuO)Z H)/*i+!ъMŠŠ0801I12#:C"F3Haq^I`VBY4S4S ULMTIY7e:3ny 綈w^cw1`D1t=f}eL bc˜cv1޼q/9癧s2 65Hͧ\|x(ҌFkqϹS()ke&3Lgnߺŷ}p=;'u {Q,k;Crtȵ9NXWCz&a_C'}@fe š9ZzdIu}qkem'2ū?W7Lc*[Gm{CQD`lFV"W`Bir[z2;C~bl(UFO(Vl Y+'5wO P-ٽ[D UFYvH.QIg U3tU2PS*ty$/2ǺICJK6ww̪urMˢ\5Q`4Z3lO?Î`}Y/|tF=ʈ:Uruw(._  ͙-@M\m*aQ]m>˪K{ $)Ҋ~YC wX{(,[TtUgk-}I\©E7Mogjuj>h茖6s5WˆϡB)'Ijx[Oe.~YYeuRfi^oQtS^av]*a˼ a+N|^jZJZA,3:*CcXJb#Iiɟ7`-jf9iʡD@ *Ҭ $5U Lʢ|UfǭC)*"25.ݺ /ͅ .\ #9V@GGhvn35GMВxn \Nxڄ/H6יfzYx[W8OkcɝUW"cڷV[a`sAG I3LދG18y,xy)}ophE p- Jơq%], lgPe 4zm"$Y" =ʕ?%P$ŸVk6ݯGWdXK,buyz]qNѵMC26mZW2Ʒt8JW3w}=tmoX D6aI&.,jג|q>|]!T.7Qv)6MʢvMS_Al߀ŭk9=$_ iK#wm~vC[\.gbKdղUe4]!]KƁֹ(Tg]8\'H]߽[\PElKkK"O3gB<|]ZoFluI%˫eB}PV9JopVd%o["m.%]ώNXom w&J> é's0x 1#Ir*Z%DZWt~eF+KOΛQĚҌTD 6jL)LlardSX Hkb)M/f)8 S 9J g܍#3q0Oq(fz[ icǞ$ $KrӨ֊޹ucd2v6x{7-Ù3C|p .`3Lq}#?f>{$dc [gN9sYʜ qEqݔۊrt;B L寣ʤyJfx_?y'y ?~ɋ_}wo}+"IcP1k5FQss`݃ۜJp>#~@ |>؍`,1Ni>ԃ\_F٬R:DW%Van_evueL926%:E+)3U)Ņkd(@{z v2Dڮxrᩮ"#WmڼtMM!d7iqvAl2Nj{uyټE O!Ńb-3#;rw+PryLHѮbjp,Q/26VMxtVd5ZAԇJN*łm1hurxs٬]Nhxn3)jN&Pp6V/KZq5ljy#5pory !lOVṭX㧤[+7W %wCG@pGck.oK^J@XkH`G "P #+3fpz~Cb?˘UϐH)HFLe.Խ\y%X;ŕ˜^OX,IpeVa$f<íI^6`;4h-?K'ҊDđFkJa%t>ɘuš>ɄG7Vs?E?Co+L$Ξ9ɓ'~`0dc{4@҈1Qa=+:Rkq&d!-+#l 6ҧ?w{K?yɛWySzf %1G/P51Lo|`3DGBq+&w(Z {kBE)$0usƹo̒Y8ƢD Em!S8!2[o1y흗8a1oegKb0^V㫿+0..ڀ$! Wh$qB?{ d%HD@%{uw/4DpՕw@oUnʶDܐ%/粮4i릹~xV"NJIvŻ,6-m([+y\,PB~M9D?Eta9t@!6o8y W-$vmf~os֢M/|N_GkaUq9@- .5W.^%*;}wŃ|5@giXFBCۧV>Z42}:^ݶ]+Wcq-+Uѝ̵; AI!]D>JR[^1dJ,bvBZbe#NhŽ"5ZXB?ьb }mظY=;Fi KjSaj5*6׏oy&dl "6IJ7v1v~6w8~1Op1F>Q$D*B)5?~ Hg#Oa#7ZNtChL% N1pYs_+}!LNSqDb6Ktk'?k0! &b3k )(vէ GPa*fz(PZw$mԱ^ ]TlU˅ \@)0^l"7q,,RR)qڱɪfYRv_n~ZW>w߄XPp.2U92ܫ̉_5oRZwHl ;.]+.B\cHNz\{}>J9,9p_d׍ qe໸?<}G1$b=ѬG3s1rW/ǎ>$wa%=>H37&0Rf&t"Wqf<7^OkLo)Ifx]5?Y cIK锸2WBfrJa+-<#|8Z\rvS~q0Xzdl)geW&k}($`.!|1ͱƠcYt<'`MuEZKf <%- !K EsD;0#OL'7[z궄oWm*pSXT5-yǪƽ_-)Xj8k ͮ.,mtie6&|4izF^6]%o5BPw%~ѦN[ }z:p5>kghio5דj%-b:U6]eJ_i]kByh>~ rXsQEÇu' P2nT u0i[dزZEYDSNX]~4W|*hNjÚGʏ3)r:pc1oim3a= b! {H3/|[L^®Tr?Oi4E"6cb,SZ _)7{|_5N$c=1OXl%$l\41Wo[ְ6rӬ'M%OEbf\~>E_b[Xh!o\@+dkZ1bw{{{L&R}zI/w RAF$M$,֒e)<%M? lnfib%c8y>W^RL͝j-bkQJW%{~w='9’ _F19'FY T_g 3kԳ67ݩcVݼԶa|NYRU9typ5(oSUѐ#uByقq8>5ZUMڇ ] @gt$u-̿竭MY5!guL׮<.Pxc¥rVӐUMfwS]HDQεbh褿'X3,`Khv;:Um bb+~i%ؽYבnV57ˤ?(ө|=Oٯ8LViizreEo4>6u.n;jʲu:;N[+szJ(˱z7`+ֽGw5|8@e2eqwNHGBaeoNJd]wl!I9pv܋"&̬ed`E6Wz p 6_[W_e:\Pc~l~ d,lN53xo^N>J{Gc950L }R8Zqk^>YQuZ\(G)p,:6L Ƥd:p|x<[ $A0m"ONyk]>P+üA?Bé*NE;nG: ufg{ւt 뮠̟o 0"cM]. 7_s ֙'&arp@_`._ΙKqU@S?qO00Gl's!Uf=M ^2^g񿥿"C:7GמIbX1 / +(ɂL䎉Jqr d̙+l>G7#SEDZ3FDq[<}^SYVm0d%LA(7X#Im,dY1Ny5[s +HF, JG:d4[k JpB5{TQ1s%1dhƌc=y~W/ޠ/|f}}DآyL9/lˌ%A!)=Wn\#( _-b'˽)6g?x0B!,y|l.K WsFIs7'KC23{vi?~*0< "[%{:X7T=٭뢭Sew{}b MG_י{}Tg9 BBkrzE@+hd vvɻL E@ KCHᣴ.m]-pQ8HW@ָx~~:Gpt%t@: vzlGT)'haV!B(c,+-$ԚPKV(t\@k7:hAu!@ƧAOSkx$JGt:z",Jr|4,JПdRN Ida|~?A(QA YoSwS3kV ODBg6{BF,RK_zx0;7[o|=UBFTEJ*,ـnq7l do|`YUUl'l<&Td(YD~o) ȒѨjkbE8|`eeRH*a+=T24̝e}8,.GثZxg'¬F`ԥJdh1,ΈLn#{ͮFK(t/3J(p+LFTN[S[nOvk08MNYe8LbNdSaiS>\Y#vJC 4`Uuv(61%*UO܏fX6_\ɉ1;Ҳ|$El\ނ8d3Wѭ9H PÿRC)~{*i]Q+6rjX#]hCW y`K6m:켾+$/8ZID '"?*Jt"B(YsHB)PB0"zZ}ko>O}-qRius𗹾΋}^-N|*(nrt> ]{IBc'"gQ&p;Qyt0hQ< B?@"A=' QP)0DHTskH)$TQY5腱0 v7q}jSD5CQ_$ }(F-&EG?õVYS88d:.rRpx|^67.nCtijD!! FP"&D:5q32+],;H=A?s[$ P^׉WPZOWٜQlbg8vD*`9JjBCz[{+8KC4*f&^EaOm2x:n%4:*R$ &qVi| NbJ2> `]Tޔmg#/+oo0rLEɩd嵒pMӼnQ qaʹP96ݫT 7JqexXV .'diUdϭ!G<ĭ7mYx8s0nw+MԡB2tle¡Iy(}L^[%U^L%w#fC~S $*&#QWNUp_Ԅ <='9{ kā7@ox:sl5=½=5瘬v4ffK)xDdu*M(@bYKZ x/ l/zMt7z&#_?c~w;L\:0=?O4C\r3G%I^JeXw](BJ\7)NPIGt౵ܼ͛q LPyE1 C| BTocku76|i癘@Kch Jh$u0!8P5L=CVԄ=ACNh|'?ĺNkb%d?Q"}'dή-"tDD%iIH )W5Wnrqff7?.vZ9u:N{ 9-8:RSW[;t}ܐƉjWDI^H k$3YEc(;15"n^*) ֌7-( 'Q5>_1'{3^((-Q` vYYm(Z,̅~EjuD&yBӘC&}'NeDdq}7Rj9\g2ܲ OiI"9&ٿ*I/CᚐTSQw] UIf"QVɋ[{[tp%Jq܋:?l"_ gZܢĀ:U(土ܚmܗV;hyQL)IUװZ5WaGdYF9ֈO 1բlZ18!b9)miN xw` ,2pNa єVgI[W>#L0+h[+ר,ˌ>i͉ncr粒gZRoಲެSBn TŢ<Ԝ%d? +W} ۗه+y tNa ZH_ } tQȦ"RN N9J կ~Nl?ΩSX\\4jM'eq:Yz D|A əC D}_%(ҨPŜ*~]*J$R() +lmm1NqԢG y9 OAfbz: mn^K/.tWB@T?GFK^BHj^A?`x2ުxD+6ġ|/p`T8Z*Zse>Кt8sQ޻ȫO^gCף>Db:>@6,ʴ-F8>3S4;&ghomG}V%*jnnҚG:PD5l^;ߪK[?.aVxƭ*me㭢*c}{a@ qun/8k{Q4wpl\w;}3×z~|a˸V[ߥ:|2ʬ84rn!TS7P,31p+g\!FެޞJ'÷Ls,U`/ӋOOMxH_j3Gxzo7Ugoi.\`K_L6Z4sWj t}OJ!n I~ky|~8v}j.ȁjA٢3u]Μ9Ù3grmeɑ!lPԝh-QJ:%#2n>m|A$>(0T]*Z P>+W0 8s4= y뺑DϾkRf}5[CǕAL[oz5T4|ff~lnnrYryÍX$ B#s1 IDAT=|iGH@"$5Al58urt\~d-`O=?Cm{9.0XޣNA MWLN܎eN~(}K ȚL}n;o?>6)& 0:3N\]T}"(!J*?,7ΨgmnǴ : p5ƪS *jJңkhyn>'DWG 6 t7?f:FE /A/v-t&3IvPaoOÌV][x 21ByX m.Ɠ8m.n)S/e*ZؖXi%6E#x3[2,c=lZ'UuLXCϖ3̹?ʒD[2-YQmSZ 3,Fi6ȓil乛96c*fa71FZHZk8c.񹲿(sbc~8Ec.32)*)V{Z!]f!YhI/'Dmv7emo+L'km.6-yn5=@V(￉P0\QCQLBwVԅ DIfᅨ'6[,fл׫. `W >wӧVpQ(RL.4W2;+h'kޠK2ǏhS|n3wdIH&WvVw%@&2"L9D@jt;u @>BHD:;˱i6[u0Dip/2z%,V !"ŗSZGb0nѯFϦ8b2--rBoӪ {AFؠ6+e%NF9hrBi@I Wyqex;(sei̯5CjqzGY]Q/+mP\cm8m_WH|Y(n1mb-z&Y}>c,6MC%(9} os%P9HBd7Ĕg0q2IhR M.;Ǿ{ _4g#غ44Ӽ%ћ):P5 %o N.m? Mm/ 7xu40X]:5`/Y V`~5ux5QhGgn]O_ CD@R)R<#CM{z -Zuze{kPB+("gRl-( ?Q$6|,YQLJӇ }Pr#m2Rv޲VW'YXUZF (nyʿzW-'zO_¢Ԣe=r?S铌au=!Mb(v7_4u諒je|Kd,R 4{o.\P0尒YAXöwxiXa1( nCNÊy&o\%ΘpjQK6i!M`TOhB{E7^%sst=ne n/\HǛo2)uR[uVsmcBE$m^ mA9Ρ\\.T_ /6ơPrBg'Dg(% Kor{Nr+q*7uq`:;: &A+V$B_ q9J/z͋HW ,8_y,]ġcB Wd$أ %ﰽ'ye͏?tn <|T]]cOX580/_SZ̾}s;*6p]X e\;rX=TkL* knB!: P?uDLFhqqCVpD=PҊ-H":uܾcH7DKv_=SZ9q=MY{t&:>QƶD %lp'ޅH㚄t~ξg@JVITM p)t\flZkJLU|^b2ge1,~rrr*¥h)m!v,j6X@jlN7CCy0#,ƪ,JK_ذ!e *]sRUCU)oey3E_*!J϶{sPD|"^U% r0!ZDҕRW.˯X AAd>gB%0JJVi.Ҕ 49M>PaBEQ/LTc2Y % 8ewoNN~zB dIwqD-Ŕ!_IO(+c'Gv\r'O74u3q@y' om7(|v_Fᾝ૔io&Zm:$e*y,S -$ddRu?=@&n 0Ĥ4[s\kDJHuqֱR!B4W4q/pSo7Izp@p9Źޠy1z⠴C('ɕцYD\")Eȅ_F^xCxx~OGW87gf03) ܸt#g@kdl ɮfi'Z;p;XtǑgmY.M]l ^3} [넃G INq!n119M0q){0 k`:Q_;PAMld[E[6 R)s=ܞd5{A\?;/>@5$] k>-^j%Vxߤ^?Աy֯.@8!Vx&VjY,vW_⫯391)q\IAv5 @^44ZK$C4 JȞc0E.pJV)Q*Bdm|9 F "%Wџȵi#QaTcfo 7TiGw]~\h UN-k"ydeC6g#t%2r+"]JC2n:k 'IWL|Y<9JY\]'vHE/#6@+^ڂbE1>0<ĦcWBb 57GH&!+ٺ\?+LrnBkfӮ7lիq{ G9iεL+ b s*JOM!c_km|U[[B]RF08d ֺJ"F_5)fru1!.92J3"q,&iْCd=;K*i(\eQ|_ӟ,Q1-״pk|8ױl$H5cnv=F%l+'Ꙫ8o}X*}?S :~ނDOB"$ 5a]cIS-oѹ\ M?AYKߗzVѳ"2K^OS {^8RtOHC>\;.zN੓4FH4!B:CKptxGy/k;\!vŵ7 &j>;ݨDYX\:lvwԙ=q<8Pjc[!P|w󳘓&,PR4L"'<ΜNPma6Чtv_u(UOJĦeKQݟwޜ;ꊼ|X "׶NTInLĤ!pU,O懋u (;OI[wUy2JUv^^[Y%Ã=\('EW}7¨2l~oAϛúU)u"WF9|/ Onm 3eJw4sx aҹ:$ҔD8s$Pڢ[5Uj jGUzcLG=- 󇠼 Le"^ws-S2IDVz>O尸^|'THIoҜL8K2>R'*l*xgQуS$VcӠvW.,str%sl[",{v> ?~6jx#HZ#$t~I $*6BHh EKL4 `(A uhx|A&R<?P\]x5 O|pڕ+7lt%O_oB!~("3\zk79| ;8|;;t>I8onŹYzG〖N !.(i| ww#dӧ6Tf.u?n̰s9Ҥ Xר]vEM$! 8vt&Zm61O ,,,kkN>o!v`D8!qBFdBǿTgDJgs%.uxyg9~$wu*}qL C\vBY-GCU|=x*$$[)O)-e"}Tl$G꾄QEirVW*T%%TUfHv/q/w %/AuwIez'VB[7{߸ ۘ:J7jjn\< am*A~T4:u5/v{$8S]EEe- QƗ,Q\YV*6.Ox)CTSmA xeG^V򗰾m|YӍ/+8Bz.Z>ן55{=_?{=s')qE`oe:SZ<5o\HɓǙcbr\<|qyzmSq]25=ąP{Gk`0v{\z7j[m6WX9{c4@F~Bkut-ۣ7rME .룝.c]&ka6n!̷\r0SLMM#=Yk~4@Jl8&t'"LQ!K/4:M 1;LE&CCxdvnUBTYSjS9j\'J$5[ D%X0U1ngJֵ"ʾ|eZ K->΋r@P$9'}&#w]P֮El aDF+#槵I4em^pKZrO*~wJHhӴAtӝaسKmGze+EZ'!in˔M[^3pJ3HNrېX.\&6_vّ/9E ũU97?'Će@ LOzL 96jTr]9|;l?V[IzXRsm×.GHl̍>?)m:Bk)^r/lxˬGx͞6m(MD!L+YΔeħdee(kGɿm JI ! I6Ta#)[ Xs3Rl0T٣%1މEhziY̙Sw)H$};-Zos2hHGnI_Y;jmNd63åCYr#[UJR.ڝ&2fi{ʭP;m񿫟*oK%P*c 1*80u eG a,B0VZf&aqr\;3w Vw"'LkO♯?\:jqdd pDn6o>$k+waS ju~:Sn +D$/s rЉԄ?CMKHj5G W:h PS~.9)HM{ؙXqzx6Wǭ7*/gXY^H IDATYa>l6k,XBkz H#lll@)3nG?0N_=GdA+a*T(ߵh GV#ns~.>އS|/s_Ğ?EiRl;t8R0?5ɥWtOށyc973|?['%mߧJ< m\1F*g4?qlX"/h]!zN\ @_ N!md &C{^yo1鏲 G  YË5K!q\M)zBpk{S'p4ɐb#tz-lK+l}lvO>*gXO4!nќD#F{@8zGpci!Eȍ]݇Ss ,_ɕ?pL{u-pط[s| W\AJ0z%L\.a/!BGΏEb9ӸBҩ7 BPl3=E#ؾJoc~aν|ݫkx~i&:qYm69<=ųO>EZ jZ&rk.~C|Cg LmZ^{Cy<'ߏt=!-P}0Y }Vnr:Vɱ#Ǹp*t:DdJsݖZijQd N'o"+ET\".%4q52ce_B>{*x<~?{Hᑿ_qu\u2S.=O_T^e^2nj@jsfq(Jmvfb^uJBr]ʬm).o*}Zm++:O[›Lj ׬K#um<ˮ)$0YzZ JM_3VZaq_0w:m[1U;i9vM`RYB;N)uL wMX"Y,n*UEX Jɜ51u>塄yUZ(Q7ÖR':Mp:@e" wZ(W]՜UNr&srTۦ9-g&{z< <^JNfo5([m X\ZCۚc%I'#Mg8}6foKdܼYۙC_4.!jGGsH@w -7¬MJ}i'[rHF7,q{-[5B0J1aa\<„3e( >+7,ǥ'Lw6h-s,o]akuuCwgQn\} '|(Bi͋7Pv݀vxt[ga!= ȇh<RA)Tihk- I9K43|K,\ hmlpAt0Xsl9s<$nߧU?7xfA?zPzl5J;}ۻVY7˫g_dum{Sgde}gC t$t%).Jh]RB8Hs3GHZ fwGC8y8\߼ɳ/;8JՐ;l>b[IS |ſ~O?dfnzхsXABs⷟-6765 r$FO<V;5)v-juOq˅˗| pdui<-;'Ԥ`3%Q6?2YQʟRh[9Ti b"~|y+9;Og~: 8g1LkѬjaNQ,_|X:]VQDo}9#5SD e!XQ#'U R%DPDQnV|$]#\mAŲacXuQʃ-vEn<|UmnUnn,[aVPu?n͇ǒ?Y{X %L_5&%#C£<:yt A0J4b 1hmH5R9*wrJ@s4ekB^WoBL\Tbl%!2ٵ|ލߦQ[faU,֡ r\6F9YZ2S6]WʨA@ъvAxG d2":9({%XoCT3S (!bW ^!Wl]Y΀}L.#G?PBx6oiݨK]Wk-zo& "BBINlq]G'3xY T0` 5zgF#'!'jV)j5:-GRHGJ=P͍HCs )n4J =&y;O"$Goc@Kx$[&Tae{H`ĕ•RHT8@Cj]w#? WY8p&AW5rLu:G?;`jv BHck-!`:z);3L4Djhd#Etwp">R!ƵkLv:h! -VY罳ӬK=z45\A A&̶ٕʋ?W+hW~3dDwuWW{>w&ǣa,ET&{`b_%Ȋ+하r+4rx,R3+hDv>!ER]KHOoO5Sj#}*ȷMGQ غVwo5QWF)GTJY2Kdj b'Crͯ!ΰ2 ѿ\{21b_\i^C ΏLXE`ҪFG~3?XYeVoy,-GQbUn29./2 uBG1O&'J *'ym,OI{X:.ES] SPDbmBW^'{ .>f8qգo|ƍqCcgVRES+T,mOnbpב\ SMp[ ZXŴ or %1aPq#Ƶ7YX<@xh$'=7Z dO`ayZ29a/%rryRuw6܀BZ2_/38ԁ#L8Sҳ3'SzTcKxGNpӇghŅ'' ۛx&9=g r5E.=5_Icj}k4y9˯ RsY^ͯ|1c pݏOAK{=x7_yz]⡟%S!g,R}>+78{o?77E=e6^2}(7q<7Uޛ[r\}^}}037H䐒d$[XvN;_0Ɋ۱˱"V"KbЦHJ``̛w[Uu}w@9ZN:uԩU׹³ts<[+C6^c'yC?{z4ܺaĞ/J0uS>GߪN竷;N\BG[pܛPtޫi+,ڡ _}mz;uLLWyR Q8G-O{tRH%YkQ`9- Qq Aa'lh܅3`iwTovuXg50z`]djS}Q6 .<:PRb|J[a'_;ўE.jd|0E;01e e},g2ՐQmyQغL)9DU5 -y#Y} >~i^ K 4` քj!SiQ٫z\|ޫ*c,>6?nnL2t?!ڃ(ڪn;atwm5j9nM#"/MLW`8ei8^j\:\9uyzЎǤQ"hdl_={/NZB"! "t2"+ gg|#w@bIV.;p8=N (E:&sDEb Bi%Vw Hg,wf8'Y@1a dsQV0V!5::3mvwwv2PgtPDH؞ةS-uB;$8AQÃ>3>#GΑjBFj7Ot鑪!=BHU䪵S-rnk[h3~c ~{ -D'BQ$H-*(5IZYp%V_3sg"Èξ>N{_O}_?9_oI!D Ȏi՚!cD ǤZ$ " if9tZk\Hf߱DQv $5OmgGƅZUZ{O}@]Oʛi!ۄ;8;y`5fbw'ZTw]Εg>{~'9||_SǬ; wY:yD" S\;wc1J?nBZnCr+>ſ~}瓿3_YK˲{J,藎?)V}ʹzyV?˟8?Cg~NMş]|~^g0"§-U\UTx㫲T)5b |'kV_|vw5U=7 i`_O̯G[S/LS3O;Fx,3Xv݅y쎔iFشLa2oh/_/7nxaYĘ5{xl[DijKeڸ c^{ϲUnN?22>WM"ߪɽ|'?7n,Y FE\,'E~E R؊9<7Ǿ.Bh1ۃ1"ۃ!D2 c^$]-vX8HȀ8!BP(X[eOs+ 1)ȏ4 $|/~/:* IDATx׷IeBdL % ٿ8ˁǤc @!=L'6vBlo\jz>4:sSЙeۥ J )JiJJ4h!OpK,JA'ٮ -R찵0pCCR 1 HѤ uiqHZʀ}s˜;EyK t JGR4ZK)J]9\>ٸ=gʵ6 )Ta/->'Izv1٤*Tv;;O@ #"xxgᵗ/ЂcOrQ֯;o'[.. SkXc>쳘;!,uJ *< o-˧ZGۛVZy,.g4Mܿ߳t {z8r%N_7eR!A|JBi>t}lD"쮯p]5A?(I4 ([V=[WWß'$_Zo݌2e+R"3saH/|Ӯ?+V*1'Of`맓Ť=zoF~uٲd/ߤ0y9Xk^4M+?))W6Kwg˨v FšhqN|;]'g{EkТr 5ReSJ`7Kl C4鍆|η1׎ tǡkbaaML)V( (hbIFC1Yt:$MH7hGtmf:ZA+P& B- 5^*Anw Bv{tp֨4EѰOok`XfPq(IѹlTc$y0E[]--u/)Wdvn ): ݘcዏIm [(Dw՗9|apgf) ^+4ϰx$k}HE-5o2Cƅz0nGh?l_ ڥW1xf9M߂= aƷb,̗=<6esodګ/[>3j]efh_5|;?҉ljw;PV;3z?L9F냙A'8tu2N*eXtwqǻ  :![K#֊Kp^~{YkĆ>ʓ'NRس4ȭɘa&xaׅ:.ǖBX9 uNEnpk*X598*#JI8ț"駧 Th1_:_}5Mv>ow`CK{1X>:8sQW26|_w?iF=\]n/ʗbiq&(1ۚM01a̟ӎ W1LݾDҐFSj0d/E5ޚǢnq#P'ݯN='ya( ELcM =Bu`Z-6{l%)Jg(-!H0NM:LlvFD3'u*z!I:b ^ &yݧy7} ~QBLG:A2NfJ6WVVÏ~軉ׂ@H-D N"/D"3.A" -V_ 6-$dnn-֯]cfHG`bC{QivKȔjdև"%#Afm{ 5;&Mmd4d4 =~-BZY8/6HF'$iQ=f3P \M>"7̳Sn(/<ǙSghE1J'ʹiϴyDZ%pJ!f8a瑣UDfB"DːqB&\2W/Ü;w'aɥKq (ZגJwK;wBt:$[NЅ|TfÝLcoe6gbO|m% [\˸wK頵iyk5,Amoo h%*ū4W{JR?+3dYZP)la鸇vjcc+^jKXZ3753cL [+gҠ/ܧ8kQU_3;8E@_3SLwq(KCJk8 Q)O6!ȏVtdJt0qjhP8v]rtqW;gwwpdGaP ctOyن 2](a٨:%*7 l&exl ׷WkCS-'=SDfG)9q0Kث> eRqEߘ4ˀoZ 2 *lj÷FQ5eЦ sZ^6#)TeN1[G)u#ٰ ٞ!ųː9v;F:0pGl Ę/J*ߒ?!ʙAOֻ vLڡX]YW͸& iō`j8~=-mE;1e~SϽpz@忡M BZA:P w5"J-ڇv9+=b5W7n}gpWWvS|Olߠ&$CMa>{3K)5*Y&nRB ADmvihprq]6 )(Et M @0dc*GZdcT~6M!%Z.V23\(H1h``8d4c ˇ2n[ ԄiCCfݙօF=<6hifE)BɾeΞ9˓_$"-8RQZ䫂 0T|ơ)jk.D:9_mL=F#[ЭJ]qjϞ3rcq=/%&S76$ _S&n$nN/Є=%~)qNGڑMIx6-çk F,CiZ׽0tngoeɅ2MѧA/J_ {ӧ._h~2ƹrG{֚7ܢF ieY^~,+)RjYE9Z_-PR+nD: HE$L5ۯ2w`~_g4su:`n$C6_YA:wR(1.! BҊCcͯ~I,t H$1DvG t:Qt9qֶIb]%&@ T)qG2`c{+/0o?dGڤ$uShsk'٭aAsH Fvmo3H;nJlt:AFR CjmU(N (Vo~(BN)3BP|샵MkېhD"bI Bf$̈`@0FJY~_& F #*6XT<6>Kte P 4%'J!biyu8_scOӬD^FZK ɸi=bIZYN>M?_2˧f<}5μm Y:qqw[;@wyɵ ʟeqv8|ew#P4FjW?]OGe]{?BftI owsw}+[Sݷ#wsOp鋟A2Gz 'eY_c'A5Q4)>a3.!\J꫹TLgN,ێenB%fU :LR nVmhR}i7SvrL77M󺍝pR QËê)Nj9t=nnn}nv/L o O}›&O75迗Q+VlӭozC_ts[7#L7}5M!}dHyھE3Is^+|%64&_u<$q JoVz̥kXg_3)BE@tvDB[Ww]%"βŅ/9(˘O="gb Cve:C<Ǿ.Nz)+?sBA뒞y`NZJG(.3pp$9 t)ڄ2"))ހٹ.Kw+// QLH-0 S I2?:(]F>.-֤p:qK!#4* ʶjE*DdF9N4%h9* ("K3(BjX]"B6_LRZAvЉfyfhO"$J/>;=MRALAnӛטٺλr?a{;u !HF}Dߏ #q5TmoCT9+g1VobimɪЋu~ [>9{,6.]`핗X{2 ۾l^~ ff_`9ܸ.=*MVUBw/@>]]x`)N=|qvnpOxΜ(NMcS=$á[֖vw{IRØRW7@kҷܱi9Tm-cjLE.QQ̷lV}<8Gjْڎ K>V 㽾;*KYmRYtH˺th]p&U]+I4T:p<#e/cʷrQ5%W{Ri2]y̩OX6ޮ^.} zB^>&j.n9AtU^Wmڄg0YŴ~GeY>evyދ>e>a'XЋ(SS  z`]+9u Ua;aBL4Bm0zDu[Ԅٷ(Fχ_Rf-$0'u~ݮ(uZŵ^v׷ ?y˦fJRZ'p:G!ܢF<4u0&TE%t24I8R*"s+)R PxLoBA"P }nz1]VsOXnwуdIK눍]Bf\ vKeU(d3]u?Iko*~Ơ3T&l[H dgm'_}m,ƌh#K+A/vUA0*iJ'!I8rp?;+W-.?qJAosn'FRa} Z+d:fъ#'QqZC2N:?>%R d7NZj4ODYbӦT6jވ/wT:B A5:hm\֊ aE5孈 @$SV_"wWPPz勼sDloXN.!~8xxGH˅ !2@.m 7LdMnfid0iBҚc1w8h|+7iug;xwއ֊ nqw}+?E5;[3];w/?y7~gb J)fC؃WhLi h+;xc>a8RR[_勿K\|S\_D2[ ux?p_+h̲tw}w@"WoyQj]a9C񭓯(f\gbU]S3Ѷ㭺M+pFβ|7'q*v9)JSA f5͆IB-ݐ-awIPh?a4Yͽ|2N9UѰ qWUnAMߞDZ\ y~3l?4I?d$i1g3^6Ɵ&8oTFOLߣ4lJ=zO_F5F 7\ ƻhRE=cCrf䒈'@ l'P@Z d8$QslGlo1+& IDAT-Đ#gWUjF h6gOr2[|#9^lq'5GTJҸM|6>%'xg8΁PG!y_0&H#)y=p+$a[r4IHӔ$Fv$g8}n;:7Z1ے\Do=; òt1ɠ$! 8'ɨ? C(|hM:Aːp8mu~&h;Hvn(z0.)"J0 PvJKv݅9Nz# n $)kXXHHMHuJ4sMʨֵ+]z+M^Zoġ,`m d8bBl*U}U˿1M wmW<~ԏ5a> )Fx?⇰5Nʜq[?8ǃ?2{Cu ;x1$jy?#ZG~иQãGq']>¹yRuiqP^kت7Mjio{s{7c1[xA@jۻ7 ;ԓLaSQ! li.y|:\ p|+pogW߸ф^u1ݽXiQ썦7w7mijM7>)/Vf%@"?"e^X03 QP(vTWNr fz3GROh<GD«׮ {C)p+o~ Cu&Qб8|gs?{BJFl"![W&8t=gIkXD 5ΞJq-T_l0iX@_QM*, FRQI-[un01A6ɮڎFXɴZhݤ^FuUoW -zr] [TdSev+#`#_V[[Pæń#vh)3R/xm2pk *pbϘì;/fF[,^uq,xe~PJya0 }[ aO3k$8S4?j>-V"ԔK&RkN݄V_{+%C*ԏHpRvQ1Nմ23qoH+Y,xwoS*V2) W]WYcޱ38֖b9o9ဿ?}exNԜm:wdgu`At> 굸,ǑgիE)`i2q>>yr~l6_i N}(!ָsW>eI6L3 [T* gSd]ST1w׀7O!SlT  ̟%ʌAa i/-,u9yK_Y=VR`S4bQ31WwƗ^2Bkγ̾T3x}x" P" DBH $g]es") * Z 2Bĕ/16Ok'!&v HUFwz[ _zu.^ Ns b&ꐌ`W}v{;@*Btgf=R*8+GFl wlmm8MP̩3!K̵g[ÆCr*DKmE$q]U#ٍk>C" @i(HCY(&3^eGPǏ0lEH% t I2}Eh̼C wR\:GC8bmhd"4"l3s /ϳaI6٧FÔ#s3ij?hH/t :{Q£x5A'O!j}pmhߑu2faz/.ufm .~㌦NCF` vUTΕD)q3B UjCG}QR-_FlL6_ Oz5, :88[ 8YxI6GpdG Mc F+LL~|(gXh['7W%a1(i+mG-]ۿ4?,u&pÚ${ rxMs##Y[ ǀjXֽ_]>L:兟{ҡc13H77GO&\ +ШximQcoQH~:玅d;י`%FOdus]|0YO̡V/>5#V5|'5,b mrܽnVŗzբ[WVOlؗV#< ZЙ%43u틪,Q\<$DuHVphVњ/֚sk\Y{zQTO-+bʦoL[87-ZsAZ}-|5EF/g62R (2uThppqyŻEʘƘ*>fʏ$%.Vm5%#49:D;sBbƖѹnN%-[˚qvhyŪC7KC#r-9O6`me0ho9w<[vm5fѶ 7bVI?0] /SZ:]1W3DsSוe* LX,g0fJ!rH6U- oM._dyQep,Iėw'bO͹;zWs[m?uNXRXmINh @tBqqxch (׈IseqWl,5BwNzɶTRIA( $*Sun q \iː'OqQDѽ]v'.3X'БR ܠd@nt?|F9 V(!Mx֧9smSiZh(=Ҽv~?h]#&)#W T`ZZp\}y%1>u =ץ22$R' s3ڭ cHֹfD(8FDY̐N!A-AD j4fkUk&#5/]L>Z"ѡb2O_,)JϿR D+`adNz0DhM 4 3|R@ 5DJ :a['-Vwq>;[6?6/> ^CʌH9)~y`:_~}@QDkQOh>eK spLnUGÄ/9 ԜJ])&02ƠL w$vp3„swjcJpPӭ*XX/4]jbwS1uF$_a<s);[ rll,tT -Di#- @S^5s#P>*%4\gG;.[cܰB F&/\ 2xnk,Hr@A*Ɏm A$BJQj8Hy5^1<{>Gcfsc>hL2Y:N&8lIEk"!h$Zd;s0&$I d80Qj* $С19 ((Q%Z#2oKq q D,Rf$%N+]q * 2 rA+?JЅǙ dBRw>q.[xmt>w^Si]}N&Dkַ{\x_~v#N<GȄ&CXs'Xk<^r(J+V6Oֹ >CJp#j \&D P uufK]e9C4)JPfC:`7LU-oYٲn( =“gzBo`6`ztMGؚvq fۧ{>7+&)$X7;^&35=S='Fuíi?͖Zmيtl?x*ѐ/ϝs>ܞ:Ռӄ4) Hh!DvL,A4Rjf&n~Ks,/-+|뤂a$e^pb}uLI! )}K:1~ϭ y.71B vrKׇ˜9%/_aݥ;Ds%*0 QЍڥP#$E|xu/s Q(VPi8'MR4vqѸaHĭA@Ǥ T6R0;>&F(SA ȜJR0F  `HxTҙ r;h!Zd5b YطBo+2h"p۾]a;6GIZaЊ@Jb ǡy}<';J{aϽ<^w'AK_W 9Ufت[@Λ{1ÿ}a֌n"jQ^(z(>88{1.o^΅ռQ.'qՕ%=TCfP׌L|3uGvp( Rol7N#~vz>005P^*[m{(.|a* ~_.l:FQ)RwlyJ( =iXm0բkB-Mq3*Ώ^juk3Zډ)Fn$eC9 s\s`` 眎!Opn֓M}`J(wDEQ_cQ.rpKқ}/s@x4ɂr$uBk>׽16KC<96=ХSB7v~sBҕ,0P*)LPm,My*Gv&M-@ 2m0ty˜AUto 'gG>>ĬrnsҫRf[4rj iF'*_{nQ#P'x_> !kgMe&V\*]_籪f@6T=҅']4{`yEa>ou*$Z!-ir|"hjWսƯvę˯ҾIÈJ, "&h+Ek{ѵ˨m8шyƕmZ ™#'3g2\ $i0LƬ]nsxqRR瓐VA4ǟƘ(Ql]3EIA(b0B!J|>y.o[**: (f(zmb@ (0 5;A8q8teٵW|;IALHEjgT#ڴQ1Z+\Y;DqF S*)s(BtǼl#F4AQnFJj`.~a7ĚVhF$feLLTH ,-J"Wy/# C#";f' i JAjw|ݻwɶn˖{6L'HH @B % !nlz77{%٪Vz{";<}Vwwʙ3gڙ3g (.&09 @ ybp#wPR=e*#|8JyIhn]H<žT_CC5'$){4L24 t-{Ǽe\3|IT=LА QD ܋CPP*hB1inqdĉ**$IxIN6F `w盧!9 `}fͣR~ֹ  B sكU/u~}HOIT[$)FyǦD; !%0G9j|Y,DQj}57p c^ۻ !$/U`l|uZ2sx)3=ߑ? G*),-cW3x p(:;v|,bʙا>Ӊ8n۝;=ڵ_rVz&[ $ٜ~+6c?Wli%5Gg?%%)G6G̟79m۾u7QW@BΞ9~˴Yl N_SrD<\\:2 pk|?%/ i{1}<&O9&MF †_P(e$}L<f%9n>*m/o@QTs6~3'*y2m\&io=L3y3!1uY?^&"S2ie:OrʘW= KƎUWn*^zl;N.>?a쳙4s~B<)^) nhŤj1Bڱom pj%BN>Ux穾I'miwDsd䑑P(TCgfUV~G[FSSyn2ss09))&Dۖ"@C ן+)-4GxTBFt RȬc47(U @KVplr1vTZ7a J 0N6ݴS@O ?Ȍ QTޒ>%Ĉ2#6!kg#oKϿ"D;U49߼ǂyXɖ}gIزhӍCP,A_0nۊh眯/):H6ۿ=G힝\EaRά>hi [<>Q+Dc=~{N ݞ Qw'|rܾYy1 6/a%Wp_a5<}Ϲߠ!`k/w}3('4>-|S5UxwVNKS7y)rMéS/s7G_8.[>6oŴI,Wřsg/N?z9x, '9v H&CYYw?xs+7p :QZZõ@RNM}]FbG@^-$;KDo}Ĺ,s4r )26  M\Cu t3vAT7@d"@(B:!TB 4<^9dp?~920<=vr$=@Ơ]^]lZs)ՃBF!=*#3|XtJھ=M tʼcK픂<`b4A{cGA qRbjm:Gq12OI3v͞gEp15vq`F*fD^Su2pEP]Vrɝ_`*"c'Jͣe w1Aј+~n'e>DYNp$R@1cG}3a&vcl3(Vfv .* Q^']]nn6KK7)fLIdE{6m΁Coz,XE H?\3-J{Vlw /YM@ G#eٖ9DFTjVvj .6R$c8ŕq-J?^C;icga-eXܻ۾w^ǔ3zY=\b[}Zt_J^86wqNѰT6 U _F:m4nPG[Cd1<}FOƛߑ&! w&C\J2yW`aU?C4u&ӯ͛a:[7BF~.ζΖHàl4|>\n +^!~npMkЃAOoE|gQc+-Ud0;(5+_f 1z|'Oz5g; 7 #XqϷU1q%_>rldp>% 2tl]Y%56'i!=7`7&T4 {?~ގvÙ7IVQ1=~H~`#40k~#7Bf~!.gTGӏSHf_zc杍>_ ^}2iy,pO{}>% 2rL^{ n/M&)F,1mytY}gu\t]f?{='@+Xˀd~".V@Ps?*򊊸[R>Z${%|lC:O2x_#a_zm7 ?e }j|^/0e v¢".o;+Ͷ}&y&W\w-׹=f45_=?[ĺqa>d oBޣp%_: x?֬p ü 6nF(bq\uExS[  sW _pϿGaAѱfɢ3|9WŅK )y|~3] 6/\~qߟX mFp”IXzcoDzF &3!͙̙ռؾsfݍ᪫|GTUpͱ>,<ȴر}uuusRZ63a|SX^u~{ٱm+ C^|>o{vq$99\&N;'i uvlۄ4 GuD0:wl%SQ1^v.{/3m\&Oŋ/je%ûX:(?]N~naRXHwO aKUO,?7&\&SAE0Nr{6Qt-A__9̘8ǔq3ٵ+M(/a+)?^ݎy c7]_rElٶ\slڲKbOJRc mxǐkq+3qޅW ~x8V}P[MnA]v=4dOlH\q=9+O]vF 0lw{̪DYo 0h(_D6-t6x Xb0wTxC\Beaka*.nż ޭ( 3K1vdclň!C4ܴ4Y t4:֍G f*/zqn N "DnBSKD\;qžα)l&6KWТ̛:ESiWI1JtnjE;K|B32 7em  \iMz5A(ƣ*H@ SP)* =Ϸ$3͍R\Mi`0HWW 0H Qiu-Q~<HA8$a|T(.233HKKCQ߱/%.!KK']Q8V]ȱ?xc!2nwRDwT)1>&O9~C2att4--7}'C(0q @Aq+*`Ǜ8э.%(*Y~<d3Iވ 5Ç1pr H]۵ װL![2l"av ѥؑL6M9'bI~7dgqGqGwupu< 'oQd" C\?哇OdBRk; s7n-/?ka}HiX:U1a%d?_C33;Alz,A2JS_rd҅~P2)۾ʬo$@Ͽc3g-_!ɛy79nk% $w!^z-=|x'㺇9 /}N& P].rKswaOxOdH:YDK#?\n}[z̴3.@o'`=#0 ?;d͑R&聽i.v =ElBE]~{{{l9Z;OeG_WX<dzTMٶ3WΡ>2x'~3s}_x˯!g'o2)(,W^?{.]B&nR;cykn/b=~~iFYd ؾmg=ߩeuYgn缶-.¤cϾBWg?+s՗2iX~+u.8t| iW\']KUeَqc~r۵=n^|M~ǸFu}?˵W- Σn ǟt@?_rNl*! e] e;>g}&[ZzS}.^zU ðknΝcQۮ+կ~sͷG"##3>JfVp퍷invn‹?̀),,iژ{o>z-RDww7_HݷW+H^OWEmY$ngΜ 7_oz8̊Ot_yeKd9(-"/@Kp3&35h|ɛ-[wsOq%Ln9:voϧ? |4bMm[,Kt05l 1{Brk <_肫9w%Y*2&)fngƬQc&k 1i_ux?vo BwSҏY_Avq1>_z{,62rr+`%;7Pxӭ2 !Hӱb*#+ oA# .֦Ƅ>K\7BС1i<^/|k'3;<\rn䪛nbȰdeeet*8 ڂ  tu $UJ⦤'jlU6BE`-#žp8LOw7Y;U*]%l54 Bpw) p)dee_!eDҼMMJ#riW# Ĺs{JSRN$dĮ*%J02>3\3=;7n/]MNq F 4o )Z²Rd`q^p(Dųg+.$g EE(``A]!̞4t"@zq{E400p&Dp~vXd.DEHbBvinMfz t4# ɛ?S60!-@WkWӸn: RR8tKQU <}5[68j6m`Дh^/͕@;Nn]76 mm-!LJog{?}{tH8v̉:4xV&lH<{__z: -a\+zDŽ*\f}sRíǛ iHO,a@o(B</Ao:pѼ0ֵiL8;v2tvlAŘѤVdn`Y) Ι?o:c"Itݠ2j0?DYiv7ﺅcul߹ٽ ^yQM94oeD16t]gf萁466[~ÇJ w7J0ɧK@8 'AsiS={4h {졼|$^78֯ a}?Unx_yY8PON0N! "] 3q"NO'GAz/(f79ޖ lB_BOKl¹ :mfK\B} M\A~Z66) ]-UJYx æ-G \LljvJХDg'Uu: 9]29̙:3&rrņ- RZT 2.C .YS.5i9CpןD+HEF706 <c /@ G&]&H.$!K%ML4E!K[YR\7ZW[;i4 7K&lQ+Z|ѓXm_ʾ;zrv&h =QX{rj ǎeᜥ;q哒sI)f\xWbx qj G[3,69j(iōN0f!gKWq%ǯxrl(.Mc&qn+&(*E%TƵ2q[4Ax^E a!1 (ri\XZ餌SdN|bc9gXޙq`8ڮ#c}DE\@H[xf}qn ÂC9.E <X|*]?Wg/8H׀£ttVTqHc'(uIƨ[[IdmoݬqG#c#V<̎Q=n2z'lZ(;Ew} G>_OWk#ܒm- )8r4VLA >ǫrGYLa ^MGli0@wNan7$+w?*VRVnjQK\x] 4jtvgz̘dxDKS/맞羧cr1 ڪ# s x޲|NFP_mQQ7nXo3qSp\ݕ*OvXyx^n۝2 c9pvaR䖱*eæm(GM"9+.2o;x3KN>??nw[{YpjZZBi9**FJSSUG";_߷qŗ 0.Qz9oxhd{{aʄ0<J~:nБAXǰfch;BsK#5G3jdrztqRRPCQAexS{h [hnmQÜj}` ;s*]߶v)om"+#wKv TUd艧ntD`m@yjٹm#Ǟָ_X @M~OJ#4'J[Oi'R'JľK\\BVaq08cAMbxz tՐN쵇H+]]녨M>vtj,b\Ag#U71hH&OCHs0 ImK;9e֯R7RI#"La#ˆoK\@w>E,z3)(+œI3 jVrj^&blT"[!P =F\-#b5XA HSE~jDVVݤ Z4]GUTUA((1a"5f=k*TS $ ukw9@6xr扨Ϫ4h2ǗMͥ $S{HhڃaSe֮eQФmδs)eg`uA-dA gF:Z[cj{bq=ED AVAKgHD!7h6Y{ WBHTdʋK R*qj" SܯEA'^/H)|٨E$̤7=`PJߩ51qDҘplz woBˑCq0\={-]]Tm ! !no#\g͇Ƨ B TadY#I/cӏSsR7nm0hV$ όB8@!FaGrM~衐s.W9snBCŞޣp @힝h^/iYَs1v|؟8^yI>yrr4i_WHsstw7wurpͶ&'-+M r t=3b#8 8o7-̈́T.gAծmHCCQ2ٞXR\{ "s-M}}mml=l\ǜ%X '{9B(pwu{6W;͍ lB8g2^9مmmJҏl6ұqZ[Z G`Oikm'$pj[n%I&/P>j$iii1s#7Ɗ;+8*w/:0tNPU}Ha~.y|]& H|>#K0nt,_{N]x8c4|5jjV#W;n#`B7:K8̹ *~YG}CǛ[شe;v`YץKINN6U "%.c+x啕 >ciDm!%nMѣ:x.{mƏG) xE.L՗_`fX\HIFF~/֭;眿x<&MɪWj:;N+2ʼ xUTޏl?AݱV~ii`Hܜ8cNמaԨq̝֗ɎFŴ@TF˛1긽6}Ltwu+1 q=L?{tww=l o| ˆrimǵ(닎l% A$K B-\-;jD ?{Oȑ ɟ>.#jڟ"ѦC@X7LZn0A\iar( HPqx7T((*)Qeڽ֓dd [aiH"`؀=vq:)C()$+?CQs{Dg'iHݙi?;ފlݳ; \iL*vlػoc)5y5јhL4]l6, RE(^{9cݳދ/=;3<3<33BA7ŔD<s; Mw8ԈN[ַ;/2˞Yfnw֐}<҃v yʙhGz7"x:}`ws/asO1bnjO+TBp%Y}~-D8q|i#&j+y>ڍ _np78K]¹?+#1R)UVҵgOb(N:c Tɾ>U|n2G3uڙcFq_eW\ܡiSӵw'Nz$OHM^ rXjYa!;}tHWCG 83}eyd"ן`sItC6C˪t܃n{2͗طU\2*T2DMT 3f>aTU~ 3)zj$hni"?7?O9Qy] N—,ϣFOQPG}XV,"}dxCJ)*(i3*0|hy{㕐gofٹd$ri1iWXfgf"^N!)`9⨣zb{47n< rKJH HI\ev0tL 7"mFf`Hm_`D=#Of Cx`xR4d&fK Y n(>}+qfvp œ6v{\0{gӼr^nZJH^%щ |@q8ˍ3qO[!X8 [:8{HϦJv7x,;qv3q!m2.RJBqtn|ˍ~EL)2Jᡖ鲢={jz hH'%u]z行{h>y%8kgn#_dfo k#Ȥ[z]mHɭȴlP_{bx.R9ْ}{CWJ,wFingL;"V?nt$'l=1GoG0 B۹%#V|f +#US]?]6k8R ?q^׃|ƒj&/'pq54W4w$́=K~"`'&Ej FTR*QQu4 :Ng95 ؒS×]ȭ^h@hD:8x ;x\ѽJЄB*$LG^ҷ?]GRX5ے-ǣDdMG+W#Tx*+/hl@o/h*]QԂ4b֏`ޖ:jF&L@2@CX#T/ mm 0Ezê}0e(_|rW(S^ǹp=/! nXIUez`WÖm_o3q:>]ww"? czPi8>;Dd:WZE ȲZ~}0HݻdJ!$ EJt"_ߘ Hj iZ)=@Y!gM-6hIb$Ta$a$\0 n,lVREaġlض={&B !rP)Lrr"ukӏ/֬{Y^Fh/>[#-1E'+ӐIT7 —e@;{x|fz 2n)B!@Sc#GUʗmK‡.e#%hVc4[0B/_.m1RlIv uᷕ53zD$xeu3l/ND`mn Qpq:t(H߸qz9[7O>CNգ\tuhZoVnmӣՍxt,/,w| ynLo9XCP? ^+=bȐCdY6lﲅok-|'@=C !H CQ/$B5$wAIt>li0_ ֮bFAi`Z{ɔZMS Kc8+9sg|Ic2I>ؿ{pڙSҭ+Z{% 6^ [0+<3?Ka,A%|t4u6(] uHyr +öx]{غKF2,\3h,-kiDtkyȌ"} ?!2 Y'8x‘Wovf <.OPwxҙyةGe<L鯻 ;C"5i3Rw!3Xo?)BBص0237zzQ3"0@ p@ٞ8 PIun! sOߪ"Ҥ n_[k9X23H_@^~!>'$_LVlg=bdFa_=C{Y۹0ß yz=&[hw>t$Mm )Ҵ: `!,h1ZCtv4r`1:h21F&ZBlɧHQn[_O ѻtBգ@6L%13ӿ 0MԈ)l"1d1ۍiZ_O^uLk,ߐ{yg)(0h2 8B ta &X(SXDb*&Rh2 9BX*tU4s!%Ҵ%S˺JҜh1BKsh,?ϥD`)ki8~SWRq,kUҰ [T$? S0vP?Jb"@}њLPQ՟M (%_H:igGKE[F(k穈;;6G g̤ {kcvvlNtU05CXuGZK]擽{Y]3 ϸwO VQJځ ĜCK' (_BrDSxcfޤ6<[X ap|ptFN4 8niGֽg2IfW #+g%9a@|ݩS=riAw`!%m! tю&^?ެ@**{[eedn&#u43tu a4,Bڸ8uH\#SX!{#ypҋtB(AqKCP,}4󹲲=\ƻ:[Pԇ7V49' گcPOG nft$70аhׄ@C [[lE袖h4+)$u %N* IkJc.VZF-nCITfM !vK"_%VWS .ZFZ&ZH*iyܤD/Cz4 X)6OwbvL{ۇ2x16" cH7 0{gC'6MCH|G~4$Ze_Э;VL%#, W^ޢw0-?!|7@YBz>N} F.o-a*j0wкcVwF eo(>^eOn+;7L. 0X:[`|^Pãތ"PDR%?e KBX˛"M };y͛V8HGOSw a5߿c[%y/ڧw:)8K>l:;BIs 7y)29_kdG5%'tH&l;dt6A$sGd I#PE2'!iLzFozh DHEhZRq+[ovaC; ?` x~l~ԓ~m]׹bI0]cP[F0s<9\ =-}B+4WV$^'^$.05#3s9)?_XۈlEtoz- NnPDHEIT0TJ%59j, >&^ ǗEw5-&IaRR3UL) C= D/"z5MHUXǵ+TTvF@XǺG4/XϚFO&)/ Gbh A G"aj̈$tD4ɫF,?HTGT4MC,j_*ЄLy9Dh;_Y`g K'xe-xS`b[s>t8x.f*im?<ӫByivO^w9&44+ v '6=251fR<!H%1lz;f*i.^}9&z4$9;#\PTu݋Q' LcA+ٴ9Jh-~/x<'uq:t{?]ِ _+ <7 }!U`BJ K}i0]i9"F_u#&K'+'3&(³ߙH˸O0~9|C* =trWDW֦['<4K i\SyЉ?>8F$BTOCyXc;>\x~+PoeAZxK/?p{;_s4@=齸[qJf[xx8=}[1yJxhdKV%=^)畐]Ÿmw(/IoM*r-D=bw1[ٙMT:&$fo.,ɡhH?v>?T+lBŤH yB@+&bj*())I^m(DNDĆ/{UI$  E)MQմ zA" }uD (}"ޣE6bV8*x fD#rb(" F6,)ҎnX>>HL˨P1[Z0hj$(ikLʗ>Ebh LAKIQ~>&05UٖR`- a^T2POP^RLQI9IiҔ2QS ȾEH0UR٫Ee}uVrrcofģ ~<tM*6}A߾}xo'tӗHT)EE/i`8"%krQ־͛V0>Mjtr,vF{d`sjJκ>!y8a{} .ܓz2T9>ୡ7IV2Xxژ Mx:WsS.~voor,~no0n<]e`#QV8!M:͵_? Ir|hz-.Xڵ[-RnnN-,d‚EvFnBXpZbOu {7Ecgw iBqM[7pE?EA<ê+#QzzECoEv1vu(o[-2}{(Uf`֐BM.ν,o9/QSi_kG桭NҞRTdי29:E((kw$2X! ;fH cG!hL%ӻ[LUO/oJvqP PM#Bio :!HI N|*FRPzҤg^ϑcHQPTDK^}] $κ(4٠@0Ȅ1)MmjnTa-sRUUA j*h^;)"cQL%$BQ0S)$TIH!IԔ$ѮĢQLEJ 0pl㇔C*"AAȈ*HZHQRHk𑰏^Iaa!UUP4@cWkS^m%Pxn8lݲ{P_GE/Xax+3pY۠-IMQUIsnzEqQ';qy2~{ajzWv0jОÛtZɜ &x&6ru۫~φIGN#x8P?M=+pA]{3Nk3|0>}ܜ V24DWxG``Ҹ{Wh~e{0w;z^2>@ ,2lHm`F18;MQtdP i0[i'eD 9q|LyiAQud H!9RGqza%?R Wob(=r,2 R]WoLj:i  %ESQXQɭ 剓hmE64# *HU,UTT#HUIUA*Q$ *)"JdLh." KHBG:4LfT 4{6:wƔnrH]?cϮ Wox,_Ʈ(ܕ_q5:Wix@Lpc}Tw3]N<˷ǞI ϰ'Xh!#BaE'?c 1y <|ՌCǏw7tYZo չҋ]119ls*Ï ,:/nݺ[n;-fÆ\}e <Ӕ̚= ߧ~pS^Vy2]^7 kϷO*⹙$IF gD,[!#|K*K9ک׵o/}L.MbJ˨ohoJ=dJw3{Ge|i W^r<9L {E0zWri'QVRD;f^[Nyi)gz}TTol'$I:SNxZo.o{qc9ԓؼ .mSO>^z$[o͒KhhhWޜ|) -5m{{v$̛;]v_PСÙ|Rs^e5RXTGOfQ O :h(۾)'LR LX2LiAny{t]SvF-Ǘ[7sִ0o͟ŪI 8c~p2z$a7U>l5u)((#&3lhuCw0~DV_n欩Qkm\[ fz'yy 0IN0dNЩ W_x#>~' ?C'dplؼm7^X}4h6+~)M[2AAnG;Æb΂Y|ޢ͐sSQ@Đ~nFEI'N|[mO~rq琗ƘDZb2ΜvYTv`2o.xzz)gRZ\#>@Tr)/|_nss?nel5v~IEYgN?\|,dYS/$//ߘɊKH$ 2?h,-jsѻ?o5^`'KwN9|WO3_}VP/%|S9f<^_`%=hNv& ])30y j鶔*īC+]iژùeA/>!I?jŸ,[| WdF F~ϐ6mkw5H,/0ZM!QMbH4`JI-)kg˙Ş+L@E=R@ib@5oÄq1ֱlK'$fKcOHGQ 0$/)B ؂ZI65HMY˼4 6k? a$h#qLUT-#uPH mLӊD#{kQ>_ ʅib_MSƢE54SmHaw, 34&9ŅN!|ʻv[n:ؾBoTsߵB޽Yz Q] ~бB$b{#I0 &):f/=I_+uaMPԥ+f"z a=SwW\K4Cs}ߟ~3DL&؂NK]-gvf*ż{'`eWq9eyPܥ{_c?'ye,~a \ТQheڟL,z&^~ ZjYCL=Tt0rك3P '[W._7XzۿjYCQTљ3~|~cci|"O(ҕ"qSϤ}۷qOnrdS#{o9i'?N;w\Z=+8!ٷs{( $Ǯn9 zd;v ej ]y']1\@Y65?^<{)}nhYO<}%?^4Ue֓OƛУQ>4ջv84sc)f{7x/z^{)nW0gx/wۿړS7yʒqׯ#MӨ܉^=шΒO>tܹ]=f4O<}h}.Y5W]N4gf?4ɓhoJ(.,yo7Hq3xWohfsϯ^=ʟ+45=x,J}}#+_5OV%Y~3OaЩRt]^ xL :Y ǝΤSZ\NsKO~TI}}-)m&A4Ǟulln~0wxa~~ͨ _cqɗQ-~=.-M<0TA]C-T*|ƦF;sdֻ/3u4470gk\қ/p磷s!Gq)gY̙ǝ}a3\s ɿp5M<4t;f*.9 z==_\F sͰ䎭}7ѢSc Wfz;u#=! x{y94ː3hljax!^7~;xqPZo_v-哏?G>wQwO* /4O}=\W?(\}4qh)̓(=aqYڀPO/f.obÒuF~@ḺpP$(y [4i9 -o EU14MsgY&E RSV><:47T%"H Fb%LI &2?F~iBqoUc QH6%0(Du#(ĢBNrb#sW3'̉aȜ8jN.z~-9̼Dn27ӎ91̜82̱.i_c~8JN.jNX4PP1Qh,{i*eLY_i5G(R1aT#HUT5 U/aosN5J- شw?G`==C6L @(Dsrs]QCMKa4Hjz<Fը146PuB6} _Js]-5[@[V|Lc= UH3l E? r 9~ut0bƟv wR$Kf ӯs*Jvדƒlma7kcF4 }iN*WaGL@]&Ɍ]&7?.ʪ~2ē_˞iCLg2Kٻ7E%%>0Q3OkUTp'RV^M2;G8aذaef:~Çިzԑ#]Ly}>_8ݻRQ^]v>---,_k}/89S),ȧO:eW!@HA~^.{:}{URPMmm=vW{> ]* p)ڙ.;LZZZ5n#cѵ3zDY L=TuBii s&-\$pSճ'yL>z"uuTﮡ9?⌓O ?/3VzK^n.SO9={&PW_Ϟ=$SIYSNsΔr֙hmienQ2Z `rLn=ܥ{ooYQkOg}{=tMC3(g%^/j>(qdi>{!/ sjUVUZjժۘ;ֶ6.z%qa>JNgY`L .ɉq ?3x[ꦭ7^l..+WA\>R'9y(VT,ӏ+D6)ů}={G+9shmm/cz󔂳6nMۘ;w>i111U֒N1y w.-uT미EzȦsn˥LLM08:ꙟsoaޜtp7y'ǐÚgNff἞R;Kn ̕_Ů};9!+ʢ2Y.*}/v%sl rO&p傛~;K-7][2YTh~v*DZ?7R{vvՙ%#fB@&I4嚸+kŜιs6RǞ_6r47+cg/񖷼K暸cpT*JOϻRu//=| kAz?x;/KëZS8¿s/lp²"a>&keQ+>E58kuײ#;<sc?^@=a R:|f"lP80cI]_?R0Z.l={%ptNJ J:H3*~d_gi.T I-I^e&#,VP*@f,-Mj %E@RHi| ݴP&Ssv7~:0\Aq0W񳆮iXhLN6 Z TQ-BHAP)#( SK?RI*F74RVpiHU(w7GxK)!58\v¢7_*[Hf2iwHwfv;c@C4t_H*S[Cd[ZɶaJ0 tCwy`wʛD4) HWq{s{3/742F]Z3p7bif~/(Baboac'3T'7;;{>Cٽ Q^}:-XHǢe1u cgaұ)aUÆ5ꚯyſ pqRc5y[{_xMMN쓿) >'"5bGrp @$TN!:4J3,OGiZPh]QFrj\6 .{ޱxw^jӉM6:@ qǟЙFL$j~\ZH1 e . ۹@,&J,LJs-*d3BAưh.ST1AdRI$S$(Bh(KGSf]!7RU&ЬԫJ@:pWQU}<A0\њ#40A"!t$g) poS"!3@_!@u Khӱ-36w@mT0L0,,YBcg)wKۖ3Z%ǎvjZvBP,bJȠoj'B3ٺBVzupŽyf"R>ϊߨwFWS4"L\tu*JNt8MdMRSSv]b{Y~6.ត|%JGHf3 "\Sg[T$醉aY$=_Q"DW,EYۇO VZBfmzIoފku/`mL* ;rYX]t-ͭ3C}u￰go=y:3lFi#J{[~GԮǹg%y#R 6?W!^Zx|k:iomRzgl~AZvgyvC٦!BGH{}d@uDrǺgsU?qt嗪&MP!L\t0p] T4Y.ʈ6|оN|6i^5`O`Q4?= )H0BeJa:]K-( ,)0 IkmeGϑld)%YGR[),)Ha:yeӖi)U\#C1t4f:)Y?J(Y.9 wr?N&̄,T&ʤ BdSd4Z.JRI&!BdRu?*@f*F1t. Id.&$z6M2ebrdM4Lifm`:eyi:6LiYH@Mh>mL }(G'ٰy ؎C5]Uy4`KbiA')QvM!Qa:[)K$3-f3OTJTJ%t0,= [)R $ccHKZ cѠQ3|\Pӗݐw8 Gq|>` `rh0Σty.dO>ڐ>?sG*侽/ZL.TO~h_=+'goW'8zb,4F*kmgma  ϳs:湻_x:OIӽh1C{79@9D2Ů y~?-P#Ӆ#Eh$=7VϟO*H_#A?vj.F xnnv{6$OoB^U߆9h?.)?݌w &_JEoQj9L2adoUXR i;MTOr!eNg['=G.P%ܩS'#a VP,[zM|ݻw166ѣ}L姸kEJpqFGG=|6 ho8{ЛCz+˗axx>|+עJž]UϏ#\v옋iZ9??7vuU!;޺UI#9% IKA2۫uE!gCDؑCLMMpu7սd2ʼn}Ta!^Bi)ILM#f4"D8$\'kQnJ siT6jP:*r:"@|zSK!r)*N=ufp+po ךIئn0a0"$T8!sw)9R.pp9Cѵh> -Oq0LF94>LG&8>5N~RQL%~?yvya10Kٮ`+Y$UaLXxm(ߚi[Ҭ O~Xu ,M*6(R]҆!$G$%~ZG9- lœTZt6xI4\K^G4Fi 4PORg߯Oa4uL S)t_~ }=t$["8D'~;}~'~q?d[nui098}2EѲV*źK._'ajd<3ֱ?`c'O?~#zS.Z˻nw@@2gz~/_b歵w'}db4wTg+bŗ?=erdHtS#NRhi޲,Y{&tn&c9/cG) y1JڣUa\ dsޭ_bH]˓D2Ŗ/㾯|#196n fVnD2bE[D}7uK&^R: w`]dlܼz+NT,㙧)455SُL~rpur9y/10Md㦍|oj:%Jهd2EnۿC;EsS3׮X,qm7樅K;k^ rph["moǡG{)e3`u3߸0υqƪaea)%#c9ZMZZZ8p##OD"p}r&''%ͱb{g1O>### q8.o)<Q9t` IDATeNgfsyv|p| 1%Jq[;8?0 VZC?== Mٶ~8p';l&KXɧI0/[[B13;g|bԭ{~L3A:r/ ^RHX ^n [9yq~wb'w>Ƙہ}XZ\R݋щƐeZ?̋{*L\.a&,#ܳqwwqeXܽ 0L\o?p˗$L5,{:K^{}ywP$tܬ^ddx=vʗ5S,x?05Ɏg#e~hnmо= RqziǧoOw3@Ɋs.lq.~:i|<ְ^O[; Q39)SD`ӥ r}\lρǶhe"] iY0!a)=p~Qbx5 häLI( [s[)Sg*pZwSPNfd`\s3Bx1ۿa;n t4qt9C)eJ$ҳR\& *0PQА!/) TT Hli8oL&23iBavuBxwo|%gmfcJ/gϬyzq`8ކi%x/0>OH׊U;R8׵|%sWgcN0͙ `[ގi%W@?p+WDZ!~C/r_k.x;cG~>;̝]ȉc<ַ xpQsog]}|)(ir<|{Yn#7Y{ItYq jEh|fK|cT6Ǻ _ By;/<"?SD?[?Oply2g)Tua7.6nǸC TAm|S@+o+-&ryT Moƴ,[$%o|=˖X? GN|׾gضž,ꡫV;|{8sz6}v>\vŕ~ۭ;vC\v~W9~-l_8Ê+~Gկ||s 6184JQy~S,nL]gNG'W^q ѿ+Wv홡U;e46m X^U `Mu-\;B/M~^Fdr[DG\.OϊekXz}}T+/y?[MqoS(S)FPJ_Ty}T2Ρٵ^+ ܷ~q?R9msy׵ĥKϽ˰OLK^JOwY8z {d֞=?1.XʇaLCx֋qwyUo{?O8a5޻ rYg͗4 MHt /2;&kҋgI:~[Dl;9˖}Νp/?mV]ϙώl|g>?Yr }D{I('T]$ UOԫ;Tx*,Dbxohɸ"Dȉ 'HXzdPB劇R`Vf^Z~? ;jh|Z(6B[TTLWfCh. B߶tBgɊvMN1xqUcgloD!4AS)<]~.8P1ZY[v-..{%925\)TDhŴL.؇XtXq \T(N5ٴtD3 0MB7PBH]C u.AE&Jl3m$lMGsW85,C;I4fX+9&4.s;Yܣ^ 4MwJOt*ҡX)!m+ͥ׋S![MIJ+rdXp?n MSLM!ldaj ]H{Yx'͈d,tVZSFy-d́T :]y~X,HY\xn:%IФ;|%39~wr<o܈[8* )`KƆ9q0˗lkCfqSg³~~D%s<&@ ǡ@np#a#!vP~T؛ z3!tӪԘ#m҄TuGqSwv'GFԻo/ F["z g1>;!J2H!cc|v'T&{UU*H71:_|w|dYyBw)J3_.seA?]PH 'w)>g 2P*NUTϑ"PR:vUҍ' C8UU%K`mRZPTw+u!-g1+d? ͐06*okzm8T}!!.T,J<4J{._?'b8ֶ"?Bua BkͲ`Lqo P.ĞѡTO_ zAyUJx~r-[Ogn$^sn/>(`?tO||?:mDD]õVBDNY,CTPf r}n *QDe{u2~im[e  R^ClC5OésnjqQfDG=}8Bz!&4DMDD3XB[mm`>2_JB =cBH_~Ui ԨC"!xP 8C%MM47 $i/y"/p#t6d.r@$2w| (J:Y*eeT*f#:s d&TNkN*PeH4ʥ #&覫\ eǮ0 &\k#CG uP M&y$k E!Csbp7cOT:JZhNq@OsSC8m=f.1u0ayS خU Rah`GkC踎&д @ܛҎ$u4y>q\NSMW%H%s8.9k$ݫ.e)lKg3ʄ!8QC!! 2$â3!L,ҺAB3O6nb0Gґm!60 &(Jq61)BVQ3>0Ly<%0xk)4[<.d(Q'(On "uEL3mΖ~Zx 1JG_h[0"e"26 G5ER8bTT` cOA%AgZ#ENfY jr>}Ғ=̘LXh]Lh'Ro!vyE#4#*6ɊHJG){µ 5qX^D*m&LJ $,PS4:c2E1%ɬIX'hN C G* R)lfq8UcdhkE6)) ZqYypr JJǽe"THZ*7DjkHO)gV ;2g70zR̶Yo~> rll|5Aio8#ǿ ξT^|qj}'׿W\0Љ8t5[;** <ރݼ槦v.J]zˈݿ_8uG8MQfXh0<<ɓXziTȤmRyL^EP?Na ӗ]G0+lx-q:y*C^7jT\jK3{%B/W3)F~S4*^zn ~^'xEc7Jo:p9/&-ctf՘FBI$>/y1D..4 ª8ȱQOpF"$&Ţ;@ϺM4a 8!fteSC3-IRe.t-_Ls %%Zh Cw?H%,!-,1ucP4&)&T43)jDShRR328N40QNOqxյ4wn$\B@2i{g.SJ-jDf7UsHFq.DP.;QpaY P<>jQ-+\F4]*deua@*Jjq %ǥ^}\%uUUMSDRW(rym@M(U-МjʠWa *% j [(GR'C=GIT#C*9=2p8 ,BTivAtD'Hޠ?{TxC.cp 8Lh:&C>3 7CmH%"$Ê `=;auS< m'`FRxc33H_ҰnN#C=&K}:L}1Wٔ1 }qIW Q12mYD"0M MAj=fYxd7-hB#bBb5Dz2z]etblG#mp4 D23)fMڻ0MtG|e,d8R"41%*FQSM ̈]dtjDY(2?9kХdX?{|;v1p8X:뷞ko#!xAeI/s9D IMtLt,MCM@3/ewcB.DWGG2)W)4&/252T)܂ގ[ SO1Z,R)JT*ɂ̟;e=d&Ǐd$[/Ѻ]K!4qTv9ĩ 2`RsU!5ҙ4BJDVC: RT.a71 R'ɵm%iv$-(t/H$GIp+WB)DD =1ɏ+%煮m0kiz'HKPs:f]F/Ci60"/`!رʌ:&I+FNjjpEi< ]-U$[J@ fլDzGJf"UsQQYLLuzbC#397U6 IDAT^uZ 48.*LXYsq~W1<<S˪'ʼnWi#| :s PCg5<[(SoOD "2tawMy0'xs\#N Ao4QqZ]\D!|t Նxz*-KF#`4_M Y}WŶb7̺W_)#DŽk~W0oKaڻblN7 /@xU*–,l<<|A/՜  D:`hE{{ =mۻ|' W-cYgܳsY&&܁4] N*wP(ϑtP4l͵u*H$QHH+NK4ݵr"А;J2/`fs ]Q5 ʡMRҡ($yeSHNe}{w_.^yndkL4{7;|NWK3M涬f%3L )D$RLAޘKעm =̼1bAX`Yc,^9- lћ)T|ɉ1EQh-K,)+H tE`ے h9%h7,2RAHP/q4o>S;Yv:ޕcX -Ί}ZDG90|I'0{lf `A@DLD(:T?_,,5Z8/%AA3 3 x#4U?;}7^_ };_O ', k&]?uBS\^#I6RVͤeEh߆hf{YBX7LY^0ۙ6Dkl\}*Tt_oNgL779΁Fm=[ؿi˸P}PV{R_ITo="@WCK +05:A&" IvbV^x$=Wbeqw&Ƣyv1XBV2ɑ!Rx8$c4 4M* qJ$$z2Mr) =Mоr 7際K *oj|,PBCb [XxYp40TSx;ԑ#bN.CT*E"H&% C4tѢ%g7eCnKsoҥM p/<9'AVbg Z>OEٌH[Ys-͌Hajjcǎxb(X& M {{f1}|}X"v~Av:!Ս-K Ҕ2lf8/26:0>50,FhBCKܦ$H&sHSgdd\B74\,L(&fYtE¢)FitSIl;`$b]B;pT`/p=y=X苽+eҭf SLF"T;vˆ*tK:j9/6eƸL^(:5; C9T]0[ 4\O5/o~e)ʽGF:e6x%B\Rε{S|֪>QܣmR=?-7||)Gg4gT`o^+wLqiV=ga4bkgjQ}a$~~~j/op+FJYaӆȭ~}8pܞ4)D"ܧIo7#Gb2F2/qBGg9PJ P14Lz0@DD>F :iFN'Y0w͹ Ct =[&#MkKd \dd|]s+L# )Iqb\s eUdtn$%v>vvl@,1:|g!cF|+":I'S$4TH7SH))965Ŏ,v0h@so ^_cwKRlaLO=)aֽW\YW_gaWDU0JFeϜJf"QO&DTEEsΛ]wM9 % 0L`b=={?SuSԩ_7vH.L+Hۈh0$@֭.Fut@WUz;Yl8vT t2b5cq9q!D"1,"E@hƢXd4Ul5Sc)'f@IscᘊEb MD@4~%+WQ?|(#8Ўm4?!!;sB ]=P,EZ`n0DJԤX KA] cHR8fķhRtQDWAyQ59dwl o_rqLGBC:@;1aNp6#F v)tiCOBӒ`e}m"$ፑwޝYˬ+MLr0@u?gYrd=3Ȏ3Rys%#+>FNN!xl|m,ޏ2ufͳHidg|Mu9xD+|/񃕅^8_`2]\}۷soSr|R$>!cO8c\B>fYݨϞϺ9=!d[%dA ̃I7 }kE: tddR7%ij(!ѣPMi!Iube鑔_Awo'ν"0vX+I𞑳\}OT~/YL&V~-+^p WrwM̟:DL{%ttrͅf&2UTRn!Uo5n*of\e$)S#DUDUe5EN:Z {KڶU<~B CG0 t8cFT͝8eIn Q?ODQ$3˄Mxf6@@n{b]& đc$ &-DA0!$HbaHCjH-IFt1XNDӉAgAz܍*]p.\&QFMiRBoI#(0G-Bos?#(mv;{P5 9r$TdC,,lUp@Uuډ5fҴTLIEv|s13SRX/0r'L//%|N7+Ct{,*~9^'>1Rt_v+-gB!xԐ;LG}J̬iy#x<95f|qx8c:|<;fo?:mOg'C7D߅Stn 4b(16jc{QÁ8e"+r I3/{}0\ BReQA Mo)"a DG^މ-vZQVt e$0 ! " f$QFL& IE YS#J.RPRhFQiiohDBF4ܺݤcC錉*%"6A7HWwRhB@&(~N"Xu;Z Ba̪Eu.h D18w.A(9߃PQaƝ!C QWV5 t ]H=^*+ G,ffɌ⏀$R[SP0Z:Pc`Rd^Z(+c),+>Q␈-0&T(*b AcTM #HBÐP:>Ê&݌" t2~&VK#f6$ *1($cQ% I ag3vj+j)e G5C] cx 1YM,5K,BR hjz}_~gi9'_|cfwnfظ#)bMS3j q~>5e~M(V+k_yO_x]~̄pMgɰ;[&?y)v 0$ W0벫w<~MpY#kax쎛vEly=΅wA'b|cX!j4ʈgpu7X4y&%9ӯߴ9W]c&icvuRXZά19)|&FMލikKqι6GoIg9ss NgKqx ưL=k> oM3Oujb(ĉl"mZ髝\~ 7?Nu[>(au7S7xhrX%n\%b&Ϝj{.'8][6q>J+*bV)o>{;7_ۇVx ]@YI1aux}>n )+.w3qhmTqŅhljϿCsՒ86~>y"l`K+Ue,`! 55o/g]z 4qB_gƍ={9Biq K_1L,]LYz5.#HxO”IÃ3fh4pk %%wy oXzvle,<شy-).*Q_Ɗe-#G 0ӧʦM9x,z7Sc1s(f|W`έL4g/bu[Ŧ-_ i`EY7Mez*?']agO֬՟%ڽM3? \~G7q}y,/?`+غ{ Sǟ̢9ӿgڄzTV7/ॡf \LqaI?7AXr>f[vQ(d艜yt?^y)\>zªOgO ^LIQ)Ɗذm=Xq&pт 1'd=qcޝ<|2)Ceظe3˸'Kgİ @&/~{9mY|S5gl6tY\+FᎣUaQ$3hƤ٤7;$2xyX;3|emv4??oRj|@|'AdOeC2 UcobJx蚀X$UŅH36 IDAT1-܍ǽctQ@1׈!T͙Iab.蒌ȨV1E&V`&Tl[n%R\@S f64EA5ɈfQ6 &DD@DA@@QH,IHI8C@2[h`)jb(֭@3mK5WXۉDtb*D#1 ]E5DA]@D&H ]C'b5a3FtZ&O| 02jB6j3JAq{)/bIe5%4ae*Ǟ@, 1[)@ jh6J0LTUqUBYg%!Ce6!2an頹$=~N{(`4?a )w6Ah&+5jb 19s&pL!$$ C0QFc ׀ȊAFTJ\E&L"*QĬP,>ܞ. FR((Jh良HBcw45#摆O[|seNuɯD#Y2'YT9N|Awb-LL&?d'~̀a)zǹ(g{~-O<$X}[|n mmݯGP#ᬢȊ(IL_>uEOR1p0<;UwW**yG'_}ӯZAݿOFSU^Wz-B^/ǜu->4|=] eiRdDIu5KP^+55GRV]O?΍=@QE%yGL9zX?S\QɊ{~]O<ǬEKtpf^/n45 ˟~o5E{a1Ք?ȭ|K<㇞jsd(&J+pƤ(l2^3|_x~~Ȓߟx~[t-k?˒c9lo۾lAyU%7fS=@!TVȲ%K  ㏁yN;}N;wlo}YW_M96<3~~i>(/w>yȮ`Sx'1t=1 X07~ғϿ MOח_KŸyk]%KeE9PǟHoIYesN:,[+>uʥ:n܇31^y=6mۯ 7}dIF^}̙9[^=Ko-%R+op7PZ\{~z{~lV+%|(u /RWSMEi%0LVg? c%ܶs'ӧN#-W,_wx+EEEj%O{$IqtʌS ttK3_rP\T㹿=[ 4^}+s3ybo `6kϳbś,'& .Ov1 /?Â9a^Ξ_qѢ+1+ +'}o I.}f`0/02NhƔG"vfoK6idp9!zqΙ}GLS㷪6t"]\v9|%p*6s.QCp O4 Ghm5gICA~a.^;vIw&"#*QF "d %`degq83&#0t~qN`I0qB⪬bڅK),m>y}#q1Knk% e;y8\8K8uٕy(g7Ϣ]k>Fdw|{/ײ̿Y]FYZƙߌWRT&5 R9x(&H0ȦwfMaw,-cW5{4a'NVP@E@@'f؈~O y>LYp)%RTQI˞]ְ; 9P;|$W\|=$Y}Dً/-/O`u+au7pp2wl_YVrYL;k>BI*-|FURyW^bsr͜;zJ+*ssqO tr0p0.\6¡>]y-B\%,_w&O3uW0wӼ1 ~Ƭ89cV̜0nh4FCpk+cFLϷ+΅-왳tuw|v; O]M=SgE$a/Y0o!v3N;v0iN#Ιw!UJ`R"0T8)L2UqsǒA4Fb,E\8"j+kq8zRAixA埾ﻓ_ H@ȟG''e hƘclTW ~@}zaA K_u]K^J}u=EE4D,f3h5pq: )rؼcS*E1n 'sgՑNI/2j*#W6m&3FMM=fѣF8ؼ?>g>t'L64Cߧ_<?znN8^^w>)ٞSWyO@WnQ_8p$.7C)i6zb1%tdTM a0p`v >|HYv<=R,FA.u a8PNUFl~/0EI0рHo}c; k(!)&QF2ddQB 4DWn]7P5ab`:ǃA()8mƉh1CZ hY41z#u&</b ѮIǰ^lC5E:.a2KNXQ#*鍪XёdA j<@o8Ia*)bh4MFCJay&:tClA@1)Lq ]7Mx|!6=;dga5 #qwwP/ah KE)=R[b":C5"e%AW ,& 4HHDPU OՌx:D<=،T:qAסF@;N -mB"G)26lFb((\2m-8W`++?D9@CrBb!ߊrr ${eֽ2 PXQI-fs)z*F8ފ gE\U(+PC߿=U SIU-v 9;̹>5 2f'w{w,+'=)_#(P;j4-Rrnh2=zumi_Ո3pJ4Is3h$o4aѕ0 ^?X#čqW 1Yàb! PTH2w~+CSU" ">U?bT<=OaH:Z[X0|^6|!A(H;H6L  pζt]ޟErThJ85GGηWǗk>qWA:D0x谬wp„IlݴeFFj%:::0 rhdvt]~T}kF8x,L4 63jPo'`6)?܄ߦMYm4t𠸘2b6t6mІz6n#)y̝݄եdB4֤ެ( nD!T]Y@(Ƒ8k@e9HAɯE`p}=G:ݸtvw4i" bҥ"fD8FeFvS_S;>dE9(nO\E(H$ O^,,KÚ])MggiD"4!zU: G?$\?#QzȀqvkjR}ZjYXsdCrdAOձZusK8*'~Az4֧yZ]N$ "PWUcBVԇDS1ox{pppLgޒK)*+Ow٧%bK~xϽ8bx>#0]?i ,ZBIiD8qT|e_M7pҔ}`4UE׍o[/HlJ/TSؓOsn&9=;?aOQJ'[˹y߲i&$xK *r:XVE]ӑ002&|EKY>O_QPL&"( ǎ9gPrۇ>LF cƲ '=6)#ddbHO5~N-7ށjΗǨbd%ƑXopz9^V7I6!20nf`޲+T pE7`#ɓ=ΐ!\u~Wp$E3M .gE* eR.:k1Ѹʚ<wi/o㦥7_fB tÂYrn'wTRy9:9&]jēXu[72qҔl;NMˊ0muu9shG~#O\ }l5 G/ i!;.yq;I'HyP$yȀKNN@04! TbcMtۚ2AUO ጘ6gh-l51|XHhh̘õ.`xIU&1CGtBs)=>"!5lMh`4 *6EQWhaxjs8e1_t$ C9\%HeN/@[AC1l6N0β x|TlU2D; "AQ\Bs[;G{cjC* =xL= wnwONGRp4zD+(n`O0;.‹\v)C^JJPp#A'+HO/(Q5@ۑx|^`2>CDnzZ[(,0#*&k!uTfEpMz2ٌR7zԋ$3UϘ^YC-)rZZpi/8+ȒiÁI15e=NzJQV߇+K>!**Pl6~y[旳Ƣ~ @Oaֿg\{#>G~* owSА(\X^b+gZnh8a<\wS]JZ&0N.g IDAT)olҶOgQ놣k4-E*0[l_y ?97g+ɂ=wUu}pHˮ(px..+buG-Jr˨lpcq8B[k {vb|b+X&\yEwKii)6IMcW0z";waN= ,37oɓ19EK[;1`VYV }Sqz(<^}6+ p @EΦ̡6z=?jpz9>"q$i}B~M6*,l6uW&OUY1s1 @IqmK7 Z[RQ^,&{jRL Gr]M6)&c9VHCvlo܎Ǘ/G3 J0 rgl:9BrN4&9xr0+Ͽ;-zR8 LPVT44'H7毶oUpf)5]Z{fڏf˩&֙GGgWGZ׸c_GVzb^c *ٺrW_]C_7d_FdcMȅ3m`WZVxH[A_h4L,Bb:@E$BW%atZ"Kϯp8BS̮ Y&S,dԩr jK]DB۾`3C TYG[A%݃ƣ< %4EU8=Ff[#؃ɾuirZWF0i"{zwGZ]L18Wbώ z [v D "atj*K% QD>*0TAD3 f0f|z݊0u LQ2GqQ""4-u儆ѩx!0@7/݃!zcFpe5X&;Z:(=a`sDH tGn Qn_l`L4mDg$ 2rƩIfƒߴCvuкwr|]0M[7X, mAXǾw;r].@!.X;Gqq`6diS͞-5 wW6A'Xjޭ |sD!N:D=AE(!)ax+).k| HĜOktMwWV ]BA>^`/ㆮҲ|y{0~#Fb0Œ3y'ؿ?n6YX0/"wlGuzzz9p@> :::1\_L0y4a&9~0$IsYWٶ+t]Mo6It|eF-q^flL7'^x##6nA8b63kI~5 KRr5Yƺlزn^_, \4އK4!~kgsgw@V%#}Q<ףڽP~vǞy͝M8J;_x'FaeYo?cfgwg.G>ven:rۛsgCp&AQF7 0r cvQRX h}?ƹg ^o/μnWvb{wo8˟~g]_27WO5_/~ᇿSwkpl {w3OvWq e!x;~1k9}ǝx*/|k/xM| 8Y^w~7?vWo.xAC Wޅmnvvc'?~+|~~ 7U#m8NEr^#;~3?wo.SAvרoN\?|F_p+Oooq wvW7ۿ𳬜;?7}?臹λTA?ou>kuffgoz3'я ̩U՗N~} }[owHǎrb=oy3_5 @8PsO~gN_-Ç_F~>ͧOygǝ/̡?2{^TG}}o.}~!m**zūY>rWv?T*5^װ|s^c=}轜:y=d$oO[UR\wF8^F 5'| z]ln%nüWgx۷ox7;[_y s lt5ǃ??9~?ƶ:ݷzOr[>oN>gHTC8z:3IGlnSK9~?;!Z{_x |ӟ9|0oqew}w}]=}y`o0|?8RcGs1ϛ^&\c16wxȩc _]q^w[|Oq` wRRѫ2UE/Cz}?4FBMeXz/|Ҩ5 gOۏXpz t8YTTgg+M)=[}<=W{esLo;o>ӊ!2Fh_t,~1Wo8J;9/y}~D}4ӣSSxF7o!3&493X?׿P~im#l2+Rt;;&Rz<O~.K]_|¥\*u"_Ls2 3mLe&Rd@okwe//t{r:-]9ݷZttƵ ~WSQ9}G ?;97]ng]GB/%Sg\ʇT</^^3'j0H]>>rRU1E8o{K!2K1*pH6 !2cA歜n=7Hѐ[\I \yjWyy)ʹtߴ y)?jN1)/bί~\~^JYOg*GOd&Dqe/AS ug$\jl #EoNf44zzEJ#m "ew7/v$OoMT^9'R$N5NHc# ;QwJ;D˰h>NeЪ!.wp,~u<qfcS;Im:7e[8]?m|ȡV:b5ʾC}gv.SQ€$`,c:X!Nn4Z8`F9UdYqrc;U60ҦCFL'i#DO˖tB2{Vš&D[iK ڂF#lG/\B ϝ7b+21ALÛAs=/-'M\ujq梄@j]('G܂M4=3WF!ZS QNi&i? !XS珠y\^/W.S:e tJ'좠θ$]˔%|sr oTJhŧgeFEnlQ4)2g_ߣ+)m}񡇹̙QkF:) "{Vj&m&7oO|:~IJrbDzL{禛n\7Rk6L[hrx} -Q?/%(\N]{^w&vD#jL""aӄ{F,׸2ˁ kX!XoJ.-} ŪaW,|kE02D(w@]\ 六]1׫+=(^`C6^Ch(#j`.Lѭ;v Z$B%+8p$vaw(n7.l4%eic5khmXBm#ǖi}JĮYql֞<7͇­zTCvOهJپna91TQ?<q!3=t1J.P1QI=4A77S/qd?>B6\H k}6 h5ٺk+iEC"׭ӢqI{a0yǧu>v[&lxeYԘ|Snߥw49u4]R `}sWd.7>)MCj?V䎗Mj)J`1"c^X}N2ۘA+Z7v%zޡaΤ{w)ɇGŊ?|f H::˛!"3G%sn4}gDwܴ}ޘ}U2ʅ Li=g2 [K]޺.Ql(^,O|vڛٚd4 $i>d6K!$3O7L]~@S Hs=}k!EU؉ϣL*gY3œDcQ0HH-΁NW/B1(q0خ@:) qg[T<fP)\Vcaǚ0k4Kwnl>rK,v:%_ȅ#Q1e6ZKOQb efQmDmCCe8&vjE]undѭ|ЂA.!fJA}}p~2!c"%iZ KZH`bi2F4 1 yyF*I< ':F$Fbqa#6`m̮MCRh Z@|G%1ƀ1Z$F' ti9TJeJCv)9WF:%*^PvtcC8u83-6`Tg5(,K9x0+|͇^H{g=Ia%sXHJ" ~)?{^Ƒ(',v͡cHb6-VwY]`wgKh|4oK,ǣ1;~x n풴85T+U ͇('i"uvXD ]=eRJM9R 6'4IS_~$E~`)Cc`iy>4|RB]~0ƧaZՕkjJ#2u?gŘ>MOSY{?_e-otUO9 *Z9>tw bdP` ;+IFTI>ϼݣ돱-#\LIW GyGkE?j)/;MvneۏuS!E&s0?tp܇:]G)կ蝥H7VY\#!/qL.z{n4ko^Y:q){niJIS'kpeFv-\!p;u0-,Ʊ%Qm<#_ҴBnSK֟uqSLqN !{71q*`U@7N˜hp$C`|Svnwlqqm#-XBhUp}oT@øF% IhA!h Wۙaw%OsxMS7gi&^sM(C6ZQgjв4NJK[ a&np6 _w9YےmNWy/e8xXh)QZҚ$NP #V[M. љː|$cBHh+t Hc:Q^pExr#vfe \ۧT` D1_10y,`'1b$X-a'n%AYecc#Nzy(<i:cAb!H %*" 2?a`vf3speY5:T nBp8T4yAzL& ƫhdĈ:ݹR) _Аِ  M"~/;5&3""ݿs:)Ace2gc!Rzbϱٟ)R R WW$eiEڀV3n!-_2=n 7wt6Ii;J4lR܏#0+2#Aأd^",wЛ^~S9XuJ:{I D0P?Od! HoSd>de!zKt[b+=_;'I͇v[b{Ev$D%32S8ӰHE/)}7S}@d؞]穱sL0!,"ŧT7hl0;2CseGYz!#{ls2Уx09qyވ<m~? }߱ړ9q}>(%M1[ E8rcxX`Ot={e iL\:w[k|,3|i:hK>hZqGi~ O^bRF\˻pl Aobky$QB; Xkl>;t-hTZ4pՕU#QR&m`C>uDX!>]QbhmÐ۬Ypy=G IjG{GQaX/4QJCX8H/03|m95*e.-Q+WB[ԃTe,Q"`5D% N:_ڦ p\ 6RRǶEl" pKuE[;MJXyG;z]*A`{@ EۉZF0B*/y%\_gy2J6 ka,qB GAƗW! 5AM4Q#4= )0 I{Zۦ"qO:)̟I6Wh:xa4B"|(õ {݇"zmW;'bR+C"Jewڛ =E;}7W6.ɜ,1v@vj_YeY4%6 +w~`gqp hʦI2ydO9fW~gMpJuWG.NK'P19b1ralb uin)F$WؖD"p'RÚu$ ʰ,a>rZF >Hncog&e-C _XٰlrK3$َ O^&̑cs[+_`>1"{Gi{m- bpHCSrk + MB bTK۠Z]D[X%DIB; hE]*Ҷ4AEG8 ۛIa jaYsx,.(N薐}FKM373*q8z4_{c'Ԯ@.Dv ,M͒J.UVqd6X%Y4cCb$FD)"$)!>,RҎ1H ^/x<2(ORQQ02E;0rOq:$([`!nx^7;؛F;OQAxg&ٝ?i^\>.&՟4h|3z+813EIyߐao@oFt)E19GI5̗ Ɏql~ /}oؤR dR>>qt)yet|IE1TXzcӻȚl.,ASј h 61F("Sni86kwh.(C//},8 guzτd*D UMâ?Ճ,O_21;RB8|6,i;hL$P<;ͧnYU%AmkzӭE >i}H!<pFsqozd:RЇ&_o욣%~oL~^~UF|4)QDޟ\JG&Q4ҹdS=`N|MO'PzӅ1Ո%PP#Ú@P6!28x&ϲpN%l$ c#IC*BRJX%J'lo8CVR< O"%hʋl^Zᐫl a`#Q/WﺋIt0FQkF( i%l\F<UK1ՠI-mmڧѥ*±ZXCY,,{ lIM $IR$%¹Y% Jl)/ț8*JC󒥪dIX]9Rwڑ#ʳ4\:JDDq' Ek(lْ,.Ru}"o0+Q(X![-t"F"R CAj B E/qGՒTʸ չZZ8ClٴLFe ZQ`Gt"sOs_WC%F#i (t_at!#׸M9aqC̉*d>nBV@_{N"o=D (B, RV_^[/M'V Т:5YtIWҗse0Ep 4B$9xBݯI4 ֛648׈N“V5c<)z䞦|צΙ<-/r\~>?Xvub<o7=+l3{ǵcLzViJyJ*rh(㛦Q>3^6ax߯q(NOy9i'FN5qi~1yzεx#{Tt_NNΟQSEJ*=1-)1_ NB8DYDZ6vgwsdzc9 ,,.ضG-KTW}r-|(\YtM#X)W:yKa/ +12m-d ʆ/Юo :N$l![-v2;s(aa&qbCl#l$uHCۈUOZl Q :w Ef3+TYRijV*,jf܂>ƲK>0uZ4W):Lp2G/R.{ 4B$ҵR",q+&۴EԱdT=Jqg#W뻔<<K$ea>ID`Oa[O$e~,;_|ZQ.l#ldIlZU~1CBqD$*!4lJNKs+(e7)DMљIM&bj9 Ob7PiBLA^eRD4 +]pf8y!ds{Oi:F.}ybLvVyi/zYE6$;P$RqmFR{iΤg7ei^tM*?+""&+)]z:Dq8g|?lTqH)"QGDI ϶){>'@Jq,ch4F A Bt"b,_’sɯ6 ]\$v˫xW~-7/]nIu$Yv!tPʖ ɌQoA)CARo0s,"cce4p qF;8V4h{mc& 5%,J~ -[jxN KXkff*ɕ_FkEn4%gتHaDD`Z+n 常JZ ca@ ѽ HdRt9Z+ww9q8`!AcR`&DP6 $s3Ox&agt0b42E ڀ&!-,BfM yߌs(Xt\G!@w?.},B7cT!U$I@ŐHm 6 13u^VUl2*e70}p&WF)(L͇!Sܠd+s݇,L3ֳRY$:zQC~_A&H**M)1U;>f1%" LO+L/<O .mVS0͝Rԧ$ a: -X.;3`sww=w~$"YPznPbgPq9$'V|h3Q/%g4I;@zwiM #Zӛ\GǧrLgGǠJ54t>E>c7zI1g YT? AaJya,Ǘ1,*'9=.t4RB,Ѹ 5GҐ!ɧ!lGkaR0uϙĩg'=ؾr?8n<3XNrd-DkDB%1q%ҦR2vi8R2WEcAF IDATowwZt#QaĭZʅGqϲtF-qne-b6ږ^1D:Q6#ZQB.T}37fl sƠF[6tNFұ1P{mX8L#Ҵ @+0F(9i*>mw۶QH8K$ĉFsK>#㈝6AZffA/!:G”lqF8QB 8ӑYIi6y;&\X6-jJG!1:BpDq# Vqıfut}6,j,-,AҺLyw? -|aZ`]E.`q5\< (Ćvҹ*59\򲉬0)>gi~2~^En'S~Up5g\*Y>56A1Nڛjd(!٢IQ;Ӧ-NquY+&+-_=#6AaUͲm2~Mjc},N9P8r:p~O~+ ^7J_˽vʯt˙8!hA7#&_VRvI}nܯ$AiMFkc D._.pmIl[cavΑDǖb9!fgmsDIr H%`om0Ԫ5-\.{aH4zvx%fW7!&R-Gt (%1:8C :ί m@(*U.@u[Qoxw6DƢ/(P:AI%F &6%l@:cE$6xǡCDBtili6[lnmp`i,˲:aWy=D]';Gfgh4aJ^ІlV7!`IKC, ĵ0'J+-fh,`6e^|T1 ?&We3̴齰,hx_v$Sh)l}C$b"`TIMA4Ii>cRCC)0TЋ&J_݉ ʲ#)RE9>.5ViLl=1h`{ m#3t[m(9#\a8?*#@bc;g3"=3, OGL|2/ dF:͐lg$*ӍZ9~& e3cKLTwfwFi9q~xw^W3Â|Qk<bfb fMI)Uw14Cz.#؀<2 8ZWZz^:F"GKa@&&E_"hmb F+v{xHI5qITƷ!YpBJ,afnMs lh[\x#G/h>aX;G,% rǎxnnXaE4he C@EIt[n[4jxNЬ(M%ܵ5AMI8HWX[`#G] y6v[\C(}#Sb,Uv\&LF&IT% Z)bmq](iPz˲̰t]bq - .D;ca{uZ83Z"ı%VHM8`&Sۻf(cA`Kc[Dau $qCG i/sQʳ8QW+̵[?'zi쥣o@/'79&ҝU1pXYeN&T Ķe:0;R{p H%8ZP$KH [,,aE^,2r CuG ?[l*]ITi6nibH`q(Ж]/zWt&[Ef3_a]H`)#iV!h~s.!ǿA-Dc@6D :u d)Q1Lq&Fb& k#d&<\gϽlT|c1XpVqQ'$&>9 v}{f~ᜢyNB9UNsDR C 78{$8` O^fdSp"K{|S3DQ 9 g5L\SDqXQ93gՓ;O::bΜ?p}&,t9OJ9׮RdυzY t47I!kg>O6N-byT"LB_Lc#Kh221F|LpnbY ߇Gx+/och1r={׸]2{ĺ6a"hHc2,|x:&fưu I hqW;Fc6A$)k^&=2<afrrs'2yL7,ݩopg\:J {.dz.Qc±G!>,yc /?WmE2l| gPX!HϺHӳ@JbS޿sHRحTY'OۚH<:khЪtȣ@ I x:8ZE/xCG:JX,S:R:"~YU~ O PEwZ֭ >iB' qyU8=7llUW*Ʉ)/45ThP QD<:nr;8^dV:`bs,i/lUqu6 RWzf wR" ٟg68,-fԹo"UJqWU]~o5|.YR/r6_8a6(I]ϾN*W)H;u/=ya6JͺU_?(uVoQndhnվ4,֏"z)JY Gny -hL夽(4fl ғ|CT&Q4'c†^*'L9V<6FIJ:LH\a|5pQȣu 5vN_bU)R`ɝ#2l1%󖧟ľ͙Yz[sa!50N`-J9s(XO7I$R΀xcyR3)#Z?j) ^^`7Iq7(CPB ӂF)n8t@:P;D )ArtM-xtrW1Ev>Bbbل+ ϑ3DiJ,6\Noob >)nt=ÌX"Gd.;*D>#>{($-Qaq7amS@nC$) QL<{HX桭N8REW]ү㨴3n5߱fXnv~ 35^-wYЏ- aɠE4&eMy4 KxziXsypYӗ`QZm|o x;om':6emzCڳJ[U4T4VY2&4Mio 7)!xTpuj sIH\@KV;y3]?Sd#Q3ZnW+c(9IFXn;y (#"Di}kC(Pb-7XA ,7 Ca lAVEAQd|cb-oḗC)h .nS['WL1Dx'/5ꋚdY&bwwX1L\f|E9j z|o.[QZs03 9WiѡVKCS69%b,BUR:ӥ4I{VfoW`}h5M}V5|uju:ҤY*aT7ydh̭ʪ]zdhs2.iVl/sS_ ݸ~gΠ+D9j.ytΤ9 S:a6ō[: 1iQP2ubB/JTj+'x'978ON92ezNs)7Lb-lA ww% b5\fG1hfmqyfX <p͍H+T6sdc=<dy-<ց/WA1Uԣ k*@0O)CT1zv%+ \aQ(\ytK=Qa!#DݫיL$iBIML Μ<x{GL\$.mx$I!bR1dO8Qr뉒4$FC"gѮEsr<HsMERϴI kvj5:4@jj|YCunbWM=@]?z_Ȫt:XN@[(ǾQM ߥ<wV^6,KNܵwN S+8Cg KȈګkRO5! La⧽^ x(cgQuT*GlTK?;zˠ'Jy('B)u).B#,dbΞ9Tbw8&pLK%5zw<JVXcÈ2 ɡ5J6-(r$Rp* en(ZxihQI>ZC甩 $"JS4%$DIA7` ͦxqb%yPptHx#*$(h``:&`P qHD_)uv {QdW?8b=X<<@5'яa3<vNzO>P8fkWnp~},X\>QϱEhs >;c˹o,ϱExdR9vc^G,:|De|3p/y7y ?Ws<{ "{Gh, ˉy9ݹ4o-|*ߜJ{}QU,nPYJ3x Ҿ:?jrudM~K_e; t뛴sd{,Ҕ [5;^q{hztuP=:nbNo6Wm^ QL=ICC{d8fA<=讳oK]!{cz$--"ϴs5.?.YSx $DЈx3pj$1ӽ q<`lb]lơQX-: p^&Bw`IF~cɧADNlo 8 a;/`=d2 b"L3=En;r9$4CQLnEiJ&IN 23I0IȲ8xCgqq"k15H͂jOJA/0(8Hgbh64)D0Hbr{)Zs_NIDL-CG?Jz2.ۇ1[X #xfԇj'47|G_ѯ=~o7.Oq!n_z/K݅jaJ 1um.[oi7}~?mB' IDATɟ?լooCWzi/ z R;ۊpd4ߺlQUk~ ̏.MgGj@CC.Um徵.JCewU*r7 ȉsIKAV+O~:WU*o|&i'ϵ -AQfꧾ>PgnQ2/VQz{6RhoDkuWYR/Cu.S}CSÙ8iZ״js^p.W3C&} X}K|6w}O{62#봹Rڜik5}5,f'RK/s\OZs瘔0ysL?[! ҲΑ!&zBTu(֬j,t+ĜN M'qɿǙrP^8*J/]c\y!9@R]M;M%O#[,UeZ_:!͑P\ШuU{E=ޠӣ_'tD<dz^8< 93'~ё^b%4gAjyyrS*3S(|5-928"׮{pE2]DZ 9- gkk׹v w8'i㭲ͅswrz,h:\brJ: ޑg"!y|`+Db%Q>d-g*<;&ȃҿtjU u( h.Q'Nb}ceEyj) ;;d61H]y"(=;yNa'$>el<%hH pC- HEH(WD@P7*y^'xG W HW|(%L8ud.X)1YF 9yGnf+?ʂ#D I4 326܀`%fdx8-Dul'՗aܶWG^e__?hs3 )xΩ[59@z#}UcC[=V_;2̿. Ub[/Mڊ}j[R4e6_&iYY,Af_(Ops{ɯԮ BS6ȭk2.隍YV0s$]גVz|ঐ΂c^Wij[,\n$[##UhX5m*ԟkUEj@fj-o]ʚͳTYU]bau5_OtÂqC3q(,^7e$T^gsKW)OfΑR;c~|:o];'V],tfrVmi4RoG׹޽U|U\R!}',zIšsg|-_UZ{ :JW9kulRhzZewՌtחٳa܋(;鶊ԸaATCަٟ&9ګfc|ifnҠwdk{\|8P:NZY =QS47bB.d67_r7_49^o_p " 0 I>bs['J AEx"'fpEW!S qa8գa#^بYavPKyO^_ w FQ5A͵kO-r5?1&2T=OF;Or6e^(rw쌿H$ron` tl)& X `kd<#=.˰1px)xy0$ ӄx0RL&$ @! dL:LlB!ęQ9EA ×0H N g5|A"8#NK)id4aG1mWcg.SLgJ9FUbp(}s]r.Cr &IHҘ41Dql/e_C:c͂/+_QMMWz|:W|K w~3wmߏ| yϛ~%g% ѷ/^yIʟ_:7"CS\x%3=|{λw~?%/[m=y-ӎww䓼䋾G~ ['OWWu|w^ DCx;;;8p[UjT}e м|YG/Wt%;2-gyO8jU-JR'ֺELƹ Of([,՛%g[v\%Xje]ـr}ju= cqW 𳅄[/}39N&~ҚO+ZOU:S껍KʸPLnӕH9_juS]ofig$kz*/]tFp}yu `{?ӢۨY꒐VK5,h-=c_>ZЕ?9f PktNo}<:6㭑.m,En/s81L +D'8g)Gԇ[4 ׳x/5oA OgV=/?G Cw$f%L!Il.?uOgl>h89'L&y1&R`8{Oe$qpxr[ 6WT Gl6w.a.\^d9hrSQb C!G}(_c<|uTif`4J +͇<81&X!8&NE$A2Hֱ[~2[Oqf-Sޏ:K Q xA&@y{ObUS0qXHL/ft$'6 l9k^bNNί N^:O6 *SQF:e(Oo&L^v7桇X> #?ĈS ~Pz٢ܧ87hVr>Iַ[AS*{g2O?|x oȦ>מ~w?y/?z_ky^{F۾Pȇy~#tʟSDy9w#cOR \"#[?WWg2wܷYD3_^jG G].i*g"ھSW`J%W5PkɚioeQ[zh Ɇrz.?bRu|NTs!]g~\Z;G geh6[/ȌޜW}~lyΝpOfAG9 ˷tMcbJx~@s%MsՈ]/%FC4IN)lY6(z/%ky7XDNY4/8<<Ջؽ X8[ND<[c21;9yv֒pۘ0;|9%S& E~re(H 4 6EQpm1Ni,Te-ޅ+ܝlpR4bL ]\P ry )0qQC()PmT>V6FyNK F" #UpO+E҄xs)T>a}6ChGp6gj-i,g"c0(1 wDF0~#f<#Ta޼Dix}c<ϹsS4G?|+|KK:Ob,aB(6pߋ8Y: ܘ&> u,I >_<`jeϫ- Npzkr)g>qzkt|_e>2CU- ?;Sׯ8K}/ ZT'Q*ݏC.N;ϋ|)C>GoWu}ME]em:hJ鎒Ŀn"Lg $jH ,>BGVee9--2]j?@ +jt"q3h- xˬ7#KYO3 8amigtlϴ:x.g}dx^@}A x\HXw>Td v{5dR$ V-y>yx_:H)`c<c[gL}ބFus2="eoy'g<`}# SJ0@’eY<ω`5Tk aN=q`Ay09 `> E[18U(BK?7σFQ,xg A@Q"I!DNP3<]I=Y6frp@HY{k' x>(˯Dq1 "&8vE j(U)% Nw+ }b:$ iɂܱqA3 xa5ԡ"w._.ﳯϕsm_L ^"~1G9w=M2ᔎF g|k^E|; O?}8{[e9l 4oVtolX8wG~+õ^gih6t @$wʯ~;VRge-j1ѿevծZKRh#KeQ΁dmteuGF]DY߬Þ*PYI7}բ4eag[RK)_d.ժ ?5 Jfm<랹0mE2ZI5_TJNg1 G)IXVQUѣhjn5nr+jcfLX% Zٚ<9گ-h1AԎUt޻֬C!h̝=*S/k|I?iyoK ϡE{n{eR}ڒZNXnofUzkd?OgTU]HUviY/cֲҵ~'W84;eY^/, | K`GF\DmeLU_h$`Gq9pKآ:G]^=Z:)N`1E)e@u(Fa5sccoSYb$V WL±;C=iR?l=˲GGedӌ(D1-*.g E)KZBpݻB-V D=V,"9lp-fc ԓ&"1 ( ɄC666@Uj=E3QIӄ$I1&M;"LTȍLQpr8g̿JzcxRJYzZpzxEl~lꋐ5ҏ<}C1|URbL#ݿx׸<>@nwq4*ƑiA1#DɄtk 1ݻ?v> C:_MGߜplCUٻÓ} 64Tn8~ɗ:y9}/گm?SY\a:>[~ęu\ay}  ϻ~Oy+^[9}/o^UݫWn~{׾?.okzv|Ƀ?Ҝvq@48CJ1=؍I6O|,a{|QLȳ ޅLT:e P[TaM\^(d* 7~aO>Hc֢ C['y M(Y" l [e҃uE?HYLd/JTXg8E؋ FH%lln0u$N 1$)Q-0Iw N7)wg&&7EiH[Q`٠DIT\y:"k Kd ivGwv St2ᡗ㞁{Q)n'ȕLEː˗*{N2N8ehG\419HN :X;F59os-zO4viޒ (Y<;nZ?\__E>rǹv1/⮗>,˩R%~3gy?_wpKDQ{Uwx٫4g.'>.^ >a[xo:/?ox7/rB[11)\]mF?saNv;_~UT mnr+_խWʫ}{KV*' 5u'n_|繞s;m؛?I᎔8gyږ?3pmq*ͱ_ fAw1wό8g6ޢao--cT;07D 'DyΆ8n֣)&LS]x 2Č6DQgR< 3q|?X\IA HTݔ!ApRIϘ\Ĭzi+{D#jfFL1c\Q&(rz7'A9ub;Wv2roPQ('l3Snm 9&7(H$%-|"xְ(*.'@`rcpH'wy'09 $k.Gwa>&M!!$ DB}{,"Q%QGC;XK֑nq;Y;w $H{$O9pd^ٝ{7?a^pc#QD$qzĖ-] g!C1CDwEGgI}1rT9tQaoo o\g9f>j@vYušh%EҢ3F[U-x???ÝOCZ{,﫸ȼ@ʸqr6]oN.k2(0R_g*0hU\+ PwUm\7km>WoV;΀*M7/G3:-{-?n`iE;kF9z1kάqk958 ѩ`5_ˠ9y@#*fowgTyf ]gٚʗ% Cl3Y+7Kfz=u6UfF=oj<͵֘@)RƞPMxz>T4i,E19QPϱk6vq%U7"-YwWwB, 8 epw3˨yC䵊29(n,.Ⱦ5 /dUeF#w/ N}~F8qb?q ~]^%aΡ%j Dk#$a@%]6){QL$ʕYa,KYA69z7:Dt0J5D0f` ~އr@H 5`5b3ɦ?Tܿ^֊J تNw\30(m`L~8D fX%`5F)PR`ĒN8jR)G'(~Qxb@eLҔX)"%,C2?q;/Kqiw Oli-8}+߷Q4Eps?06-;)F1h " IQX:eQ0"P ctdt,Lns%&Fǚv]vysz)]H;S>x2:[3H$CeR$X&lNs~IWK16)*2L魭Us~D/JSUw!p6PEۿEue:ە Ws@c [$nE xv۾.b oM^ "/6dc? +57O٩PuaeorۅFf$ם sL{MM"M6Oɵ]\$E{!;amo6mNCietH4ߵv7-# ҊS)r["i|zUC~Ct1xnXed xDzGF6-Ö*b?) $[%4&B ]Y같`Qhqx(s,bh{Ayb3nZ+[GU__woҕſP{W>AnW\zڽ.1go”ZlzcXlsxsVݚx+0&W87bj~L:e %Vz)CD~Ŷoe(}ČE/$dDJ#F BlW⨔.8$nz8~I;LJi81r6a0-nyZIȹ@tv~!a6[rEYt:Ì Gf<^b)^zˡٔdx8@4x_D">,C ŀϕh_THfSlF<"hpcgXH& c3VCu`#sY3=l*6' +ČU$X:Q*Bw߱q6qzc{m1ʄCk8q[G) Jp lAYJd)^:6kYEJ'\R:l!<oż]̼] Ьu.C, S']u"q}v<ڋR]ӧ #btyMkW\۩sa{D@~X,i+paushsA-B% `˟ e BE5HU 29L GDc<0HM<$"_[c"O/52^NfHRN AGLg% (jp7Aq0+ >0^]f" waF tJf=J?*8!K4%IZRڼ\BxLxŲ7i{' zV+haq kp-dmv#9Mf5&v;[t9&c6=9CX^rteUGٺ.U(>!M3&F[4MpXD+8 bc9.VN!-n8޲szCk5|Xr** x_yE_,Y7q.5{+LT33]+ˆcES,RFݗÊ+{A,VkmٲQ4}>T3몧}sOQͱփ"AKR ɡ03ޱ");yd$w3GF$CkHbiz(Zb2 8?LS$Kʝ^IS\+9B Z,ɕ[ &$Hb`"MH3D [l7-g.xA7X'Ʉ1RvR#eL(c N@oP"$RgfxqZeHTDPY$!qS11Z)ɔɔ,,#i+x IDAT#^b8vl2!v)D !M kz5گYhQl09p~ȇ9{. 4>OttJ$$v¾q}'7b9aS5$vZ 2ŷs_'XFc%$dBaYz [\y^qinH.Bv9w^ :-'ϭdoYij-" 0O6UvU]lmc!"C)a+;)ê((xkϪk ud]FOI(iM+qzX.ԇŅ&aomSNw;؋r%˰wp*4}x~;_9:ǥwoefFj!#VAɖnf}(R~P*?nhRuiJĒY}<0pw\ac,C +R rͲgw}|ӟtFˁs)+7w?jOr"YUAcDc+BaEkow `"4jq^I-Q:D({vy-JsgW7ۊ-O};}!K5e C-ע' (Tz҅ajNii&A=uy;5 rn5 ehrv {Fj!ahh^WTsF!Qo˸$\\rЃK3ʞ!e KêEUy :Hi1Tj;zR_se:ɔusW A%)SP^ZM3(g{ͪ8\:wq=Zu&bWٕTxMCq*e_xWym\ٗc^c+" hnv4Z=z u5(wړv4X;?D*FYAf'e)H2%$V9z 3'n9My9GIWe(Ai^vJ n zKIhf)I"λcA4Dq`W4!ڀ8ާr~:ڪ־PUMPbއQ\Y@b8$'h7F;\pEZj?@n"(VX0FĂt'f'0o}$1inq壯î@ãy'nn25c![bR&n$I9Xd[6e\sfɢRZOgf k?SG44=)D[JA J"Y& - PW^jk?Bxe-%wέx?wӷï- ?t ]T/`b]0.s%iU,2\rpY6 KpI* mژww#R(YD32K#C>;yyYcK,&zQ~)ɪ[.q-L LҔ9di+,;\V~IJctJddrцHE^|=z2-WY@Ε1~z.t[U πZ2Ώ)@2P 21HgLyHid"MUhQ(/P\U`&UB~U|}iwq41ci$9V9+P.cv?1b&{:rYMD X#1ө'41[,w7W.oɀS'xL("% ҳXpE1:Ҹs%9\UUYߟu(&as {΢B /ˡFAy {// ~؉EJstCUY0Ӟ|ox?D/zo/o%v#~g￟G}+OyWmM>WӞum?\"7ӷ#_?ȡW`Ӕ7o'Mf<7/J/|˹7=w|_yW'܀iy?9?=\y}+ 7?ě&k(n~=@ZX\3x)Z*AdY:H V6Ӷ"<=Gvd)*-RtJe>af xPGR &TUI~P+P~ hV[KK*b^%;֝wQߵ$Ss]U_nra)H%!i3w9"_aEy"ྃm5iQkUծt.REOɼN`!w/_/GCұss.6} 5N)=FPwt9wXSF U\g.Ӥ՗n%\j3T͚Q9a57\-l%ÐC^wac>]GmwN ͬNf~v (_7;:a#1=VE+rfxlKfOfәUK O6$mC ǿ7WcxiJbV=0dڒe3lc\`S-(Y{ #e*ƠFsֹ@U9|][[H(6O X2jy!ۿ#W] f>? c'Ǐ Dql]߿fx4WQg_+ro_'#%^ˡWx-7ďS9ګ};2ɻ}U %5oPg'Uw}ba2x6}5֦S㩙=_PGd1)Bi?P@KM}uo|bjyxmف6l+xiN`yڤwn.,Rݏ˝ݵ] <؋\(e.M%Z|< sZ+WFǹԽ(T61^;9B5:˰[ YQt% "g:KfZPXbQ8"]M m[DҌd6+I3s+|vx1^܈ʏPq3Қ79?8J  0bi¾8 c#\rH`m6b-Iqcl$06H4Iq8|VGzpku~vɩbqqmo#ՎCF16$b$'#lqr \,,%ܵnS!VBDhh29 8D2q$.7P!;+)8^X*KngX9Ɗ| V;R7 kMt//~wSpQ/7o}_P{_߾rk:h\u7\?9_7=yZSwhƷ| ~yTR4\x.^BAQSrQ2(VZ.uoZ>B4P2tƹu&[ı NYRe87IL-ˣ:VHXњ[h9G$dYRE ^EcF} Qy I2K"mj eYfW+FOsH-шh8"M2TyP ug-_R툖dE;Ng.˝G_saX+0րx k3661F#|W 1pPN#W:R 13f. 8z9٭$>Ωs:syNxO/pz53]g=24cVRN"V WVىCM'h,i$dQ@SheDjo Z#Fs$Yي△9CYBr'ۘȄwf,?븍ߚ4"W=K^b~/q3Ç[' g˷q1~% K<~%~;y@4x,I'kteU~7X^]S2U[zn@BK*׌TBFmn.fOa 3hkkGH]}M0H]7.&&=ו%*ʭ !ѷ-MG]9PoЙ'Aaѭ%s wk+LDVȢ)+5Zl7/:\J52SC]/qÎ;ljBFP> ցRm-4!^hٲGdݯ(Z)W˛ֆ@[ [NacR*ߊĬ}ZGô)VJW̻B:X GX@]||+*w89p [(#"8ıi3&^frYimk4K=m+11-GST_]JdÁeRkcVr}#43>0oi_ugHu͔O}3>'< ;I}:?exk8})R6(D>s+MpX!LuJL-1gϜfu4Sy%S.WNvqT4'5,]q td(a#W]|??s}>g8w5O{swDʡ].ȕ'ԇ>Oz|=`5*" $i:(IAn4N,-PYb4-)TIgh.J_Z­mC9PY sD<{tQ uYW;ДZtpQ ty 6^RO-(p-%.rc IDAT⡋E p,%o$~ӫIk{CL%Z iQ:QG V ] }R+XT GR |epߛ#%NCëuTY 4 W{AȥP@4 TOxkubv(Cf|Mרƾ9_>B-Aiژv<̡w4 l="\{G;E$W-u=Wb5D)\c-?OvOQe_LHZid4bu9ij8^pmm~C*P )A9bYM)o_ļ_(Q(+hQ/qh\ΣbrơF16L0OpxZ"I%YtkҢeX+$Wx%-C}+:5W`VHYI*gO(_9]`sys[)ÉcLٟ*[s[RdH-p #0N%R`l&70dɳcG},_s3Bt>L#hC+T_ >yށE1'qsC *rxӗdsw/r>ƫ#x!gU1kG<#dKKv%7~szyxs/-?=[5725f1's)Ο>5~̂5SA}ճy+oO?ڑ֎9b{Eڋ]E{mq҆ڰ/{@=>9ڕ^Wƒ7`R")1vYI>h }T-LpzUYW\ߘ\;*a( yU>OڽRCyZF5ՇCWq2tb1PWEA}!RP[MAY_/%̒o~YiL)pQ~SˏYeQDib'Shҁ(yKKWPƗ "Vح*i-62kh6hMbe/U7hN0ht gw Ispv&6Ml% ཟO| ΰ 8zL 2 $#Ndh\7c5$S@"}eHctƦ$MH,ˢvJCiyHᯔܳyq|wFGwڠdSjs?75k{yo߼%5>߽/$g~?u>7}݌"^0^}/gUuAW,/Wz7W^ə{eAJ ~/Xڷ|Wlsb Ae`Sh)-chZ X!F!&;dApJH$Eb򁘇]5bgxxr{Y>l|,X{I6O29a"&oDc?FIKR š$Ceh]>@qtyVZy̙S0)C/Z|1pȂ?~Sg šF|lc$-` ^%H᭵b[;'?z#w0!Y~&A*NJ!C(z1gm 0^om):,!H¤ɬ`50rymfЭnH(?5@]i#c0Б¦4btxaoҹ4IH&SΝ?piqaE9E}f'$ֱ~=k^!gXɌne=YJ$d)j+CbFj?FٜSdx+mN0Й%6$Q`E9vS~D@;a)\fR(`,2hȬ{dLj;eU r"?2`Ьs/fwlJ޾J[w ԿjonFf/9m pg?}#$Ν>Wy拿,}!P\wCl:;ޮ>!N<9^k^Y*y<ąJЬY<,* z<BbZVKT u5^V@[rZB) ^jCG $- ڽ4:tTc["K `zxU֢0 U_oȂ r. ÏԚ*i\` -u:iN;5Y/IA8XW nC݁ K\TCu5 WX|Un·̹Xr-kFPP`YaڨS窃yehj%KWZߨ{W,¥6 C5#tfbY2BaTBA;.M%ߋ\&dWH _qӍ<ͧ?{wswtJc{noᲷ,qbq̡p0R98F'/@ureTf~͹\IO")?y\(}rvOPU#k4E,/hHcޡN[(E4Qm*G8x*å!jeӄY*YIϞd▙ $a6ϳti/YĹ90B$XYC; B hJ#Gkm~cr~}NC!h4)8%X|ZW?`tXyY}?/p@|\ &yY;rn'a˰}!h@,P+:..8G5=v\珳u̪-@ S_wo.2KW p;OKSX0~r*O1mgbgA:t]B)/Q:6 /6.!'Y̩*Sn_v1۞mS4Cdn9* ij<$(>SRߊ\t%x]0D4DJx)>>Npbp,Ϲ\8/YwuR ]Brي'ч~AYYʜ˶яAdy5/i2 Ӊb*NBk[^lqQꊔC.?.}2mliz=qm͎QAd/Υhדּ)Pӷz Yڒ8&4(g|oG51Bg-'CJD/L%#i Xo$ o4P2{ݝ2TKk/YM12` Yyy1i4+1eR@-4 o֑J?%iP/葁Uemhn',X50pٱcO \!Zfh XƙRHcon(YdȃhwYht9̛;x]M"~&b,M e 6!AaD/GA8De]ѣdVJ1 ~Eey+#B.A`O՟ieH~Ԋ;V&FJI\ ?*i(O!׏:VI8i-yBd򔘾LxeB64M$(dɣ~:8=:s' :`˒\6Sm7EYZ֫q+ Ot2X5$圏1% X0.TX@~=8JB]9ږMRUV+rؗ\" TyH;o%ST篹o*o˕tVI^pF 񤇉| L!$Eby 12x񄦤/T-4. `BD6 N֢)XV&!Bt]ٖʲ$(PmTFTIͶcITh)O64Pl= $d(V@ˠ<]p91[n".h"Ȉlӣef8%ԔPL+#qb.W7 Q\\KnǤT[V4a֘лjۅdn˗}\Zv@I=Gb! vN2dØȓUM:ķA JA!El+YOUB}wr2=d1/X%^E%al:3}u!˖9$;'c5-Q2Lb^Dh1IC󊛮KIқ'a IDATb hȩH#;`n\4R;JA\Au^STٟ,HD~ǩP`B >a6̻ )OdS.mUe;m9g)^qF_9gpZgUxh(.| 2"H H gOy15$%Jo*Lr^4~AK-!Ջݠg)<M~-{h×A [2[u={TSuZ,iyVVw48*ar.LJnvۭw,Ȗ륕fKl= 'ibړ6&ɭQ{)&Zq?(U IEXz%7RͩaOEzچ'%ߒL%I!ѶtvxtWj2N-ߛɰW'y(o[6]QL;k5C 1%)o Lܐb=,5z˅UEgJr;MxWYHn@zYR~Dň(IlBR$,z${6yT'4REO0(/{aS%gsJ2]`~i6FBƔMzM`c57{26xz*{gWŊL>Vǻ; OK]{ڕ *ǀ41PsŬ 3-SȎMx(#[9Ml$,J[OM"3;p0{5,/SUu[zU˪@Tk SN٫ 3.dŃ_D<|dMwV}C H+9zilh駤ZiE:f݃ROׄ7Jӹ|:٣CUd_t\}M3Pm:)KǬ.ЈTBLI/UC$?SZ,z5V`*Ti?/N3 i a Ԃ.  HQ/y23~tyxM+dNsgۯvt̃yWaIx6H8PÄMlicH~ɞ OKu|=ֵE&ص) )J&¼Ce0tx_~ܰ6x%Ý@k`x5o\g$d}ֈ57P2, FN^Mpū[:-8֊]I4y:zS6bZ޶,˦HSR^tC e=d2Ӭ%<ɖی[bmN`DY*CNWo[XqP3@5wi^=2GGD&9SSd Jh)Z>%P^}oyr:_ U`2IitT]۾tGbquҬz1 V:O+>&Ѡ+C]BY)E)!V6Zwۙ?lji3.7Nyw+M>mk2z,,2c9JdoC bޞr:h̏{J$]m\{xS[f^\~T&- \۝b+duA-沢 hɚܢK6e iIT!ͭ9,ĕ㨑|O ~Q#tZiH%y#^@$2$JJ7 LeL Z.* V[++%pj#٨9uJw5蓎by>dYZ~"fH}ctyߑ؎ؽXc*O`I1ޡs Kt,9}5z")S_U^ kЍ vEY0ף'9HB{x`c\T/4-DTRИփ:E2V폲$V{NHgryhFHu9wQs1״Qjr%-cl!ɿǟdIw7/ʲ Lξ}BL}Gz8Ĝ>pF CW B7vllɹɖry[,Y4y˴Geh om ͫG}n9>edX8,ٗRA]-Z/!K9I,*Pe zv-'\VOsb IDHbZF6W%P7Di3 [zybw`͢3g3єWiIcm<hfkLt~5{h軝rI݄1 C+3hWܧ8hVʹpn^u1pÅlR@NdmG.uwީᥦE Xm09vKϵh|A<7 2C ]WUF 9^hAC pe#fS%,ndqZ}%^Ggü/!ZL[2.YVoCbd`oUV>:!Ѻ=R> 9nzcvU: E^[\=F^xk2m!뼞G UTJ_NK,B6]WZ~7ؕ! ڵ]3{P(yW}qGaDFyT-2%/g: s<&1Je$ǩh9SZSDyͬfgR&ch9粑ȞL9e#ۼRj5t#uɾnpgT CdOz%ɍ!`^%#;}9U*9p$? &ϳx!58,@(>3 G4tIϏE/ӳ&qy2ԁ}Ѥ# T^wn9/d>#Sg}9Kc}QX3jh46 ½!  T\%y1>e5U'6=͓YTPm_]> o=1>On|C))ψrY;ߛ/5D GVʑE(mG ( +5vK3)[ul hIw]ћ҆l)UKdwg#OoQLqV4Eo62s;lo{z6Zؙ{YL[cyYtY'jO.OH.MB]XlkQpBJ|;uUA6EyLe&/.hA5هJYPrd@C4MGҸ'*7'CL V^fwvxX Vv2΢k]b/1 l{'|sl@C{Ǫiz4<¦7җxyvsȠh62uDmy**`Vz):.[xeZCiYX"hh*_kT=HNY0x8^Jhi bbT2dK|IG BMoM&+Ƚ.C]#V㶠?q,.i?\;Q,`f@A۾ɃeFYU_&$}h"BAio5ȕz /Ȱu^kjoVҢ)h]c0M r͆%Nrd] tճ%#]׋a)BK Ѷ 89^Bkz\i:ˣ86 *u=ɹXV[ "Zd],G ;Y5㲂/LG QfiYR85Y˒ @˜nndeJQ]L"6jddqbK33D-JGh YihVzQ۩Ж+ i"} i/·COåЇ !b#MXuly8I#_ri7Q:Jn7qU BJS%ZMgzK%<28E^X>eW2֝#eBXv`Rmٽ,mɛR#M"tsҩi%O v" _41%kOEޓK_ ;ʵ;){͜bn,SPd8l/CE-5fu3<}+5m6y>OJڊOu2dѢV=C&ȶB_0Ѥrs]"W}k,ٍNPݤtڭy+Lm=?N{(H"|{C6I4vAt3+F0PQxeOpexP#Hwxz{i04{nC|c;ˋ5s7KG8Y[2KV_"(JfV&f~&%Yubط _.mF遝bWc}+>iyP/zZ_LV7)-[86v3y^$l-CEo0pNO̡d^{ Lj^c h,}:~=2^0p8I#IIWZA(||Pǥ3R2D[ l0[t] Vf~&ZB*0Fо1LtDNsmIkJ }t=x.F)5h&;)Z:F-} ?Ȁ 2\e:ȗo0ϸLa)=؇WGD1eɽ0[j!/dW!uHb*7yN'hrZ$.M\L|gP_c`ُw+P6)! :|YG~>v.QAX/2]{0 t@%1a2!aΕ E!{XS<O^ 2Z2"7TUTM*>4A&qh$ucG#I N+isW]oC5J{U T-XQQy+Ԝ'H?uxw2]j~qF ;$0kwFp0/8O 6o lmT1bt!68oZagp%o!qA@х}qe9] fۜ$aLP `Z9J.K܎!ceCl1-M`#qk*Wd8,I(L5 D7;Vn]&hk!6լ_SD].8/4#}:.YƦ*r#b7!Qn+CD҉#7C)E׃e]k'K%54†vX s94X+nOZӨ*cv'iC;p_)bYUy 0mhibB\9z:hJ2hZ0҄i9C`饧\HM3ko-ȿ5n7G)3QOOX/az߻F$斷v?N׀9_Xfދ.I5ornL6Z_0 xKKGUs,J84D ExشHW]Xg#/2gzPNlG9 $L떗'KQ,S\<-F?7hZ f>3-_)=3uQ(:5kIXr^, 0z@!ωy!<+P]KGl}0>Q ńlL8tdZ窍/ty.j&OC:{DHMP]A6YHds"IDc>rғcgȧ h݃G>!"<rDfYPRM\V*8ұ .~#oAPL2* /DG;X!G싩 5Mf=m@[H3T>;TD>cMPF IDAT;qF =H:zQ-eD>.]" '~Ȟe=w5E$'&P'>HYB<~tJvK<%S/>6-u=s?mK|5o/ 3/u-;. \,&BL-2誤4! y9V|YF㋐WE$4A%y^WR&Kb6@blMkr*Hu_X屢fcGq‘?SAdz I~Y/\ސ]i5TKkLa{ckRѰ G+Z@\'kud\`r첑>.;Ѕ4;zFo@!죐ֱulWv[ieuVhT{ (qbzVȳz[G$"aB+{V*}.uye?yrka_\KMc(T?MjߏXe錗5khiH_ۑbkgEl&ruS$Klj\F0,>CV)iH Io67?=LEC4 {k{#^z3FKYr4`z~ 5O <.ѓĈ $`/MF҇\@#pz&"y亜 ǐ;M0zAnkfMNIA( 9'y4s٧P܀E~^Ɯ%!Xm B%76%fX&Yo#%ު#W=pxOEC J<.%csHxLz`3R* QGԜ <zl($!šU4&Q9d= :ZÒ5000c Cqk7W&9PX]r%J^;eu"DK8{6Pb[k:y~ CGұ"#]sqzM <Ve~Ԋ0*o 5C ,w$.WYGꌄEC a\ s C*V55 40cd(&IXjCǷ8/jepn!P61ְdQ9Q咲KI19KfGJkv$ͣR[W&yG[pYl4|@Zxb;]Ccʋe8%6000p8I#*/~*y5ƍ!'42tVTHo+O?-$qz$_tmҊ*uXxZF46E%)*Cqp:<} q18̃%`ГOG›Xv9C~H/)DLZVA*iE;@eށs$:}])r @9F V'`zr4$ǒ]|32(Ë F*4+Y-* h ,5,,wj~O1Y1.,Nt|Pw2FHQ\RY^X<4j5oJBО,n%J_$oyJw{_0kY=Ẫ2 l* 1"Y{-{dB55&Y1'!wU., \,J3~Qql``2$@  @֌A@@(#tUYN2+!JMސе坂Zin' (9 ) c1.i:F-h"ZXٙ'gvzHԑq1v,!Br,-+OϹHSe.&m(1 ɠ.+AY&$d1~*u"aP tS3孓hͳ6HCqFo:,5x3F Oa'ʖ(u!"mGTy%榩([Ƞimףs2b--d:|8JqغAE=yvƣc%]N\&hD) 0$C,(~!ޞ&C4,0f_#SyKYŘ)$SY1H-5ih`8I#>9ܙX 䂷X6xi8cy898)[ h\R< o +PSbDJ6HSKia6g>x4@6?AXrAO6ʲzdˣʓxުѾf:/vRz8Xy*3I/Y>Ĝ!p,eǿ=zEkPY&AګK@`Ly<.K<)!c>f1o)e2"ʾSl[w3i.Cot&TiCJڝS i^UT,'"9@t껳?2Z)Ki9GhC&mGXT18/W^D!CRG1=S@(Āˋ47yv 2fRF³FƯ:bp)áx.("iY1./ "+;'^z [$@k@=IKb ͵Q{oK) 'ِ)",HPϵPFV9uqgg&})R>~pwk1w'uy)AOͼmHΗ8"D`N喨s18X(1gв 4 4=iȟQI{SO() )ly3e,KҊ%-g>sB#=IRыI1Oul>if &_Pskw.תf9r3䔟m8DNS\Iz WxOe5E}\.TПͺmݷf1qF >B<%smSU%c]-Ur(#m0 0G$G"Nk+$Em5̳IZGVaԀ=U PD}y_#19jBxyZ+QʋQ ؙ$V%R2#F:}{d гRNuE/W1(e|NjO+!22!2NyGF|2Я|M,(Yqf6֋ TwB:ѧ5N4p Xg)bmm#ic􈋋]qڋQ{m5-aÓ㙱8BSõf j! `>]i/~Lm@٥z_A7Q4B]ũw)ɘ؞ƛ}P@6$^8ž| ?~)(YR~{đ,ǟL0W>e_R]G>7{C^K&%c_MyyF%K7^jB =GR׬wFVA KF{g$duG _eyʣF#Gb:*'MW^^@.uYR Qd{9ELiHbR?:we8onQdNb->eyms9‚<}IHkԆϐp8-v= #O{8S$[!ӳNS:{^*{F8>G/N^@!K¿<S::{8.'t/LE;W&m/|yϿU&y%ԣ"c gzSAY٢u BfL񰏁 Oϲu{DDC}L{at䧉^d+bR:kWK:LT^bvJD)W&{xd hÇ9TS6s sxqF\[lMk 90n`_Lphbe=`3Gޭht@],{Rk:z?{M KZ$ JZh:Qދit%)'md#lbz/(nVfq!Ci|U #)Lµyp$*$NJx DgebZ~GR_ GW[(Z!R^@#axHIZE•G,yKHC?l-8M#Eeq%k.懎<,7pCNUF -RKݽH{om+ Gƣ*VV_V{ >SƸޡ 8O@% f`U*C-rS{Qԑ$BBd~B~=<|I3OҦ|f!@XǷҼ<._|ƏiG^tK;# P']Crx+ޡx%$׵s0N.{Bh%#r4s\fA\qg#Krx!>FAQ$i>8?&1h uI<\CrI|lc\u!,EcUZDG־T͠ MҦ|{}MTw> (A޸C@&Za8qk?Fn]O. &F:y`ȷ8y(O鍓:1_,>#:qYLCF妞 Z=,ϗgFh:>tq1mi`1Zj : ;GC kY.Tu*e-k^j\LߩR~(~[yQioM[0G{l)w1f)v=Qǂa:2lᵲZW'VW^cBqgp`Z=kI]JFʱYK44j|"ENbX3{LB3<5@(\D[lfyS$W0Чjd @Ghf!r$caY,b.6NtD9[k@{:.$ۓEx|3 IDAT١jo;2G\ _ʆԶQ @N Z 'o~7^%|^0 ѿ=DO'\U%k]>!Bzkx,_a8.~^~(|HrS 5"Ih2)%S)Swu)M$)`%e \U ?N8I9u2SIs}4*'>`+93O  2P$g T{tF5?&avMw/DC>p8M8I# ft`I?ΟiƟ[=.V__gz<_?jͤ+kuzL4Ta;~魺zΖ~lDNB= r[e's!'p QvLKЖ@6_D֛Znt0جpV CX8I-Bdŏ*YN^SBNmIu~ΕM)x, -ˌ$+}iO])iiSb#qɠM 6_;^mZrCP-g=k95)ށ *Җv`֔ 3E8`~.EiW*H.2vI[u/?cpo]pQg}S>YF-N*;-[7l%WqIyt_ʀDFF*PxCw.w8?EY(6}nIjmgm=d)+Nsl+MHelb .=J}kMŔ-܁0G1N3˯d\^;?}xᩦ00px-j֪ne@˻J%tWN?㝉!޴K6cixJ MFv9/NAҴorEL:[ X#id l1ZjzhC){=fH^:}R9<lqr61+҈BFƹUߒ iF*: + ^2ƻr{03yA5`"L/eQE47vVne/5{E?*s5JH=jN`l߾cs>Ḏ5h?"lZ _Dm&a~݈ڕaA̍Ǿ$ kaϥdZQKzϾjsm^M/RKnv,@lv9,ړP>g4NIaLFW{08Y(iȱkַU ޳_YFaI4}A; rcL.h('p8A!~gRS?9_pgo}Slr[{[>Y2q)E5{a4е_`[a*C.f!2z))wDM.ѹEƤ-6&c.ѴTcқHzdysD dL=jux8ySnq gy"٪k֛mu| s8Ƚ{J)/#d g2"LU}3=b~-^6KHV=WQ ـ ̃–JS94G%2gN|Ss%UE=O9WEr-D3WZ.tD!D,Z@ Դkw$))}g,UGPS0^,a]8w{]ƛn|UWMXx3?Z{e/a_{-ok_O'C^x+^o{ӛw= 깟e_d՗ח 7ý؏7D/Wo7?ŋ~~G_ַ>+~U/qx'#إw/4[7K6aǦo\dU&kIɠiŘp9jnoc`LS>pF˂G<ʕࡇ׼፿:xڳO{s#p#nbiN*moMa~p;oW|wӞ} do/A~6w};}{;OzSS@^8 o߆_}orwW_baoyw}߃o?>iOoW#S CFiߓ!в y[ '{ऩGQoxk25^;{.MOnߞ)/OcG>0=>[9)>p媫UWg&#P8??y˛ჟ &3?/c?#>=.[^ҧg9C8VmsQMY`(3T/ҷ 96g0~ Qa21Pg 6.w^?k^rxk_ ? wu!"ϵ]~ >ü]uuA՗_x9? |iy;۬~ Kyt q<3;8gWHOn$=r3w9t|R]!+5'o%*m&ny䦦c}UlIn+P:cY̭gͿf+}ZjnctdXx,ʍGhQ.S<1GJM'}3!M9x85ncI2 +KU= xt & 18ʸ6d-@b5ڳ%獹~8>8TL|@):>c@%B#&@$,2 9GrbN݅|MEc2! k\4rsλ<b?~ᅤnx|,Í7 s?ft~_)77 @[|}</EM7}7ൿ ?p]w/矆g>y/}I ~+qMM`5rs]sS? ;d^|Ky۾+aOox=+?G?ς7wW>"}~o3߂+WT9[)z!_O_ }'?q yl六ÃVz ZhhL"PEYWVJ 'oC``ߏoի94׬@dy0y od9Ŋy:/yFYGP eNl,e>kւͫ67}v||~Vo7¢ 1yc/dnj)NI`!ceDSrf:&,_u(iQOQB8$}\H#r i ۆN6.'?U|ΈWaaAz[>Py!eL02ql^\8@;&IdAK(m3sN?'*. 3,GhK°"RGz@Z_$=X cdP8hPbr9X9Mp{[я/_%=#~íGo|ߐή~c1a`4po1o!31׿׼w]3G£>џ?kI鮿FG5x9'.G? z&5^ ;5[-x dx|~W~)qE_oxk Nx 7xg~6<>'>~oxk^ u7~g|-0/xk_ 6=wu7< lxg} 8r[+6(Ҕ ZrJ7o˦Zy(-S0|6H:-*h]Ͱiͯ%acGxkio/~(y8iU}Qfaqq5wܚŁ^ʐ]ԙLiH3_E;V\=2;QGťLVʱ R7E+v-z86q5ft0::F҄& 919#gy>VDh'|?lR֔&y#1]s<q|2yes=b.+W4r[ZAm'+ b,R 5AWM EpzL<}iṃƏ\ Ou7llApF4Sʒziri9GH:Ll Mώv *F~7ȑ㑒VHuϞc(wlYѲ <=9FNU3 IDATQĖn'q`8!x4Ҡ{o/T8iO5CgUcEU%6Ry3,gS"kc2:Jz ?`!|H/\1v-Fb%,dϕ/FdVg P)a9!B,C|=B,,M^M_\l&ǖfG| mH#izh ;qF"t瀩/6gF3o2hõ0ykgyJCލ7VX_!&1y:m$Kܑ0V6o1^\L(hS~R d.uv R m»T{zUemS_}&;UwPoa2&XfazWLGLתV> ^b|~ #[mV|Ox>ʺEڹ(As/D#@5*qC)iL|Q 11dk5 ҿ4|.jISzdG/~_G/6 \^HoNnRZ[<XxLoŘ޻6{3TY-k7 s>RGFWO0SH:]Z{35<%Z[v4 W40ŝ;9'$oK ֬C:v(T(B}fC>٭4(w)%%9kwU<!^>dž龼\|F !bTpFtʙa uC7n!6F9^3PӲr>@Mm0oqgS9@(Cb"2c _ )xsLO*Cl9=&MTp(!+I8ox=HniP'q.a^ ._n K2OU]ESRVϣS8,9Nr@ Y/BIo!r|Hz%r 4 I1ܺl*F=0K*3@<kÄD<ўa/FQvVXMDBKC[LQg2۾ t?0Rzv&Dk׍]^ J@s`'>&ޘG{)t^9ctمû⧎y%eCA.NaTE"w9\@]w8I#aqX08aҗxYzjIzf[a%7=ɾZr D{%W:JqCki+;K/m~Zjw)}ml֞/2vq= 0@{~ @1);j=w7g;P$%c)!,=B'v-^᪼\ 17mY&dil0 Gq*:'Kj#cgLA!O`By%!nx;Ks[$ 䞜y<<&mC.d*֛Ǔ9@4*[  T8dLV}1I xT΄g2otP}003Avˍ9=,k 8s*ǐX B'(Ip"&-)@Y46Tq%\$R'HY|S$+XW\gKg!}֝ayzyzdz!7l!.%Gq1to1CC>=@8Fj!gGڍ [4SQLS^[x#mӟSnL)GxgDX΁B v˓1I :g qyw!': "7iO %4~Bߓ (:)]̇Z<>gby5*!x4^(.9O4D,f g f$ݭ))2oH~PTi1|N4r37yS3oFB2RdRs[dAkC^~@L`pNn \6Ea@w<h`````````````'Л{!ap-_.#`w3;_C_w>e uNJ/~WqӍl````````````2  r~=zFX^Fha.!ITgX3;ƦMk"B!y^޸zOpiB?WIJ0 u:4nHh79k+E)H #u;se{ߩ erZie&9Tpxt&"o`e&;Lu7o榛nzF'B!7[ۼZ@sНwWzZ"R55D-Gɛ⬑S:4l.eY+F`X떸n1W/$)913+uB!BAzA?~LM%dUY(uX=[GzyάѴ [i,eơ-^d-ĸ,o2[xE| ("B˚VV;4 6lnl &5#{%B!BL$lBYիx'jͳM'j456@N'2R*A{[("dY$( 'J-l4.fG c#~ _) iKUĪ!oXЛy4~x}n"Quu-üW6.;Ȳm?g$B!BIHR)/k4F:Bc8N6'9[]T)IqhqL7,`MTb-re-&DT!e;Rtup4anrOx'MKRQ41hHX$ X)bM! 3gCc3r)B!Bi1͕A'ujIǜ OM~|S@{7-\E(I KbM$9ոMFy4v~2#nW)(Hʋ WX!B!^?i&?2A@pK|hfZabVU6j3Gxr%Ƽ" *B1V\1Ӳ|<^aڡ3=7Ǔ$9a1fIǘ֜Zȼyȶ+< iGX^PK_c5+ʒjz= ouҕB!BsxCJY4SJNruZ֔'̴,睸n(뉘DUx, y)},leanP.֚:ŻT it3wEE懘6 Y[{l!Ѱ2Ɇı@UV]7E Fhil"E9isM14/H"ւQÐ_ు}B!B!^QR( 4ՌJL ZOta ]hi UR\x`| Ha.yQm۹tgK9uGǑ$ cu4.AYne63k<#ZςyXԵ89)a NhXKGK B!B!^W$4)PԆbHP2>F0PïeIVR̋Q((ZsokLs ?wDn'dpEGЂVa2N7O`FE)0GM5-cyj6Ty1Yh#@aIGã"}Hr0K zy~Qb@B!B1fָyZ;c _2rf=7$4)"eEP3!7϶aFk$gy)"VxB ySrTo;TQ Kctl>HQ/!(!$n9pźE0!%Ix#ui TR JiV1t:D8Io}XAѱ%&^ePcQŰT-Na+IJ|Ѣ?k# ZYB&Z[Z5ԧ]B RpCmb^ B!BqaIslyDW&=#OdAiڡ+ڄe} :ce :X3ˡ{J%:Ml-B(j֣ao}l0FіnhX#yjuԇXPKSZ(Qx6Qܶ"* L 46-%@6e,lޘ%s~>@`)*2B!B!+G@s4 cD<=?s^F>!Ifqҝ\x A%2M=Ͳ4ũqG,vqVL==ui2wdy V,$3?&A)E"!H0!ycSlFV/^0(4/bukV6Ş?̢Tfh!HY&>`Б[E.B!B3O}Z; 5-14Nz ?w&cP@kxÇxrc6ʀ%#K\ڎFZ!؝OZ`;B[y5-f~T#VRzYChM:5]z7ZeP4xh (GEK\}q2 TC..n[E>7YI0[D]ZfhWQŢxMyvo([e^HB!B:W MfztyS=^֙U8F@sPeUm{[9~4WW(4 [i¶M\ڴ+ږv-YAqibòx Vm؞'H-p8*f,Z1bB w+e% v(ltМNT -abuYz C]ƖŧἯ IDAT .zdZUՀ2(UڂlC=4́{2t0. geB!BצJv@z6ث<$l" ARe) S |1h@+ EhMk0opK~wq|* Bm9 _`a?0Lk]_C XkZ@(h[LfyK}xN 4Po'XY7ΦQݮ0 yt|$EtY6+1@iNtU{> (Ac8RȰ"PB!Bd&vt>WW78\:ٌ SmJ[Y:)'SJff&`sТx#{ ̟rO%vhZG\ƍsշҚl ڑ`@opB},8w/A Dl(. a2 qJ// CQjpljE2a#uu QKJĕ3G=4v O ܂C`|"1{ ٷ% "6Ͳ%R%֬k_{]=ͱ3gB!Bsʤ3=bb:>M9 AcC_#\v%̻<MĽXE#9Zq㍼sv0Nv=F6 p ދ$B!Q҂cYK*횧;|ϴc8ξs\7հ"rhY8|'+8|ƆFp`(dX3!JMm .v:b E/ ~hМ)-t(]5-$RDS.;1ץDX@(Bi9fxgzv0-Iׇ0c7¡{(P]5 ٮG95ŷo|Mr"R~_1:X,~B!bu6S2N#II$tM|WG\OxEM8N)B3ji{~<ߧ.&`K^z()͓o' ҝ;F=Pf.H_@H\M)h2IfېCA)gdK40y)C 5#|]kInjc/>" i^Sּp~c]y<ΎK gF%PqБ>FH1^' Z0K"lbJk`X^v %{xn}zyR<=R@e _kj Oc9ݏtnc{?T_L J#Ehtk VzG^@B!B+{]uY7*^lyUI IhB,o6M4%zsU$bP(Yvu+q, 0+j:<}7VAr8!Rqlmb}lÃyxdP=2:ϚNzS0>R^Jgg aB;q3)M/7P |ZimDa]X0?BGGϞWE!B!`g٦|AM>{y;3~٦ (ge[Q;/C66c!LKVܑ=CԄ3D/a.V)CԖa. u*GCZ yx+C$; Xtʦ%XY~uB!iRc=FeقC$ 4# a ;-]ȐP$ j(WծYZlHׄsce6Ѵ!u?ۿ(}~z/ ^ 1V(70Fƥx7@wٝ)$m&B)C!.^kϑRj=ߨiX-@*b5 1"aR)@ !B!U{M*Sf֬AYIJM)O:LN@mn rb47CkT*G~v mP4K=J[TSEw?%牣;Yy,:w?/^ĪՍDiRGh}EvGxfS7`Ml PjRP 9K ,FGG#J+u,^ǁGxa%(PmyWD>9hz!B!9aBcN353};SXlL"5u}ND@,6u h 'hnx7}\4abR2O,ϟOw},ٖ;ď<̟Y΂:cׯe݅),'@+E <_1:yq{~ Q@UgRTcQRq֥ilS J+Z fA3MdƆSkW>h||hU3B!B㘩1j|֯N^ϧ bʩ<޽\ -v(:箟=/_xK=K`#ܷe |l<9|#<1"O]ě2&sh jk<0o䮟7P~p,pmˈ4hPK{[YrV$a.5vX#~!P:8lr9sҵB!B!&0ӟS//2[YIh2ưPlEOx~7ˁQb=X֡7_tO?<(y|<1*D[[ c;6ZXGٳ3 ;inD+9X.lkw }[}ɾ$4u4͛xE|)1 m,Zy\3݌sUd/r (Rb+4k$B!bjSA*j|Vu>o{L-tALKw8P spiG®RE)΋87syZK"`=*UAX4BNMF2B!ⴘ Y9gp_UrқcsH O?w1P,/ak#Nn 0  7.Δ3ў(t0Ƌ#YԕXH8"K< mQy<];˒L$Xf 5[J${ªʟ VP?cw&qj(ҼƧס1"kyv d@B!Bj:M5tscNcp˯A<׷Ay..yVzy)1ls%a X,R @1gwf[CGy"/Z j[j(ZcI'TjPWvGw3GtֵӴt3f{łʰBGKGmMPB)p"}L ?'1`}66ӹB!u0$lBO);5ާgr5\2 FU܋ߠW1&03Es24n~  eNyy!Of|wgR"E,̈́i3eM,g;?M4p=E6?q cG,%c8H'wxlknhmK]dcnW-=LPdQ|i/Ba"cRxǿ`aEKDT>V+/)iBOY4Fyc{B/>k,B!y|byg{(uȶm0hlT@i͙6m$n'NvF(М M J\)c&fi:3LS1D>(u 'r~yii cPdlM!,.dcˡG/~QQBAC .pyqZj=84jbX"00G,R2@U;t%P P mty !H?EZch.'u}ϓO>I?\p|K_"J1Oև?awrן]wy{K!\" j%PcGꢥ˲bǎTrFЌ hh cۊEk. R2l.-ӭosL@1U@TBAHrPGi#>M\oa'Hڷ[؍.h4*0ʛ;Uxޑ{bD~%4Fgܐx״Tⳟ,+V6555i&+`yB!^ī<9_63y-A ep :jT>eC|aQ;hr0::s?Ϯ^@$b4nNAѥ <64Rkޅ\p80)+uF^^ mh(,ZԄ  |m4C1h0w-1NT0~ʉ@Z*E?oQ!XA,U)_۷stκW-0|U9B!UxzBbxLfB:fbo SIQ QR&[~+HM 3?@>!0]N#w1>OZ\_6wk]zH4hD܀xFSt]UʻlO;#s((Zn5e,(JC>!`{A(PGQUi-}S*8|03nsuqWsc,X 7ʕ+p]|;w}E /Əqw֬Y6u]nf}Qhnn|;g?w]CCC7ns)_!Bsdݫ6>f&d N9~ٌ׳9*OcwGqS\F,ZVG !34Dv4KP 8c1Rt5ϧ[n1("1eG<6%8I1Ru 1YK>g 3v0@&{KJNIp{hC)G ("F0y即"c(O,ЁF! A`lN=zj+w4mo|+mmm~|3Wd&pmy7x#7|37pvoټy3 7o7tH{woUV1iۏ/}o}+G !B!f0]":ccM%gִ{\U;JMa<ranA Q1K.}c%02<ڵ u=\m;CR4}}.G*mS,Ǿy#y^"gqlf  .X$K&f-:Nђ)Xؾ`C`miFQ2 Lh&; hIrJr_ ]R.iT|Y[og?ο˿qFz.]:߳vZ/cq_׿Op p ϭ7̊+x6x>}_lݺu ѣG<.T*7B!B`պfMQe&5-hZxgB0Xls(U"A9J)իiin! r {{ppͺwn[Kyŗp}@7>[D*H=.:Ba^^ Yt,ib؁EMMMb,xF#im*1"{>n>P@ p1lBW5&7XJcadt _C=M@ۧŸkyG;я~4!f͚5߿Ƿ<\.C/;L&=s=G6 ]p!6l0]v{袋N!B!^ƫ SKPL31HM ͘jf~7tY6Ld+zqTvOR456aY6|]Vf@Yn,]{/xضFYwYFۼ4ZP5-6 R=rM}``ś<ڶ{fB%/P J(5X%Ty &RJa f}>AOH)6^GZ *a kM9dʩJMg¶m*7}R6DeDH&?&NOntt O&ssUWO}>Okwó>˯~+/aoʏ-B1['ܶ/~lذU3 4T9gGkb:{3LٿxĤS:ZļNE.$ $ZkJofqbU\r%twwSWWR ͍K>? rd|4(mh, ( (@y ayiz!!"FĺQ1.6+u! ]cЉV\T8k,—F VYxm>~ZU3Qqk=Բ0V]ةd5Ll eH8k6[neŴxgϳh"b;w;? IDAT_o[o~IB!o~'rWxDB + m;>{1~sq„lӓ`^Phhh M s(*g4a?$s8EH߻tn7$F vP'Z :=CZFWӿA' vVj-ԚE#k%5vM9T)=J842lM7SO=EOO?`lܸH$¶mx>ccc\uUضG?Qnfz)|ߧm۶N+׿GalllXg?oSSSáC0022wM__Bg}h4JMMͩ_!B9 Ɨcج3Vlԧظq#O?|A6nWS~?|9Yƍ?|+|[o/K6nȝwyR/r9 81Geƍvm/q_S& V1fRLiL83F3)S }Es24ҫ8̱:L!PC5.( 0m#[| ƪU)Ea 5lRPf%DK +Ԥ Jh [Ҵrl6r1P &V-hBB8E ]!tiZMAyjAm`BP%$tʗZuM7gg|g˖-|oƜH$x[׾5e ˿K>яrM7qWO~_|q_WYxt?6 }{硇+͵^o[/fyG>UW]/~ 8)_!B׳?\{Ӟ_j?я7 ~'?9MׯYU|~?_x֭[wRǿ馛x{޽{_9zAƃ> 0xzpDulj9H<#GK fǃ.?V6rvM`ҋqvnln-*uըB[V{H^F xELqZ*9-Q(c0h|tL@:6 ٩K_ )G>G>קR)auSpuqu:7 }˒,Bqbַuu=Ï~#2)c۶ml޼ .`z={֘_ 6lw9&}o>ihh#TW}&X*q4UO'иzMءr0ñ)d5s g37>3FF#H/w-wT:IhT.~ƱGǻ ?sQNf|&}K8& `&4-֘ gBJи&ʯVy*JJk=~T5BW8,R Pi:=yk~IB!kQ8˲yӛmw}JeJmxR'? h|>?\&ogѣ7믿~<~7_~9---7e\swo.;s<~twwŘ?>_W'>rT8f׮]J%aӦM(>]wų>6zzz+@k}1?#> P., wy'c…\wu ][nG}IH- ?'`tt;~l[n'xh4J*:ӟx{K,q1nB|2|Ƴq&LTQS@O5lb|gd&a9z7' y<P+SivuѰg͒r5N(4Lj 0\v3.}G\Fh b0Vh1C@9<;W9$q1*(g0(8ȩiuybĆjX6ձT)M=(B7}?{<5BI @lcc[`1[8&yxI|²c ' xc@LB,uz3NZjDutNUڵO` p|&&7x#ܹsyߌ1~|ߎ{G{d2,[xw}7v=yOL:c;v??رc]ꫯU H&[B/ -[Xt)oxQ@PJ;7ǹ?p_*w}7rWfcBo;w.s=w 9YlW^y%O=wuW8˿K|A:;;YxqբX,r1~=z\.wnSK\9 36u ZpSll E=˖qхJi.`%m-IƇGYl>:D.GEϻ~ok__vL&&9r|#pWk˖-w},_O|OuS,?N"Q7l͛ٱc .dz,]n~i1j ozӛx[/K>򑏄BW__??>7j]}ݤR)oƍٵk7ofÆ |_<{ÇO0k,H$׾<ww}}}d2Ƹ8y$r-?`lr免Ykl[|FOrk͏m0ϫYVFủg PJ1wM!D'~k۹JRQׁ|!U&UԠ ɱYl' '\G/U#S9{ܽiڜUAA:cO^:~a~SOO~2,&套^{;v`xx8%JU&&&k|s)Lv+V¯kn6nmV5(Hz3g0J+dΝl߾;YΞ={0penիW^txj###yއ1&&EšP^ ,&Tob BAQPrz 2-7ZZdtl e5mm\b+_7\ݻ>P5ZKsS7\q9{ȁ{m 5taN1'χQ75%Ż2C™=K  r"P D=1qGŝߣP91bTAAΖ-[׿޽{ϦMOWy׻XѣG?z{{;YhQՒ& ,_~~rʊ6:F{{;7yկ~c=WՊ-ZDww7?<]]]$I֮] DGyÇw{߳Q8[}.R>ƶOy5ijj[o璘'O{޳"6)L96YE<u9x _ǯ߲k.'&8|(\Z:WO1mmm5ӱVŋJ%n|㋫><@ar!cs>oAګEY -`C#g(D=bRc}o RIzOp6E ,aWH AAdǎ| _´  pW^O s=G.cƍ\r%^$頔sLz͛71'>=æM0ưm۶ǼG?Qh ^W"~<1N wO-Z֚;w΂ W* ߼ysΝ;|Ecc#}{蠿~yV*VR[m?Wر\J< U^-XHH$P),Ƹ?OD"APX(0w>7n̙Rt:[Vy_"֭k qCi`1$]EB%IN$P֠MuqPX0XV( ®aMV蟠:XhWZV>5jL2VAAtuuxLy̚5kJ? 7^Xu{OO> B!ҙ̗n>Oww|_inn>cݻK.{ KV=ކ x衇L5kք=-[~3sWr|r֮]ԧ>e]ƞ={?ÚܼG?gkg||??eҥY{O}S,Y$R6SAGE0|8aHR?cS:4>3E]FJL^gFn%ϳh">n^ٽo?'rLƫ JᒎtR/^A:!AQ/\"hOpQ.X0 k Z)(pƪ,&RlM@#-SQ5q(^E)ƍ+*m[oD"s/_5\3cdڵ}mJ( ttt_~h?_^X^ziA+ /)}ϛo믿GXwu7p?`ppl6{3 Z 444s>>]wEWWi.hllno?7jO$'(!oa$Ȕ,b;Td}DLo̻S[muhOGω{j{|`7U9i.B1s3:Elhh0\tLV%y|ܿ⼀gL 6 S&0- :(~~˻JG^U٦Y"IKA[2;cAAI__)\hyG^ DwwLן?ICs3VʷPJsLE|͚ ?Jd ]Q(z$͍K{be".F>Y&|V$ǩ.\H:XeGFɫnY֚T*Ν;ٽ{wcka``]w1|=8$]Xr5T*F ݻP)x^=yP۬p ]'**ީ(Sݔ>Uc]5s[(c>򑏐Lz:::Q R,['  0U<SzY"KK*23bU1?lV)9ƺL,n-۶``V^c=(Z;,\˖{꫆'/Y8o2TS.t hy7hт2nW.Em lhl,'L|M{(XXE1_RJ(fW( Nսk388H[[g֭(X~b:tk-\s /?c(\|x_l6KWWo{2Վ#  B _/Q&*'X%DC\cY~k.Vn=ttvGgsA1άY\Bҩ4HYVcE+l% l"UJ }lY,vμr@BH/9 gO?ЇZŋٿU'֚Yf0g8~8 ,ttt0::/K-[… /ҧ#,/tR6oL?tvvϟ Kfll_n  $ KA:Moz3-- \~\~$gl-bcola֧ypz#˗.Gi27kijT%hgH{>? EZZP<"3p$D#fH a_@D E)@g4œ=LN[[t:V+L8SK,3n{ymmmq޽;vsc!J0Z|[@:fܹr-۪GAA8I" 3B4k~?kdi(]V3: ('wwc0K!#͒fqEk0EA}R(Y֮YGcc*k7VɀV=[%yeɮT$ , IDATB$,WOŪx鄃UqqSqR1q(0|vУJ&48sR;~Xx1o266ƾ}(z^02( ˑfYbo{$1g9ѣGB_.̙Ç9vǏ'0{lؽ{7'BqAAG2+"C8/H$d2cy5hhN4:67Ԝ'xeE l8R__H]>ݦY\l[g |oݻ 79siH&Ak I~GyZC&ƷHϬYh.( .I*bݺu477<  HKK ###$*$?lՏ<-B;~&V+R<)k5F|s9No*>xUmtd?Y>'")̰ 4LP#ucco3:v2u]@m43˜6vPvl6 ,XKsK3޺ 믠1U r\4V$4ʋ$SoH;ύJW9Ir4(bJ"B](ӵ&/1:ɰcsÅkhhnDR%bpE.k1K*֡R! AHPQ5G (מt~) PF~ԯN@P SS3"N\ce˶xMM^daޘK[+d3R}zFY Y^<~o,cBqR$%@Kt#;{|*Й$I@zC0BQAAA̩|b}#΀aap*oY*$]-Ds.2u ((Z`e}<ȃ\wX0g>0'Dmh?)K94<+}G3+ǎrll#Ãd$;A  t[+@H:ֆF濼M35pɼ%,i&T`8#Wj-   Lj˵*񍍗sa˭FjKQ"1 cT^+K;Uc%ϳe,[--):A$}kqps92>K}Gxv8+'q|tWk#QD2I* Hr$ $^k( aI~:3\:o r޼p= $UDRpu   LJe-72sA\NwD" b=u6]?O:ݫK@I`8pT:ث3 |e:%=\<hאM !W(08>6'|a~g'9Ȅ9y e,Z)!LN&iij,GOG7mfZlm#LaCqr|'^:_۹73'ӂ.;u=+   SeBZVqlUJ Ǔۇԟ5"FD[ʯW{lqD͚nc-'?aϐg#}}_pJ; ;ƶW^d`Yk(( _hϋG oWq2sgj26^[q3s;IZ68^|~g~0ϋh8Ez??s^Ĭ)ױ -J   B%`r'6XW.[nTJ9mǏ-5t5͕Hze*by<)\AK˲ÈC9KWp}S/̮y n5 4$t6xnF|t7I 44I:x8ָhVH .⏾x':kr\ܵ'^X!   Tesj\^բ*EҲ*v٭fXq.E 5^zc 6r݇rσ0up,Ǜ^Ξcsy,d2EsY=vbV{';lmC[_:r{jZ`(QBcqUcYnX|Mw*ϴ,? "  0 D wE(U~Y0(*GP^:d'|󘺜յKUciP Ԭ39 sCGI%|BYĊ ^I(,`uz@~O(EcJk Vn706N@ ÊJ.LAM   Z{J*M|Uf].混쨺4Ed ME#bϴIqS! ZpC/"'Y5޽jźKYI .7 @mZG/mUz%AC(x ^ڶAAA8(Z]t,m K}.{ !"!WϾ KJ(76OApcr湭㏿_ή>LE < 㠴)Q's:Uۄ9imИuX?>߽$  PJWLx 6PdJPbctR:Su.|y+;aN1n{;ge.zqV\ӜaxJus2m$T,URdBJhԢ0o6 ؉p/esʁq>   S*~=Hg}TD\|56=H (//ԥbzg(3\ո]'8&g=:1`!6o̒KhoD[tI*Y Jth(aM{\DZ{φM&(#yWN0:   B]o"k=( 2揑*ye"DRHP> uPa9T':lC9nQcn]t8dR,XUEXVx޻={pN,@MF}|\r*dPdAY[pċ9 <-(HAALek,__6Dٳ= -Z*ުH%FX_ԥt^05Ȼ,b,fs Y:(c6:c!LL%J3>1N-!ǎ]xz2&H(iiJRh TFbHh{fȚ"nBF $b ;Stj*AAA* z"tjˇE&n~5idj=*lh>EכT,=T.NJ#g,h|}ZZXr, ۟#seBvk-|ǎR(I;q@bex RR,^UE_k cnc'92>h~֬fྦྷp_#a4V%PƂMNKޥ=;т   !dmYEԸ9HR=!PplIlIj"(;lR"y/XO)*ñ(Fɐ`a歧od=f׿r-#9Nl~wEF ] 166Fcc#2\Ȓu/Nf wJ{/ drzb1%$TZ%Y*6[sW"p*\~|;EjڎZ:H 5Gi26Inbyb6Sڴ'P}cZL#'# oMkm39w|u9kMpr\>_8ؑ>܉"ZkVZ^hQ)E]tvw0w,d9JkbFe   B)kl;l0s9X (@EYViLAPC~}NDzr.Uˆ4+_~]]Ez7ӾHjMUP˂h .VYYudXf]N:E14R 0}뗪W(L O0p(! f~;c?"]<%5Y$R nOŐNN5+Ysjg$IB   Bjp*fW().f^ ~#ŏ?v8xBZ4]4u"^D[y -qִnghdxJpX*   M+70AM@-&n v LTvިOȄQa B?dSz+Yb%ڂc{0sdDd( rZ4!Aap,Xݠ$#S$z KgAJ+k(rC 1t$'00B`F1 5 NL{EBWV$l{UkKShǡI$&kQք@AAA)/[x-VW0Tԝs44S2t&ETJ K@΂uG]@jT㶁9!fd2MhdI+PFiQhl d<}Aks!Jfv/'Y,2u7;$4q ZlLޠ q~>'|u*Up^Mtsh$8PdiT8E?\N8CĿ9RkZ.fW+ Y:34b\e"&ITA lO*1HPlq.ogov1NLNT"INLzW/qq' hLѐNhvRa*HAAA^p^}^U!Z+3%FضJ1t~U~#Rz-0}!L^4fhd]\T[vUtXl9^xv9hjI'qXKBkUTzH/AAA0< Olcʵ?uKEi`I7D וO.E  ]1h<=XP2,ڰ⟱Gy/P㶐rd=[XtZ? "z/ltMK1H%ybr##/R~^|EF`*MG`/m@AAASP(ٗ@UUD 91!UO(E:&~aU9Oh@Ʃe[( SW}nQ:ߘK{06B!M"oɧX:YsX{>H~0rl&W0x@JaSۛA]bkhήNcxzfqALmܻ TK=K,gYЀ*"&tLGT# XKV`"h-VF (VђuH&2`˸' ì Yc.l8ƂФR)T* I֥!aժ<_2221-;-РVDڙAAAxmbl)ʔU)mˣ4{)0TM,\sR_OQp$Z]KhL_0 .ީ@֭[O?]u'N n1HԌR *ҥtfe#ȸ4h8YR/) 4$H7i4 7VhePepGqqюf|#?)##޷]v5(姵Z_*Ee   i`̑XNc5ar*|X}_ؘbF&VEy w}_"ez`EҜ|Ce]6m) IDATo>Nt0֦qUccS &Po4nlm5&˨a]O䴀G;wq1;a17GC*btq0{]M-qEN% Y,jNǙbAAA>d("_9USBR30":}&Q1L_13}!wy'\rIS8t %[,2ܦ)(57{XPk zK5d'rqllq-51ŵƏ@2aJL \\Eg[-a%9v)5{F''U6>,  pRS\ 6W[c\? 3*k:^}czrm3F|v.Ld S 5Tzy\V^0O1PEEd=8A> r70I;8JH"RTҊF990ʸk@Y84fXMX,x$ s (A[k lk#%KwAAA[ş D>Dj%"Z_UF&å 1lؾ2e,2*+R  T۞@ VX{/|gy&I"`WoEo;I Qt=/X啐/L2|.ˇ1a Y^2Gc\LiO8>t@gC;Kq  (Vs")``P%@   b `VY *6 }*,rPR{j@u*0Ӽꪅ%NγdGݕ/T*ER@d1j2im3u)SGY[Ylj ز?[@   p&XX8WfxŃZWA6nD2hadKT9Kk|3]fS ږ$zU-AAAZ_-e;Z`APEC)(XTYu,,2T-hHihgRn$R   KAaW t I>~X":1ثyNJ*   <"YVv+]P.h]Iu]@Ny:{QngRPJAAA= 뽪zx;,fPy$)}=و#9u]@f8S޷8    A>Xt0\jGTfOTϙ3Tz XTi ]   fhN$iX_TT!W B2Eq)M<SL}-X   BU99+ VSQ*SwjAG*Na"%CR땥N>  tNF&   "Pun|h^Pߣdc?Qcͦ!r\O4NE>@ZAAAj'O UW9WǍcԀTz-TM[ZX1x+ţ1xkΜtJ]"3=ՃW:#AAAd1Gv&Tשc-kiN|.EWN* ̑(^AAA&HS+O JhWmOt0pB'8ivM}@3Du3/U   0L: BQCZbnjE12e̖59u]@ [qcKUrAAA5N ϭQ%$hF*Z>kݯ> ը8@uL Uz-g'   0<&6-gI"Q2 |ShÒ{UVAAAAxUk TSp$߃(KFSR h&E.E c-f&U 99D AAA!([mJ52xNET/Ouˑ0j f&) _㺡.E,fc&VZAAAfkE<EV,p:h WKV23 qiUj*   8֖64x1k- T,fl9:\:<\>E f~TUO: ]AAAf?(b\U-ai%Zmlm ' "!*R>E 4 UKO AAAaF(MLPVМҶjLey*{bO!ͯ5{< ȳ225:9KHEMrFv%^mvF}*WEr?.bnZQ4g0_.CEX׀,mmذ{#Pb7(X~=6m9   WJzi\a:G0l. UOTvHOYrZ,(,%3=zN5vɆ -[0TT;NL"}3c*/X68㾚kYEJ.ecOdppd<ǣ+:[x7&Бcزe _ذa;wAAA8_9̴k l(j]ޮU^eǴ7խ9P}@X8-Ă3'mڴ-[L{h`eg;ebUuΝ1G-j4;!VӝvҖH(MXف!^89ʜf4oAo&V 8زe yAAAO ^ vuA񮸐|0(?h9~h[!Unil|YDb:Yzq~K_b֭֚D"ENd hI&`lѰgOy`VK3M$ Hi5[iI9X,'9?2@:dA[ YBczF֭[s]AAA^s[⯪jlW?WX8]R:S嬽(]y){oY)ECCVb̙3nd2$PRe.[J 4aEk-Po凜P芾k\O}XAAs*IgS#rL pɬffe(=|Q43) Ӟ*]e$   PܩU3D"p"*̓3D#J>_@b =# ;` $ ٶm[l/_7Z8vݻc'(rXV)VKgw[,ǟh d\[ĵk'7VZӠL^#$I#f`,Xg˓H$H&"F&x I,nNpͼNfpEyAAAJbų o!m׫V^ҫ)iPV>`^ץ`*N-L;ǡF{0;:uNYCH aId%Dv/qܞqD}YtGgt@ˌDFaQDD [B @6'ܾkU.}{;(}^ToթsNUߺy>`0Dkk'|2UH?sO{0Ĵ,Bho9.9-T/:wa1t X&TYTi`"=RnI2N*}~i?B AFh4F)RT [kCDBQ\ْBy͊LikME`*ǥ4c磥c?mSz F#Kǃhhh`yRܶĻ"!X֡(M󨫩%,6 2n-qCj|&5> C) eCtTae[-O;̋'eb(T(%98c@*2LHrk}l3rysDpM ˀ °ɜ tL@h4Fh4U]FC'U"[2\yט,_Ҿ㗤Rmg3Tjџ(5Hh4b\7!zNa&`TTT"p$L S)tŧ>l1DžLL kj@H2J 6~isߏ!JJT,S79sh3+V7uCk Uѽ0ή5|qE;t5\/ڏGINlƔN CJ G0H__Wy;Dl!RRoc 7hOĝ)ZFh4FyrY w&f"g4ѧL;J3.Ʊ n5RG-aP]]Mcc3 !pIH(;DwlGi L%Lգ E$"L cנּ+aJ qۥ{ph"EZwH \,0PA…\z͈W0`pML%xx>D,O9l2 }"mbm*WXR D))% *},pa] R.'ԅyxi4Fh4ͻ_kV0Z)}6MnyDn6c9mA_032Ld±B+Xr%55uTUU9UO<UUĥ H*B!b8v"KHa(X={ɇYŗ`O2C#DF" @076 Kʑ8W]xnSpߡE5dҐ0 "/B gPE2W8s !?U^/qk4Fh4M J2*cB䢬\1LO&+duXwX"/"5fo33曑"tM+lLU(,X@TAVý}<~#/G 3oD#A,INZHJI4MƱ&T0ppR $:v.}^~(R?eo_ae",Yu@b&)!h`'>ap'Omx KH8S ~O) pJ LObam=Fh4FyWUl3ALm?yNO'>VZi"GLH.ٖQjʞ@BAby~|A;:Šm>&IzxR)dB ^LǕDqpx قWIEde ΤGxq~:mMѓtpT8+!0 OmCZZ[٢_|L"WXA[a ¦A$AFh4Fhʓq*H)XsKǫ2%c'-4ꘛxKK HO)L/Pz#ߎax^uJ2;}#Q1b#H'v7cZXI3H)!}XTDcqcc WtlT*I%Y;Z 8%.%ncrX7m"Oq<;G(F\[0L0$dMC)E+ݩ-h4Fh4Mw*X6.lۊJ4M(ݠ6󘙙@L-ry4|=r)\kS^r-^L O a`KR&e4T7^ ^e`tvpǃ:DI )1H ?)G \;JQJ"P)B4?0H2Pٌ$<|,_ƙ]HUT~6/(^-:b ^ :vg=F`UG4MDJ14ek/c2R #ql!$KZc3{H HcPR7x•UD)zz0 frmD2L9 0x Rb NZK$ab8lIWgNgB2gDFG0P|uBУ`S$^,C౼(zxFh4F)K"_!Xwɺd"$\tL hMM.+vJsO$ J14!JFH#bhMb !pB" WXvypoNO]A8f0`(:BC'3# 0-\ vܴ%߃T*'sFzIw..Ym,<~1UA?;kH.2q`8XESK+D!HÈ'HDB'^jSc s2zTFh4F1^QzXvڥK(j}L0~~vL %P* MgJ$ œGH%Hf[)LV4VsZ+:xgk,-Mҫس- Yp8 H楐3%Hif"KTċ-/B0w"ttzK.y>I\h?$ 7ӻK# 0X7JƑm̪oډcBCWPrʿ&Fh4FyPy4Fͮ]T[X|Q"- ?W+5&hI GX IDAT#bJlM߻)XǗ_hp?H{=tTUpќ&?Vi=6w+x) ;4ҌJ[xk*5U`zLP'uF˾R igY'ޡ>D8nINPK<đ S%eऐEcѾd)@`} . \ä5k6$ N8~⎋i Ι4,ֿg4,`n X˟s%W1{<|^/&6h׿={` ԛN:F0,,W*"$r1I?;[aq y465p{P$N|ꫴ[HӼyuSW=ûw2fV5OG+p"a9$*yaO]]-@::h4Fh4GFv2D*dw!ƙR!ͻ))-ZgչwJXh4FhޝQռ8hW[LPQh+$NLK_UE2#EQ3UC edZh5)@ZKƅ4[N7it68srWzqpWZ* T.J((,/i^ڸ 0A T E |8˙wiq-ob縺B2/hW \^,atU7mDS k4W AR.e9J0CEwb^Yn7Yh4Fhm`J?P꫰c˻ W+]3~,Ƽ7"TT)W!m߯p]{#Sc/P3 41J^+ |+\"QW( a:C8(FfUԂ7FJ3lD-/76B :hAgL&"ZN8n 137'xU=ax* /SS[}{YXODyiiT.=ݴ.k4Fh4ͻ~bΨSÊX.)H Q+/7)o,{-ڦYt:#evY ێنC0>%ҙB$;cHjHh4Fh&CA&1r8*^}^6$ Lُ_Z63)krYcJ/:%12YW H?h;'Mk;[HE&vx6 '*!SX&,A2dF*‡m0+׌} TYwt%%z=Lufl=Fh4F9;w<1tD=q3^cSjOxFL\BmӒ^C7&w=Jd{vQslLbuT9k>2 !bok\0<AOb$)1- ]02mHAwCd &U6RIR"BO"FH(%uFh4FL2pQlUKWcQ?J,# d[^I_.3R/EôؑcOU=TK @׵B`q"j9raTcF z׈h/=HkbKGϧk]Ȕ[wBF2p<`;?Hl?}#HD9<`go aUHYh4Fh4ԙL55ÊەPbts{2CEcirfVќ +2Mll)IJ % )ҾA0D:i.R HWb I߇! 0LDG(.ycUS_Ԃ(颔DH0dF(R`(Rq EMAH/>."[*Wql>sx8>y 4JB!TCóO=IoeIR|SbqTWW+B8?nw](^x!W^y%h4FL&43d2$FNXVdV}FY)s\?]u.3d85+ Ad3H8VH(W 4k,Ee,1O=L$iբ  ..]%hӟ>`PjFZ+4ͮzi3n"Ń(_S;*?-s::[lS:&뺤R):D[[[6ms]wd2>9 mswMcc#Ǹs??`׮]׳j*>O ?)=tI|_իWs/m6'\0/}KSFh4, ͱ+SN6+i>Q @iA@cSxuPe*5 j~u]RJrfN%imm#---l޼sΡv,Y^Akk+_׉F]jկr'R[[7L__k4Fh4MG٥2]gAV(u|fj@3l,~t\U*-7hwZnA1ƃ(_{U`&K127a!\At`CH'A($tPW']3ZYfӋ *@"$]{и`_ʺnǸC7K7GF0dp ]o'8~9o#qFo~ƍD"8pD"Yb^{-sW\qvq@ ҥKٳgOnaj---bؔYh4F ʆL1(qإ 53R)أרbSh+m|=}l0JI0gq֭'k^, !BI) `Hܡ+!TxvR(D!ë9ᔥ4͞mPôJA26m10sO׳%,Yz PaLY,+Wryq5SOq饗pRUU5x<7ʕ+[hjjci箻bÆ f˗|r>}nfϞ Rei&Fh4MoI;{}gѝyZKtKA{pS괙LO^R"vL`3JNojnfŬX>p_{N;o Tq￶vFt=j14""mi9~qe QZW4cti%ϝ0<^;qk$=*tǶU9¿O=iYTTTbXGomK/Dgg'??ٺu+V²,n&N^z%\ץ-[GFFx⩧ȭ5<<̣>Jww7D 6& rlٲ~n6jkk93t]Fh4H) `0Xv,[naժU_~UV/'\ĥ^ʵ^;~&߱j*{_꫹ ?#ZR'I(Rʉgx;>˪UXfʹg$'[c (N%_O~h&1#ErXJӼy}M`0 Ӵ/! Z?7~ /|KxFdYīp /,00BaPH2ӎFoe{}.sfe.Z–$G-± hÐDO DR.Ja}r%^vЇG?o~Ν pM7qmqm۶0o<>+gy . $7x#+W[V _guz+]wH;S|i4FL#֭nN'? 7oޔƸ{J>~%˗/-zi;344?_~ӦMz꩓n/g4c͸ RhC(GC IDATNɶ+>sX)#he.Ɔ5H]ƍ:+L1tpOUUܳx3g78 &Fk[B ͦbY n-$2ύ|+1]pX# OK<lƑĕ T̔Rq͙3[ou 7ȍ7XիYzucqezzePٕq]w{\h4f|O=T~' [lW_SN{饗صkQρ+Vp={K}}=:tttsLLdUbPQhS2HhLQ,ضbL#CY.0:+M )R__H麠dZRI\Ivsce :nĐEfVPdda̔(,dQx7`'0JT #:.9v>z?}"v?*++?] L|kL7xM6qu|⋴p"? =䓬Y@ @{{nvW\Q Mf.%\g/<'tm}v^y,XE]/ `l9{q>l>^y}ݸ˙gI"(J"=--- f^zG3 &LC**'c3 {fh&P%G)JgME*PƙC!u6NeOqT er:|}o}P5}ݼ Vi=ǃ_Kl ̓ho.4Ws5J ͋1Gt#\;=We@Ģ"x _G#"^r\AQ4lxA6vwpO?%5D74Fh43<<̚5kxWk7g?߸gʕw] (|:իY~=G wҥKnj+?1'c߾}8ҥKG?e3/_κuؼy3sa׮]\s5,Xz6l؀2'~e}&{^.~iV^z{{M[[?яrK}x^֬YÚ5kx9ٹs'֭c|_k׮^xaY߲.z@ @4```iY9XL'5}&o^;6hl \tR4Fh4ӂ8<G ȅ^o[~_~zn<Ϙo&=7ofxxm^oI(o} ʊ$㍱pB***xg+9ӹKfeK6mDss3J\i?Ύ;xikk񈮳ݻw#dŊe6wl@:;`߾}lذUVDKYkٲe ?<@oo/> W_}5R(_T,V5GÌ4Ш*+t(,[ 0ؿdӎRR[_Co( U JW^jld)K~(|slZp'JD!<>"$ p=ݠ 0#Eߗ"L RFo[Ol: 7F˾[M{H=:N0 Fh4+p]wgϞ)su~a.hAÇ466s\\蠯{Ei3> ӟxgXv-wyΝK}}=[lòeˀQ'.숯`o g}N=T>kll^(N kx```:iK Rq#ߎ[x7y̪(ire@/-#Hal޼{wh46A"Gvo$ > ia0- ͘D6,3le"PZ<7w{}H)T렒6n?lHP~>R"m%I&lP8*I!ĥFh4Mi6o7) @g>M6L&99SҙHA>9O<֭;1?Κ5kRqƒcX!~_̢!]eYL,Bi&1a<0KZC}*5nH8& ؘ)4"{Su%ё6oDrUxz h4F9B à> m[ʔ7#SWŒ%KJ5k?8mt)[n;oDŽIgop) Yv- ,(9y'r?g x9O>loo穧⮻3ne˖O~+V{nn馲\|W3 +WX,WU,X'ȦM'?s+A<J)⊷,LQ%g2enݔ 4yddCJd)gxRyciSW~M!}>%4HɺjIHH␀1˃=9l f|!`m Mbٱgpx&vM 10kl,0@BjIg]Ͼꬬ!j)xO̤$#I5r<W,&^;WiU,hIg$+CKm`'Y|dMݲO-1q'ՆDGԨd|7j}2Dng$*cW'SeUD7 T۲|vjrUQSzVn>lz\|/(ߜyG?|}Z_.Z9KϽT_K:e ᎑>KZwѭpL_@8 #kDF^ߧXgeys$+yU6U>/ -5}:||Hz7u!r9Yk1#Gꫯ8z )4kJ%rGG|la=n.Z fj +#\Ji\ I $\gP ¯[D-D -RMd2e2I).-Z֣1 ;\Xk5f56:t﮻E=Sq%U6VTn6~] ZY.s=4r|XOW.+[diڿ+tꩧJoi˖-g[oX, 6+$:tHO?ѡ+Rk֬45\-ɨOltܽ{gU:ʕ+u5ה:4TfqC-Jj3ߴ&E?ʾAWԄ+ڻgs yNplYW68ND͟k63V6.YvvԋU_ךߺu_R{ժU/W?. tm[:tUWztw*Jݳg8;C٬|AtMЮ]C3\s|О={{nI~C>nXB۶ms=:+8ނa!-lC+*JO `>-**CKo4T]RV2rwBN3>wkzWݺm6r9{ĹZO qzjIڵkb iÆ m466_Wڴi6n(PW^O׶mtQMNNn`ippPz'%I\NV=b^º=~k]9'bWŢpʡZû`MD"nTg`!XXeQnAHX>شv0u2 "w*4a8Uco%cdڸʺ)&74 cEgٽT.\^__/Ն JaVo}x^ySjq*f+[bڵK{9~8yBVlFG*纡ml#ٸ#3زVtu풺R*&w#HN+.520-N>Mgߍ:v오B^'|-[^}UIґ#G466V e2iqk4<j(TT՚Li`֭T1McyzJmɵz9=2Mro|Nc'NhN>}s$ΤR])9S}k91#QzhDC#OfdsW$EƓg]Md~=YmW[ tvvrD@P:CM )V;БG)@%7޴w k|.EAW|XI^wČV.[3U|tC=sC/4on0dW_XGGZԿj&FN7=-Z>FDJ4:rB{wigsR{ZBX#>>OhF՞Pv|Rq'DYO\VioR#:So־choXL1١@NxCϣ~ d/ݹٟuwu6_%WSH]ؚ򕕳[ҴSPyvG+BmhH|dHH#G뉇~'zH1J B>꼋ާ5N֗+0IDAT^oO|Iɟkyd&&F4t6uzZ+c~ҡ=;١e]=2(Mkx䄎NS&ky|@ OTxV#t^<9tGrbF;^3IYUfzXVy* I* V=s{W-ͳ{yg&Y+cwm $Ni˺սGzC/ɖZ23!mގ \F͌ W{W/^` )WTk}I_S|^~t <ĸ\Y@\¿'.Z^VqGrQ^FrFqX3XOB^!*f";|p~OeQ.yޣ{})hrrB*x)`iZwK(ݷ%eTUB^6Cew֙7~&MQcOc9θ17G2zq脎sr-`Tܔ?+@-*Q"Po#SHTekCzCmW/PpyL[\>ocC'UGPUN$zfOIv*꒓qzyWl6+ϺU4ֺ3[6.Ps:R+ã{򬧜S.U6_٨! (%#Q8rѯMo2lD*oI≘:  xj\kf͊ y~Clĺ^@Boo3e庞\[k׫cFuU[)^g>ɡ}?Os!TX;E B%#$[A'f{YM%+#G65qY)IǖO{锍y]彼F3#:1v\oy[Oxf\`)inPEӵu6۝b11eK G1tThUY>kHU ?WsI6_9_u}ϛ{293q5PNMgPke=+1+io\ycdBe] FJA*Vky %R c'ad%6^ RMfǔύ+t,bIg5QeF\d4zde 3x9(LW=L>S\U,=]]Jrb'VV`Z$OJUU^ TQ2LRñXl~{IiI9?n`ժjr[Bsq[~Ty/sO':V|8#.)X/Xd5:*6᪠P!cfjxԮ@Q*~_Wk|) m=CCO3U@m]BFCW{T(<:/+XW|O'\4V7P#=,j(VO'jjFzSA', <7"U B'<^B˼em[!Ԏ!P3BJ˪AT?<< @BD Z/n_k[<*âiFc<.sB˜Me Xhp%a!C@ ShB/UTy#eVk%P}U@ ,` Ck #`n J¡LTl>NFe8yN@S 6VPu=U jU 4U@l7msU 4wTp? YOw8 o_)'* @aN*2h/Pu#@eQOx; [a\Hիo (u9 bsqV >VLzSYQ36 = [ۘ ٨VSmY*pp%Q# fG#Ԫitʢڶ Hj(jz>զp6 ,* >|@{7GHի}-6mBr84pzʵ@]t U/Z:7 /'júz]-f}4?Ü9fATO!^ի"s'*^7"-.FFiflf0 I) :J >U$_1ieܶݮ hLaQG=t=-ڧ{ZfC?vǘwlfܶ#I+ÔT 5{ѮLk:e:xZW3 }C i{UosYALϯݯ(hE2}e$-]pXf#hiiV- U纐>3= m:-@Lza!! j!dsf!y hT[ a\~pXL2Yo9X1lisjb *k?,fϢ ~BP>#EZ@>/mQ?AK=YfɄ>a ,.K6 #h FSFqMh 8Y⎜@VIENDB`ticketbooth-1.1.1/data/blank_poster.jpg000066400000000000000000000154371475632104500201500ustar00rootroot00000000000000JFIF``C     C   )" 82y nU@F=e/_?YE sY@f@pR/?P3`[-s7zi .2+f F Mt)JMUn  `-a,iJ,یYEY@`!A@Z&=qJ b81(?/I8TN/1@]%VyZQGm`Z S* $E`ZTw iMO"&E}>~$.m4ϾE8D6$ɽB%( 1ro`S.:XcK*0P @!"#341,c݊r78Ws y.k,4밼IOX4밼IO+.*("&T 9:N޵,j /u^&daи`/oPlF&tUb \X9ax+78b0FGEx_мLOّR'ƟC(xˮ1ź/2SWbcXz-۫8DTeG"-3ļb&zh3+%z&OTH=؉gt8iMId43%s "nZ*;h&Jơ{:ϣS1p=>TP*yL>[lTö|(2@P=؉gԫ2oҖ4@"{:ϮD)ľgʬ)ȪllNY x*NY x=tӖH++5Y4NjRM9d"H`ԥbaۊҦ:r@C4egM9d w[),r̈́ӖHFyɎ; ,\4Wu}i,$0bry$B0͐~`!_,QW?X?X1!01P"AQq 3@a2#RbB?q/{~襆u<^j߸`VӲ$'y~[vRLu'!]mm;)&NTE{)587VӅgX qe7uFTI[sz [O syӲS4fh皪]>nUe.?ey ~4e&mSͼsO_+n ׋n2=zW]mm;)58A=b3u:v;s8cte&h@R\}}O9AaS-&+iI ʁqge&C"L!=Թ<\3(5.3諓kpr`̠ֈH3듩ee@EyKx ANLVG h4;z8Ү?TXF.q"f}O& h4SɃ2Z *ϧA׏3(5 )?KɃ2Z 8$"gdqFvo0yglY4`̠ֈP }\S0fPkDZu“F(5\fpdqAp}NK1@{{$q@kE V>94P@kUl5$6FG"XgR+!1APQ 0aq@?!giHoBR$Fէ.;\^5OPl=0>M#kx2k>b`|F亼amʑ.">VZr~TԺ^hpX}M'Mm]К H@Rj6Δr]_ aQPɡJOs( Ka"QtcJ9E.>,ȥr-B@G}~PS};J MaQ)uxLEpfc/SºR[T\.jύ1Gu`d"?:X3GDRS\`ni1/3k =/8tE./DqSPpʃ7Ia(]^r[ Drf-Q@Ai*ȥϔ^@ ck/UI@2J2JHTdoGog݇*, %gTdN2.]w aʲ#HIXFI\Wʑh0i3IТO+eFhj+7Nq,7eeq_2g4JOQeAۏc +KI -LvH((`L5 F}QР 8X#Wv?K7D];Qq"uj=QРd` +rꎅ 5/G a@rWУdx2{oG g -acz <@kGΏ7t(Y $j0[:<*N0@kǓ4SؗM]ϊl'                                                                                                                                             !(        0        Ђ      * 0      !`p      8800      ! 0     . 0O" 1     0 0"@     0 0 8,0     0 0     * 0 0 1     0 0 0     ,2 0 0     0 x       C 0       ,0       %9                                                                                                                                                     /P@ 1`0?tc(T=EQGB~4P"q BF(F~+P1@ 0`?о]4.f/B=tйE31PSDiTf2[+!1AQaPq 0@?Jv T}uP Aڪ:3>d~2kgKa-ȲenxPH)4ȲenxtPH)<1Idձl'v.9*X1z&zxFpӧ"ƭz [.] v1W^*R>C&/57*'X\S4@9xijM>k`tMmn<1W^*R&ND%&EʡdEޟ~f蚳CXW}/)W_ 6 Mʜ& : }JπJ$eU;R <ǚC)qz۫T>*R2hDz~T`% #bS8Xv>aCBUE ƆzAMY|r:<ë,%|9NZVf,,.VL D'h`nOn5!CFBULj0"߁($m~  %A&YާL$$c)A0loڀ ;qW WWO64DҭbDL:x3>x|@C*76 X VY'/1 ٿj2Ā(R@rUQ !1Y ,Jʃ:j?A^ g_$x@&5"gJ%]_5KLW q):Q* Jח l/}U 6 ~3vH!D70ߓd L[.sw ڏ2FK͐v/_׿6~Np2\0'SCQ_H|"p/M~Gj #f) )4 v2\_/J-a҅2jݡ^q|˄m@2  Jm?.qlX:]6v`6|\#o.j6 vJdM_*6 %ɾKFA ep@S ~ /-7PH+6 %\#o.!7P&H+6 %\#o.ſd8HH\hS9ވjT`SAKticketbooth-1.1.1/data/blank_still.jpg000066400000000000000000000071651475632104500177620ustar00rootroot00000000000000JFIF``C     C   " 82(CHX8P%V>k6cۉ(]4A@nW3]);NP<8A.yϤ|J[` GG4J{]IiWh 1<ӑޛe.`ShKU@Q(]d,O%ސcu<î,5Pmq@@uՐ{LZ5uZ;|YKdFYDee?Ig( P04"1#*BPb'6I%0M{mY[m ٝ`Qv%6 9+~6~>*dw\tevsULcf` */T6)kˤ;.y q]meYv]#utf:{Nёz?d!G2;$aӲL"G_ !clq2k2jпag|;r%~㬻+.˲쬻(w z+lVf>J#|e |\gh{eOx(R>+mH'hHDFClAkZtgܽ?%n^r7/SjuD[/${WWbXV(Պ5bXV(Պ5bXPm+J????3 1!2PQ "03RqrAaB#b?iDԠؿ}M@( utmfx]ڤw4a+yv[U6~-g1iP6_E?V >^ᆗ;CeCXPh v^SW,g59YrkSTD6ǵhwp쎑Y-;JQoPӺ*+Uti GNª|4\QӢַaÕ+V+i|w⋝%:x5ޕ۲5Ԡ EII;QOvuSi+LN. z'q+Sy;|'ÿ{qpٚ3SfjlM56fٚG`/;+!1APQ a0q?!i ֑Ax Jl%t@iB!vR$0ףi%#͉m)eS 6kޚ3FMPNW O[HT'w%ߚ%;u=)k%퀩X##͓ p++,1[!]]]]V`R/˟y̹> Ki#fI$6î]һåwJ+:Wxt]ҡzQ@ ;                                   4       (0      (0      <,0      003     %C 2     %C 7C 0,     %8 0        0P      *N8                                    @P!1`p?ռtgPl\.*b)08,u ?@ P1`p?k|b845? B( =(5QE+!1AQa Pq0တ? J ֏ F!PH4j\^Ӑ\$WeA 7d-7j2W=G-8q`S=jX5guo-iy3PiЕ65 w a"%Z& D%ڭ )ƌlV'Py*0N^L:CC6Dp o80H!yZgJ @WQ;kkgUO? H8m Qɉ{ _n*e]"`t\h Po= AqG?hŎ'VPZFS,Y~ g柭ޓsө{ɮ7GRqfzP@:CiLUW^  ,79 (.I3.)aބQf(m^hu'RCGIGvK6ݩ_qQNMs>3-Jbxݟ͵wL:K}AB.᯶0'I2םPYB8A)eqLU֐L&%H~6H @`MR)bvq8󼿙f]0 ticketbooth-1.1.1/data/icons/hicolor/scalable/apps/me.iepure.Ticketbooth.svg000066400000000000000000000377141475632104500271400ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/hicolor/symbolic/000077500000000000000000000000001475632104500213445ustar00rootroot00000000000000ticketbooth-1.1.1/data/icons/hicolor/symbolic/apps/000077500000000000000000000000001475632104500223075ustar00rootroot00000000000000ticketbooth-1.1.1/data/icons/hicolor/symbolic/apps/me.iepure.Ticketbooth-symbolic.svg000066400000000000000000000045211475632104500310200ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/hicolor/symbolic/apps/me.iepure.Ticketbooth.Devel-symbolic.svg000066400000000000000000000045211475632104500320560ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/meson.build000066400000000000000000000007621475632104500202330ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later scalable_dir = join_paths('hicolor', 'scalable', 'apps') install_data( join_paths(scalable_dir, ('@0@.svg').format(app_id)), install_dir: join_paths(get_option('datadir'), 'icons', scalable_dir) ) symbolic_dir = join_paths('hicolor', 'symbolic', 'apps') install_data( join_paths(symbolic_dir, ('@0@-symbolic.svg').format(app_id)), install_dir: join_paths(get_option('datadir'), 'icons', symbolic_dir) ) ticketbooth-1.1.1/data/icons/symbolic/000077500000000000000000000000001475632104500177055ustar00rootroot00000000000000ticketbooth-1.1.1/data/icons/symbolic/bell-outline-symbolic.svg000066400000000000000000000047551475632104500246530ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/check-plain-symbolic.svg000066400000000000000000000013171475632104500244250ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/check-round-outline-symbolic.svg000066400000000000000000000062501475632104500261270ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/document-edit-symbolic.svg000066400000000000000000000010761475632104500250120ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/floppy-symbolic.svg000066400000000000000000000010621475632104500235550ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/hourglass-symbolic.svg000066400000000000000000000045341475632104500242620ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/loupe-symbolic.svg000066400000000000000000000015461475632104500233770ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/movies-symbolic.svg000066400000000000000000000053541475632104500235560ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/network-transmit-receive-symbolic.svg000066400000000000000000000021201475632104500272100ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/plus-symbolic.svg000066400000000000000000000003171475632104500232310ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/right-symbolic.svg000066400000000000000000000007331475632104500233650ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/series-symbolic.svg000066400000000000000000000067311475632104500235460ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/star-large-symbolic.svg000066400000000000000000000045031475632104500243100ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/update-symbolic.svg000066400000000000000000000024421475632104500235310ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/user-trash-symbolic.svg000066400000000000000000000020501475632104500243370ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/view-grid-symbolic.svg000066400000000000000000000013501475632104500241410ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/view-list-symbolic.svg000066400000000000000000000013121475632104500241650ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/warning-symbolic.svg000066400000000000000000000014511475632104500237130ustar00rootroot00000000000000 ticketbooth-1.1.1/data/icons/symbolic/watchlist-symbolic.svg000066400000000000000000000036101475632104500242470ustar00rootroot00000000000000 ticketbooth-1.1.1/data/me.iepure.Ticketbooth.desktop.in000066400000000000000000000005251475632104500231220ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later [Desktop Entry] # TRANSLATORS: do not translate Name=@app_name@ Exec=ticketbooth Icon=@app_id@ Terminal=false Type=Application Categories=AudioVideo;Video;TV;Utility; Keywords=Movies;Shows;TV;Series;Watch; StartupNotify=true X-GNOME-UsesNotifications=trueticketbooth-1.1.1/data/me.iepure.Ticketbooth.gschema.xml.in000066400000000000000000000070441475632104500236620ustar00rootroot00000000000000 1024

Window width 600 Window height false Window maximized "movies" Active tab true Specifies if the app is run for the first time true Specifies if the database needs an update false Specifies if the app downloaded the required data "added-date-new" View sorting style true Separate watched content from unwatched false Hide watched content false Search bar visibility "title" Search mode '' Search query "auto" App color scheme "en" Language used by TMDB results false "week" Frequency to check for new data on TMDB "1970-01-01" Last autoupdate date "1970-01-01 00:00" Last notification autoupdate date true Clear cache on exit false Use the user's TMDB key '' User's TMDB key ticketbooth-1.1.1/data/me.iepure.Ticketbooth.metainfo.xml.in000066400000000000000000000111211475632104500240440ustar00rootroot00000000000000 @app_id@ CC0-1.0 GPL-3.0-or-later Ticket Booth @app_id@.desktop Keep track of your favorite shows Alessandro Iepure

Ticket Booth allows you to build your watchlist of movies and TV Shows, keep track of watched titles, and find information about the latest releases.

Ticket Booth does not allow you to watch or download content. This app uses the TMDB API but is not endorsed or certified by TMDB.

https://github.com/aleiepure/ticketbooth https://github.com/aleiepure/ticketbooth/issues https://github.com/aleiepure/ticketbooth https://github.com/aleiepure/ticketbooth/blob/main/CONTRIBUTING.md #e28dad #9e4768 keyboard pointing touch 360 https://raw.githubusercontent.com/aleiepure/ticketbooth/main/data/appstream/1.png Movie Library https://raw.githubusercontent.com/aleiepure/ticketbooth/main/data/appstream/2.png Movie Details https://raw.githubusercontent.com/aleiepure/ticketbooth/main/data/appstream/3.png TV Series Library https://raw.githubusercontent.com/aleiepure/ticketbooth/main/data/appstream/4.png TV Series Details me.iepure.ticketbooth

What's Changed

  • Fixed a bug that prevented deleting content from your library (@farao)
  • Fixed a bug that prevented adding content on fresh installs without restarting the app first (@gnesterif)
  • Updated translations

A huge thanks to all contributors and translators for making this release possible!

What's Changed

  • Revamped UI with updated widgets, refined theming (@gnesterif), and a fully responsive design for use on smaller devices
  • Stay in the loop with notifications for new releases and updates (thanks to @gnesterif)
  • Find what you're looking by searching by title or genre
  • Keep your library organized by automatically separating watched and unwatched content
  • Take full control of your library with import and export functions
  • Personalize your experience by adding custom notes to your movies and shows
  • Updated translations

A huge thanks to all contributors and translators for making this release possible!

Fixed issue that prevented application start with version 1.0.3

Stability improvements: fixed high peaks utilization and crashing.

What's Changed

  • Stability improvements
  • Fix spelling errors by @librizzia
  • Translations update

Fixes issue that prevented the addition of movies with large budgets and revenues.

First release

ticketbooth-1.1.1/data/meson.build000066400000000000000000000031441475632104500171150ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later desktop_file = i18n.merge_file( input: configure_file( input: 'me.iepure.Ticketbooth.desktop.in', output: app_id + '.desktop.in', configuration: conf ), output: app_id + '.desktop', type: 'desktop', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'applications') ) desktop_utils = find_program('desktop-file-validate', required: false) if desktop_utils.found() test('Validate desktop file', desktop_utils, args: [desktop_file]) endif appstream_file = i18n.merge_file( input: configure_file( input: 'me.iepure.Ticketbooth.metainfo.xml.in', output: app_id + '.metainfo.xml.in', configuration: conf ), output: app_id + '.metainfo.xml', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'metainfo') ) appstreamcli = find_program('appstreamcli', required: false) if appstreamcli.found() test('Validate appstream file', appstreamcli, args: ['validate', appstream_file]) endif install_data( configure_file( input: 'me.iepure.Ticketbooth.gschema.xml.in', output: app_id + '.gschema.xml', configuration: conf ), install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas') ) compile_schemas = find_program('glib-compile-schemas', required: false) if compile_schemas.found() test('Validate schema file', compile_schemas, args: ['--strict', '--dry-run', meson.current_source_dir()]) endif subdir('icons') ticketbooth-1.1.1/install/000077500000000000000000000000001475632104500155065ustar00rootroot00000000000000ticketbooth-1.1.1/install/ticketbooth-run-script.in000066400000000000000000000002601475632104500224570ustar00rootroot00000000000000#! /bin/sh # Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later TMDB_KEY="3cea7ff23278a75460ead4d6e2cef9af" exec /app/bin/ticketbooth-bin "$@" ticketbooth-1.1.1/me.iepure.Ticketbooth.Devel.json000066400000000000000000000025401475632104500221410ustar00rootroot00000000000000{ "id": "me.iepure.Ticketbooth.Devel", "runtime": "org.gnome.Platform", "runtime-version": "47", "sdk": "org.gnome.Sdk", "command": "ticketbooth", "separate-locales": false, "finish-args": [ "--share=network", "--share=ipc", "--socket=fallback-x11", "--device=dri", "--socket=wayland", "--talk-name=org.gtk.vfs.*", "--filesystem=xdg-run/gvfsd" ], "cleanup": [ "/include", "/lib/pkgconfig", "/man", "/share/doc", "/share/gtk-doc", "/share/man", "/share/pkgconfig", "*.la", "*.a" ], "modules": [ "pypi-dependencies.json", { "name": "blueprint-compiler", "buildsystem": "meson", "cleanup": [ "*" ], "sources": [ { "type": "git", "url": "https://gitlab.gnome.org/jwestman/blueprint-compiler", "tag": "v0.16.0" } ] }, { "name": "ticketbooth", "buildsystem": "meson", "config-opts": [ "-Dprerelease=true" ], "post-install": [ "mv /app/bin/ticketbooth /app/bin/ticketbooth-bin", "install -Dm755 /app/ticketbooth/ticketbooth-run-script /app/bin/ticketbooth" ], "sources": [ { "type": "git", "url": "https://github.com/aleiepure/ticketbooth", "branch": "main" } ] } ] }ticketbooth-1.1.1/meson.build000066400000000000000000000034011475632104500162000ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later project('ticketbooth', version: '1.1.1', meson_version: '>= 0.62.0', default_options: [ 'warning_level=2', 'werror=false', ], ) i18n = import('i18n') gnome = import('gnome') # Debug info if get_option('prerelease') name_suffix = ' (Development snapshot)' app_id = 'me.iepure.Ticketbooth.Devel' prefix = '/me/iepure/Ticketbooth/Devel' git = find_program('git', required : false) if git.found() git_commit = run_command('git', 'rev-parse', '--short', 'HEAD', check:false).stdout().strip() endif if git_commit == '' version_number = '-Devel' else version_number = 'Git-@0@'.format(git_commit) endif else name_suffix = '' app_id = 'me.iepure.Ticketbooth' prefix = '/me/iepure/Ticketbooth' version_number = meson.project_version() endif # Python setup python = import('python') # Config data conf = configuration_data() conf.set('python', python.find_installation('python3').full_path()) conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir'))) conf.set('pkgdatadir', join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())) conf.set('debug', get_option('prerelease')) conf.set('app_id', app_id) conf.set('version', version_number) conf.set('app_name', 'Ticket Booth@0@'.format(name_suffix)) conf.set('prefix', prefix) subdir('data') subdir('src') subdir('po') install_data( configure_file( input: 'install/ticketbooth-run-script.in', output: 'ticketbooth-run-script', configuration: conf ), install_dir: join_paths(get_option('prefix'), meson.project_name()) ) gnome.post_install( glib_compile_schemas: true, gtk_update_icon_cache: true, update_desktop_database: true, ) ticketbooth-1.1.1/meson_options.txt000066400000000000000000000002131475632104500174710ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later option('prerelease', type : 'boolean', value : true) ticketbooth-1.1.1/po/000077500000000000000000000000001475632104500144565ustar00rootroot00000000000000ticketbooth-1.1.1/po/LINGUAS000066400000000000000000000000631475632104500155020ustar00rootroot00000000000000de fr it nb_NO es eu pt pt_BR pl uk hi bg tr nl fa ticketbooth-1.1.1/po/POTFILES000066400000000000000000000025741475632104500156360ustar00rootroot00000000000000data/me.iepure.Ticketbooth.desktop.in data/me.iepure.Ticketbooth.gschema.xml.in data/me.iepure.Ticketbooth.metainfo.xml.in src/background_queue.py src/main.py src/preferences.py src/window.py src/dialogs/add_manual_dialog.py src/dialogs/add_tmdb_dialog.py src/dialogs/edit_season_dialog.py src/pages/details_page.py src/pages/edit_episode_page.py src/ui/about_dialog.blp src/ui/dialogs/add_manual.blp src/ui/dialogs/add_tmdb.blp src/ui/dialogs/edit_season.blp src/ui/dialogs/message_dialogs.blp src/ui/gtk/help-overlay.blp src/ui/pages/details_page.blp src/ui/pages/edit_episode_page.blp src/ui/preferences.blp src/ui/views/content_view.blp src/ui/views/db_update_view.blp src/ui/views/first_run_view.blp src/ui/views/main_view.blp src/ui/widgets/background_activity_row.blp src/ui/widgets/background_indicator.blp src/ui/widgets/episode_row.blp src/ui/widgets/image_selector.blp src/ui/widgets/poster_button.blp src/ui/widgets/search_result_row.blp src/ui/widgets/season_expander.blp src/ui/widgets/theme_switcher.blp src/ui/window.blp src/views/content_view.py src/views/db_update_view.py src/views/first_run_view.py src/views/main_view.py src/widgets/background_activity_row.py src/widgets/background_indicator.py src/widgets/episode_row.py src/widgets/image_selector.py src/widgets/poster_button.py src/widgets/search_result_row.py src/widgets/season_expander.py src/widgets/theme_switcher.py ticketbooth-1.1.1/po/bg.po000066400000000000000000001120341475632104500154070ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # twlvnn , 2024. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2024-04-08 20:35+0000\n" "Last-Translator: twlvnn \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.5-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Широчина на прозореца" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Височина на прозореца" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Максимизиран прозорец" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Активен подпрозорец" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Дали приложението се изпълнява за първи път" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Дали приложението е свалило необходимите данни" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Дали приложението е свалило необходимите данни" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Показване на стила на сортиране" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Търсене на заглавие" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Цветова схема на приложението" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Език, използван от резултатите на TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Периодa na проверка за нови данни в TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Дата на последно автоматично обновяване" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Дата на последно автоматично обновяване" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Изчистване на кеша при спиране на програмата" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Следете любимите си предавания" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "„Ticket Booth“ ви позволява да съставите списък с филми и сериали, да ги " "следите, и да намирате информация за най-новите издания." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "„Ticket Booth“ не ви позволява да гледате или изтегляте съдържание. Това " "приложение използва програмния интерфейс (API) на „The Movie " "Database“ (TMDB), но не е одобрено от TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Отказване" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Няма връзка с мрежата" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Свържете се с Интернет, за да завършите първоначалните настройки." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "Добре" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Изчистване на кеша" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Заглавия" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Изтриване на всички филми" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Изтриване на всички сериали" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "„Ticket Booth“ в момента заема {total_space:.2f} МБ. Използвайте опциите по-" "долу, за да освободите пространство." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} МБ заети" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Дейности на фона се изпълняват" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Няколко дейности се изпълняват във фона и трябва да приключат преди спиране " "на програмата. Потърсете индикатора в лентата със заглавието, за да " "проверите кога са приключени." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Редактиране на филма" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Редактиране на сериала" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Сезон {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Добавяне на {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Обновяване на {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Сезон" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Гледано" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Маркирайте като гледано" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Времетраеност (минути)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Сезон" msgstr[1] "{num} Сезона" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} Сезон" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Епизод" msgstr[1] "{num} Епизода" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Статус" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Оригинален език" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Оригинално заглавие" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Бюджет" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Приходи" #: src/pages/details_page.py:531 msgid "In Production" msgstr "В производство" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Да" #: src/pages/details_page.py:535 msgid "No" msgstr "Не" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}час(а) {m}мин" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}мин" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Обновява се {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Обновяване на {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Зареждане на метаданните…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Изтриване на {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Това заглавие ще бъде изтрито от списъка ви за гледане." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Отказване" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Изтриване" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Изтриване на {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "twlvnn " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Филм" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Сериал" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Отказване" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Запазване" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Общи" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Заглавие (задължителен)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Дата на издаване" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Жанрове (разделени със запетая)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Времетраеност (минути)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Слоган" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Създадено от" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Преглед" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Сезони (задължителен)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Използвайте бутона +, за да добавите сезони" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Добавяне" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Допълнителна информация" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Бюджет (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Приходи (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "В производство" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Търсене в „The Movie Database“…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Търсене на заглавие" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Започнете да пишете в лентата за търсене, за да видите списък със съвпадащи " "филми и сериали" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Няма намерени резултати" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Опитайте различно търсене" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Редактиране на сезона" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Епизоди (задължителен)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Използвайте бутона +, за да добавите епизоди" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Изчистване на кеша за данните от търсачката" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Отказване" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Изчистване на данните" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Изчистване на данните" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Филми" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Сериал" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Общи" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Показване на клавишните комбинации" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Показване на настройките" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Вашият списък за гледане" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Спиране на програмата" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Управление на списъка" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Добавяне на заглавие от TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Добавяне на заглавие ръчно" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Обновяване на списъка" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Основно меню" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} Епизод" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Обновяване на метаданните" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Редактиране" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Изтриване" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Описание" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Сезони" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Настройки" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Клавишни комбинации" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Относно „Ticket Booth“" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Редактиране на епизода" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Номер на епизода (задължителен)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Настройки" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Изтегляне по избор" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Необходимо е сваляне на 15 КБ. Първоначалното настройване не е свалило " "данните автоматично и затова е активиран режим „Изключен“. Той ще остане " "активен до приключване на първоначалното настройване." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Завършване на настройките" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Режим „Изключен“" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "„Ticket Booth“ може да работи изцяло в режим „Изключен“. Ако решите да " "работите в този режим, някой функции, които изискват достъп до Интернет или " "до програмни интерфейси (API) на трети лица, няма да бъдат достъпни." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Активиране на режим „Изключен“" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider
contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB предоставя преведени метаданни за повечето съдържание. „Ticket Booth“ " "ще я изтели на предпочитания от вас език, който можете да изберете по-долу. " "В случай че той не е наличен, ще използва американски английски език и след " "това оригиналния език на съдържанието. Ако нито един от двата езика не е " "наличен, низа ще е празен. Моля, помислете дали да не допринесете за TMDB. Отделно се " "извършва автоматично обновяване през избран от вас период." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "TMDB език за резултатите" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Период на обновяване" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Рестартирайте „Ticket Booth“ след тази промяна" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Никога" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Ежедневно" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Ежеседмично" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Ежемесечно" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Запазване" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Съхранение на данни" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Изчистване на кеша при спиране на програмата" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Изчистване на кеша за данните от търсачката" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Изчистване на данните" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Вашият списък за гледане е празен" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Добавете съдържание с бутона +." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Вашият списък за гледане" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Гледано" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Вече е в списъка за гледане" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Използване на режим „Изключен“" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Опитайте отново при следващото стартиране" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Активен подпрозорец" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Добавете заглавие в списъка ви" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Вашият списък за гледане" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Режим на „Изключен“ е активиран" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Сортиране" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "А-Я" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Я-А" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Дата на добавяне (най-новите първо)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Дата на добавяне (най-старите първо)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Дата на издаване (най-новите първо)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Дата на издаване (най-старите първо)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Гледано" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Презареждане" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "От „The Movie Database (TMDB)“" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Ръчно" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Дейности на фона" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Няма дейности на фона" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Редактиране на постера" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Изтриване на постера" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Добавяне в списъка за гледане" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Използване на системния стил" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Светъл стил" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Тъмен стил" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Изчаква се достъп до мрежата…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Необходимо е сваляне на 15 КБ. Ако обаче нямате връзка с Интернет или не " "искате да чакате, можете да пропуснете тази стъпка и да продължите в режим " "„Изключен“ без някой функции." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Подготвяне на нещата…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Сваляне на данни" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Филми" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Автоматично обновяване" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Автоматично обновяване" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Изтриване на {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Изтриване на {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Всички промени към този епизод ще бъдат изгубени." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Изтриване" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Вече е в списъка за гледане" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Този сезон съдържа незапазени метаданни." #, fuzzy #~ msgid "movie" #~ msgstr "Филм" #, fuzzy #~ msgid "movies" #~ msgstr "Филми" #, fuzzy #~ msgid "series" #~ msgstr "Сериал" ticketbooth-1.1.1/po/de.po000066400000000000000000001064131475632104500154130ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Philipp Kiemle , 2023. # Nitin Khalia , 2024. # Traladarer , 2024. # Leo , 2025. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2025-02-18 13:32+0000\n" "Last-Translator: Leo \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10.1-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Fensterbreite" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Fensterhöhe" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Fenster maximiert" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Aktiver Reiter" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Legt fest, ob die App das erste Mal ausgeführt wird" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Legt fest, ob die App die erforderlichen Daten heruntergeladen hat" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Legt fest, ob die App die erforderlichen Daten heruntergeladen hat" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Sortierstil anzeigen" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "Teile gesehene und ungesehene Inhalte" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "Verstehe gesehene Inhalte" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "Suchbarsichtbarkeit" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Einen Titel suchen" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "Suchanfrage" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Farbschema der Anwendung" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Sprache, die für TMDB-Ergebnisse verwendet wird" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Wie oft auf neue Daten bei TMDB überprüft wird" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Letzte automatische Aktualisierung" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Letzte automatische Aktualisierung" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Zwischenspeicher beim Beenden löschen" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "Brauche den eigenen TMDB-Schlüssel" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "Eigener TMDB-Schlüssel" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Bleiben Sie auf dem Laufenden über Ihre liebsten Serien" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth ermöglicht Ihnen, eine Merkliste aus Filmen und Serien " "zusammenzustellen, angesehene Titel zu verwalten und Informationen zu " "neuesten Veröffentlichungen zu finden." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth erlaubt Ihnen nicht, Inhalte herunterzuladen oder anzusehen. " "Diese Anwendung nutzt die TMDB-Schnittstelle, wird aber nicht von TMDB " "unterstützt oder zertifiziert." #: src/main.py:193 msgid "Confirm Export?" msgstr "Export bestätigen?" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" "Das Exportieren der Bibliothek, kreiert ein Archiv mit all Ihren Daten. Sie " "können diese Daten später wieder importieren, um Ihre Bibliothek " "wiederherzustellen." #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Abbrechen" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "_Exportieren" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "Bibliothek exportieren" #: src/main.py:307 msgid "Confirm Import?" msgstr "Import bestätigen?" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" "Beim Importieren einer Bibliothek wird diese mit der aktuellen Bibliothek " "zusammengeführt. Dies kann nicht rückgängig gemacht werden. Falls Konflikte " "auftreten werden die neueren Daten behalten." #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "_Importieren" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "Bibliothek importieren" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Kein Netzwerk" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "" "Stellen Sie eine Internetverbindung her, um die Einrichtung zu " "vervollständigen." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Zwischenspeicher löschen" # CHECK - Needs plural #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Titel" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Alle Filme löschen" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Alle Serien löschen" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth benötigt aktuell {total_space:.2f} MB Speicher. Nutzen Sie die " "Optionen unten, um Speicherplatz freizugeben." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB belegt" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Laufende Hintergrundaktivitäten" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Einige Aktivitäten werden im Hintergrund ausgeführt und müssen vor dem " "Schließen beendet werden. Achten Sie auf den Indikator in der Fensterleiste, " "um zu sehen, wann diese abgeschlossen sind." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Film bearbeiten" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Serie bearbeiten" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Staffel {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "»{title}« hinzufügen" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "»{title}« aktualisieren" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Staffel" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Angesehen" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Als angesehen markieren" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Laufzeit (Minuten)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Staffel" msgstr[1] "{num} Staffeln" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "Anzahl Staffeln" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Episode" msgstr[1] "{num} Episoden" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Status" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Originalsprache" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Originaltitel" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budget" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Einnahmen" #: src/pages/details_page.py:531 msgid "In Production" msgstr "In Produktion" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Ja" #: src/pages/details_page.py:535 msgid "No" msgstr "Nein" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "TMDB ID" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h} h {m} min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m} min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "»{title}« wird aktualisiert" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "»{title}« aktualisieren" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Metadaten werden geladen …" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "»{title}« löschen?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Dieser Titel wird von Ihrer Merkliste gelöscht." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Abbrechen" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Löschen" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "»{title}« löschen" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Einige Icons sind unter dem Copyright des GNOME Project" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Philipp Kiemle " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Serien" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Abbrechen" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Speichern" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Allgemein" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Titel (erforderlich)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Erscheinungsdatum" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Genres (mit Komma getrennt)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Laufzeit (Minuten)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Schlagwort" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Erstellt von" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Übersicht" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Staffeln (erforderlich)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Nutzen Sie den »+«-Knopf, um Staffeln hinzuzufügen" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Hinzufügen" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Zusätzliche Informationen" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budget (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Einnahmen (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "In Produktion" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "The Movie Database durchsuchen …" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Einen Titel suchen" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Schreiben Sie etwas in die Suchleiste, um eine Liste passender Filme und " "Serien zu sehen" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Keine Ergebnisse gefunden" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Wählen Sie einen anderen Suchbegriff" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Staffel bearbeiten" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episoden (erforderlich)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Nutzen Sie den »+«-Knopf, um Episoden hinzuzufügen" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Zwischengespeicherte Suchdaten löschen" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" "Diese Aktion löscht alle zwischengespeicherte Daten. Diese werden vielleicht " "wieder heruntergeladen wenn Sie das nächste mal Inhalte von TMDB hinzufügen." #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Abbrechen" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Daten löschen" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Daten löschen" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filme" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Serien" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Allgemein" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Tastenkürzel anzeigen" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Einstellungen anzeigen" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Ihre Merkliste" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Beenden" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Bibliotheksverwaltung" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Titel von TMDB hinzufügen" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Titel manuell hinzufügen" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Bibliothek aktualisieren" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Hauptmenü" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} Episode" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "Sendedatum der nächsten Episode" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "Benachrichtige mich über Neuerscheinungen" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Metadaten aktualisieren" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Bearbeiten" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Löschen" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Beschreibung" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Staffeln" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "Notizen" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Einstellungen" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Tastenkürzel" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Info zu Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Episode bearbeiten" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Episodennummer (erforderlich)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Einstellungen" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Optionaler Download" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Für eine vollständige Einrichtung ist ein Download von 15 KB notwendig. Die " "Ersteinrichtung konnte diese Daten nicht automatisch herunterladen, daher " "wurde der Offline-Modus aktiviert. Dieser bleibt aktiv, bis die Einrichtung " "abgeschlossen wird." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Einrichtung abschließen" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Offline-Modus" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth funktioniert auch komplett offline. Wenn Sie diesen Modus " "wählen, sind Funktionen, die eine Internetverbindung oder Zugriff auf " "Schnittstellen Dritter benötigen, nicht verfügbar." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Offline-Modus aktivieren" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB stellt für die meisten Inhalte übersetzte Metadaten bereit. Ticket " "Booth lädt diese in Ihrer bevorzugten Sprache (unten auszuwählen) herunter. " "Falls diese nicht verfügbar sein sollte, wird erst auf Englisch (US) und " "dann auf die Originalsprache des Inhalts zurückgegriffen. Wenn gar nichts " "verfügbar ist, wird eine leere Zeichenkette zurückgegeben. Denken Sie daran: " "Zu TMDB beitragen. Außerdem werden die Inhalte regelmäßig zu einem benutzerdefinierten " "Intervall aktualisiert." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Sprache der TMDB-Ergebnisse" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Aktualisierungsintervall" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Ticket Booth nach dem Ändern neu starten" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nie" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Tägich" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Wöchentlich" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Monatlich" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "Verwenden Sie Ihren API Schlüssel" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" "Registrieren Sie ihrenhier" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "Ihr API-Schlüssel" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Speichern" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Haushaltung" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Zwischenspeicher beim Beenden löschen" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Zwischengespeicherte Suchdaten löschen" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Daten löschen" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Ihre Merkliste ist leer" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Fügen Sie mit dem »+«-Knopf Inhalte hinzu." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Ihre Merkliste" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Angesehen" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Bereits auf Ihrer Merkliste" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" "Nach dem Update von Ticket Booth müssen wir ihre lokale Datenbank " "aktualisieren" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Offline-Modus verwenden" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Beim nächsten Mal erneut versuchen" #: src/ui/views/db_update_view.blp:66 #, fuzzy msgid "Activate Notifications?" msgstr "Automatische Aktualisierung" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Aktiver Reiter" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "Deaktivieren" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Fügen Sie einen Titel zu Ihrer Bibliothek hinzu" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "Zeige/Verstecke Suchleiste" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Ihre Merkliste" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Offline-Modus aktiviert" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Sortieren" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Datum hinzugefügt (neueste zuerst)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Datum hinzugefügt (älteste zuerst)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Veröffentlichungsdatum (neueste zuerst)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Veröffentlichungsdatum (älteste zuerst)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "Separiere gesehene von ungesehenen" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Angesehen" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Aktualisieren" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "_Importieren" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "_Exportieren" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Von The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manuell" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Hintergrundaktivitäten" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Keine Hintergrundaktivitäten" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Poster bearbeiten" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Poster löschen" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "Diese Serie hat eine Neuerscheinung" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "Diese Serien hat bald eine neue Veröffentlichung" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "Dieser Inhalt ist als gesehen markiert" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Zur Merkliste hinzufügen" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Systemstil folgen" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Heller Stil" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Dunkler Stil" #: src/views/content_view.py:323 msgid "Search results" msgstr "Suchresultate" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Auf Netzwerk warten …" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Für eine vollständige Einrichtung ist ein Download von 15 KB notwendig. Wenn " "Sie allerdings gerade nicht mit dem Internet verbunden sind oder nicht " "warten möchten, können Sie diesen Schritt überspringen und offline, mit " "etwas weniger Funktionen, fortfahren." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Alles wird vorbereitet …" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Daten werden heruntergeladen" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Filme" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Automatische Aktualisierung" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Automatische Aktualisierung" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "»{title}« löschen" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "Eine neue Episode von {title} erschien vor {days} Tagen." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "Neuerscheinungen für {num} Serien aus ihrer Watchlist" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "Die Serien sind {series}." #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "{title} hat bald eine Veröffentlichung" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "Eine neue Folge erscheint in {days} Tagen." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr " und " #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "»{title}« löschen?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Alle Änderungen an dieser Episode gehen verloren." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Löschen" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Bereits auf Ihrer Merkliste" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Diese Staffel enthält ungesicherte Metadaten." #, fuzzy #~ msgid "movie" #~ msgstr "Film" #, fuzzy #~ msgid "movies" #~ msgstr "Filme" #, fuzzy #~ msgid "series" #~ msgstr "Serien" #~ msgid "" #~ "Fixes issue that prevented the addition of movies with large budgets and " #~ "revenues." #~ msgstr "" #~ "Behebt einen Fehler, der das Hinzufügen von Filmen mit großen Budgets " #~ "oder Einnahmen verhindert hat." #~ msgid "First release" #~ msgstr "Erste Veröffentlichung" ticketbooth-1.1.1/po/es.po000066400000000000000000001040711475632104500154300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Óscar Fernández Díaz , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-09-26 01:52+0000\n" "Last-Translator: Óscar Fernández Díaz \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.1-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Anchura de la ventana" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Altura de la ventana" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Ventana maximizada" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Pestaña activa" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Especifica si la aplicación se ejecuta por primera vez" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Especifica si la aplicación ha descargado los datos necesarios" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Especifica si la aplicación ha descargado los datos necesarios" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Estilo de clasificación de la vista" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Buscar un título" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Esquema de colores de la aplicación" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Idioma usado por los resultados de TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Frecuencia de comprobación de datos nuevos en TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Última fecha de actualización automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Última fecha de actualización automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Limpiar caché al salir" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "No pierda de vista sus programas favoritos" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth le permite crear su lista de películas y programas de TV, " "llevar un registro de los títulos vistos y encontrar información sobre los " "últimos estrenos." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth no permite ver ni descargar contenidos. Esta aplicación usa la " "API de TMDB, pero no está avalada ni certificada por TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Sin conexión a la red" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Conéctese a Internet para completar la configuración." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "De acuerdo" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Limpiar caché" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} títulos" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Eliminar todas las películas" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Eliminar todas las series de TV" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth usa actualmente {total_space:.2f} MB. Use las opciones a " "continuación para liberar algo de espacio." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB ocupados" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Actividades en segundo plano en ejecución" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Algunas actividades se ejecutan en segundo plano y deben completarse antes " "de salir. Busque el indicador en la barra de cabecera para comprobar cuándo " "han terminado." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Editar película" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Editar serie de TV" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Temporada {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Añadir {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Actualizar {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Temporada" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Visto" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Marcar como visto" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Duración (minutos)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} temporada" msgstr[1] "{num} temporadas" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} temporada" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} episodio" msgstr[1] "{num} episodios" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Estado" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Idioma original" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Título original" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Presupuesto" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Ingresos" #: src/pages/details_page.py:531 msgid "In Production" msgstr "En producción" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Sí" #: src/pages/details_page.py:535 msgid "No" msgstr "No" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}h {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Actualizando {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Actualizar {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Cargando metadatos…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "¿Eliminar {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Este título se eliminará de su lista de seguimiento." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Eliminar" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Eliminar {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Óscar Fernández Díaz " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Película" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Series de TV" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Guardar" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "General" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Título (requerido)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Fecha de lanzamiento" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Géneros (separados por comas)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Duración (minutos)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Eslogan" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Creado por" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Vista general" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Temporadas (requerido)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Use el botón + para añadir temporadas" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Añadir" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Información adicional" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Presupuesto (USD)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Ingresos (USD)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "En producción" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Buscar en The Movie Database…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Buscar un título" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Empiece a escribir en la barra de búsqueda para ver una lista de películas y " "series de TV coincidentes" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "No se han encontrado resultados" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Intente otra búsqueda" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Editar temporada" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episodios (requerido)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Use el botón + para añadir episodios" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Limpiar datos de búsqueda en caché" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Limpiar datos" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Limpiar datos" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Películas" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Series de TV" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "General" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar atajos" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Mostrar preferencias" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Su lista de seguimiento" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Salir" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Gestión de la biblioteca" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Añadir título de TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Añadir título manualmente" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Refrescar biblioteca" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menú principal" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} episodio" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Actualizar metadatos" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Editar" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Eliminar" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Descripción" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Temporadas" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Preferencias" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "Atajos del _teclado" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Acerca de Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Editar episodio" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Número de episodio (requerido)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Preferencias" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Descarga opcional" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Para una experiencia completa, se requiere una descarga de 15 KB. La " "configuración inicial no ha podido recuperar los datos automáticamente, por " "lo que se ha activado el modo sin conexión. Permanecerá activo hasta que " "finalice la configuración." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Completar la configuración" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Modo sin conexión" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth puede funcionar completamente sin conexión. Si elige funcionar " "en este modo, algunas funciones que requieren Internet y/o acceso a API de " "terceros no estarán disponibles." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Activar el modo sin conexión" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB proporciona metadatos localizados para la mayoría de los contenidos. " "Ticket Booth los descargará en su idioma preferido, que puede seleccionar a " "continuación. En caso de que no esté disponible, pasará al inglés de EE.UU. " "y, a continuación, al idioma original del contenido. Si ninguno de los dos " "está disponible, el resultado será una cadena en blanco. Por favor, " "considere contribuir " "a TMDB. Además, se realiza una actualización automática con la " "frecuencia que elija." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Idioma de los resultados de TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Frecuencia de actualización" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Reinicie Ticket Booth después de cambiar" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nunca" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Diario" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Semanal" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Mensual" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Guardar" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Servicio de limpieza" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Limpiar caché al salir" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Limpiar datos de búsqueda en caché" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Limpiar datos" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Su lista de seguimiento está vacía" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Añada contenido con el botón +." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Su lista de seguimiento" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Visto" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Ya está en su lista de seguimiento" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Usar el modo sin conexión" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Inténtelo de nuevo en la próxima ejecución" #: src/ui/views/db_update_view.blp:66 #, fuzzy msgid "Activate Notifications?" msgstr "Actualización automática" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Pestaña activa" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Añada un título a su biblioteca" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Su lista de seguimiento" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Modo sin conexión activado" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Ordenación" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Fecha de adición (la más reciente primero)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Fecha de adición (la más antigua primero)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Fecha de lanzamiento (la más reciente primero)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Fecha de lanzamiento (la más antigua primero)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Visto" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Refrescar" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "De The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manualmente" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Actividades en segundo plano" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Sin actividades de segundo plano" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Editar póster" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Eliminar póster" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Añadir a la lista de seguimiento" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Seguir el estilo del sistema" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Estilo claro" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Estilo oscuro" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Esperando a la red…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Para una experiencia completa, se requiere una descarga de 15 KB. Sin " "embargo, si no está conectado a Internet o no quiere esperar, puede omitir " "este paso y continuar sin conexión sin algunas funciones." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Preparando todo…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Descargando datos" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Películas" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Actualización automática" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Actualización automática" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Eliminar {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "¿Eliminar {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Todos los cambios de este episodio se perderán." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Eliminar" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Ya está en su lista de seguimiento" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Esta temporada contiene metadatos no guardados." #, fuzzy #~ msgid "movie" #~ msgstr "Película" #, fuzzy #~ msgid "movies" #~ msgstr "Películas" #, fuzzy #~ msgid "series" #~ msgstr "Series de TV" #~ msgid "" #~ "Fixes issue that prevented the addition of movies with large budgets and " #~ "revenues." #~ msgstr "" #~ "Soluciona un problema que impedía añadir películas con grandes " #~ "presupuestos e ingresos." #~ msgid "First release" #~ msgstr "Primera versión" #~ msgctxt "preferences" #~ msgid "" #~ "Ticket Booth can work entirelly offline. If you choose to run in this " #~ "mode, some features that require the Internet and/or access to third " #~ "party APIs will not be available." #~ msgstr "" #~ "Ticket Booth puede funcionar completamente sin conexión. Si elige " #~ "funcionar en este modo, algunas funciones que requieren Internet y/o " #~ "acceso a API de terceros no estarán disponibles." #~ msgctxt "message dialog body" #~ msgid "All cheanges to this episode will be lost." #~ msgstr "Todos los cambios de este episodio se perderán." #~ msgid "Already in your whatchlist" #~ msgstr "Ya está en su lista" ticketbooth-1.1.1/po/eu.po000066400000000000000000000663441475632104500154440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Sergio Varela , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-09-26 01:52+0000\n" "Last-Translator: Sergio Varela \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.1-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Leihoaren zabalera" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Leihoaren altuera" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Leiho maximizatua" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 msgid "Search mode" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 msgid "Last notification autoupdate date" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 msgctxt "alert dialog action" msgid "_Cancel" msgstr "" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "" #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "" msgstr[1] "" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "" msgstr[1] "" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "" #: src/pages/details_page.py:511 msgid "Budget" msgstr "" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "" #: src/pages/details_page.py:531 msgid "In Production" msgstr "" #: src/pages/details_page.py:534 msgid "Yes" msgstr "" #: src/pages/details_page.py:535 msgid "No" msgstr "" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "" #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "" #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "" #: src/ui/dialogs/message_dialogs.blp:9 msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 msgctxt "message dialog action" msgid "Cancel" msgstr "" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 msgctxt "message dialog action" msgid "Clear" msgstr "" #: src/ui/dialogs/message_dialogs.blp:19 msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 msgid "Movies" msgstr "" #: src/ui/dialogs/message_dialogs.blp:34 msgid "TV Series" msgstr "" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "" #: src/ui/gtk/help-overlay.blp:28 msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 msgctxt "preferences" msgid "Save Key" msgstr "" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "" #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 msgid "Activate" msgstr "" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 msgid "Search Your Watchlist" msgstr "" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, python-brace-format msgid "New release for {title}" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "" #: src/widgets/episode_row.py:270 msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "" #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 msgctxt "alert dialog action" msgid "_Delete" msgstr "" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "" #: src/widgets/season_expander.py:144 msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "" ticketbooth-1.1.1/po/fa.po000066400000000000000000001032531475632104500154100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Danial Behzadi , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2025-02-14 20:21+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "گیشه" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "پهنای پنجره" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "بلندای پنجره" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "پنجره بیشینه شد" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "زبانهٔ فعّال" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "مشخّص می‌کند که آیا کاره برای نخستین بار اجرا می‌شود یا نه" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "مشخّص می‌کند که آیا کاره داده‌های لازم را گرفته یا نه" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "دیدن سبک مرتّب سازی" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "نمایانی نوار جست‌وجو" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 msgid "Search mode" msgstr "حالت جست‌وجو" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "پرس‌وجوی جست‌وجو" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "طرخوارهٔ رنگ کاره" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "زبان استفاده شده برای نتیجه‌های TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "بسامد بررسی داده‌های جدید روی TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "آخرین داده‌های به‌روز شدهٔ خودکار" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 msgid "Last notification autoupdate date" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "پاک سازی انباره در خروج" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "مگه داشتن آمار نمایش‌های محبوبتان" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 msgctxt "alert dialog action" msgid "_Cancel" msgstr "_لغو" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "_برون‌ریزی" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "برون‌ریزی کتابخانه" #: src/main.py:307 msgid "Confirm Import?" msgstr "تأیید درون‌ریزی؟" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "_درون‌ریزی" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "درون‌ریزی کتابخانه" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "بدون شبکه" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "وصل شدن به اینترنت برای کامل کردن برپایی." #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "_تأیید" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "پاک‌سازی انباره" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} عنوان" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "حذف همهٔ فیلم‌ها" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "حذف همهٔ سریال‌ها" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "گیشه دارد از {total_space:.2f} م‌ب استفاده می‌کند. استفاده از گزینه‌های زیر " "برای آزاد کردن کمی فضا." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} م‌ب اشغال شده" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "فعّالیت‌های پس‌زمینه در حال اجرا" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "ویرایش فیلم" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "ویرایش سریال" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "فصل {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "افزودن {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "به‌روز رسانی {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "فصل" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "دیده" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "علامت به دیده" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "زمان پخش فیلم" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} فصل" msgstr[1] "{num} فصل" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "شمار فصل‌ها" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} قسمت" msgstr[1] "{num} قسمت" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "وضعیت" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "زبان اصلی" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "عنوان اصلی" #: src/pages/details_page.py:511 msgid "Budget" msgstr "بودجه" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "درامد" #: src/pages/details_page.py:531 msgid "In Production" msgstr "در حال تولید" #: src/pages/details_page.py:534 msgid "Yes" msgstr "بله" #: src/pages/details_page.py:535 msgid "No" msgstr "نه" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "شناسهٔ TMDB" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}س {m}د" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}د" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "به‌روز رساندن {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "به‌روز رسانی {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "بار کردن فراداده…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "حذف {title}؟" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "از سیاههٔ تماشایتان حذف خواهد شد." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_لغو" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_حذف" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "حذف {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" "حق رونوشت © ۲۰۲۳ - ۲۰۲۵ الکساندرو له‌پور\n" "برخی نقشک‌ها زیر حق رونوشت پروژهٔ گنوم هستند" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "دانیال بهزادی " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "فیلم" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "سریال‌ها" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "لغو" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "ذخیره" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "عمومی" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "عنوان (لازم)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "تاریخ انتشار" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "سبک‌ها (جدا شده با کاما)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "مدّت پخش (دقیقه)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "شعار" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "ایجاد شده به دست" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "نمای کلی" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "فصل‌ها (لازم)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "استفاده از دکمهٔ + برای افزودن فصل" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "افزودن" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "اطّلاعات اضافی" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "بودجه ($ آمریکا)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "درامد ($ آمریکا)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "در حال تولید" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "جست‌وجوی پایگاه دادهٔ فیلم…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "جست‌وجو برای عنوان" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "آغزا به نوشتن در نوار جست‌وجو برای دیدن سیاهه‌ای از فیلم‌ها و سریال‌های مطابق" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "هیچ نتیجه‌ای پیدا نشد" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "آزمودن جست‌وجویی متفاوت" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "ویرایش فصل" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "قسمت‌ها (لازم)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "استفاده از دکمهٔ + برای افزودن قسمت" #: src/ui/dialogs/message_dialogs.blp:9 msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "پاک سازی داده‌های انباشته؟" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 msgctxt "message dialog action" msgid "Cancel" msgstr "لغو" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 msgctxt "message dialog action" msgid "Clear" msgstr "پاک سازی" #: src/ui/dialogs/message_dialogs.blp:19 msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "پاک سازی داده‌های ذخیره شده؟" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 msgid "Movies" msgstr "فیلم‌ها" #: src/ui/dialogs/message_dialogs.blp:34 msgid "TV Series" msgstr "سریال‌ها" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "عمومی" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "نمایش میان‌برها" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "نمایش ترجیحات" #: src/ui/gtk/help-overlay.blp:28 msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "جست‌وجوی سیاههٔ تماشایتان" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "خروج" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "مدیریت کتابخانه" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "افزودن عنوان از TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "افزودن دستی عنوان" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "تازه سازی کتابخانه" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "فهرست اصلی" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "شمار قسمت‌ها" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "تاریخ پخش قسمت بعدی" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "آگاهی از ارائه‌های جدید" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "به‌روز رسانی فراداده" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "ویرایش" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "حذف" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "شرح" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "فصل‌ها" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "یادداشت‌ها" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_ترجیحات" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_میان‌برهای صفحه‌کلید" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_دربارهٔ گیشه" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "ویرایش قسمت" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "شمارهٔ قسمت (لازم)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "ترجیحات" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "بارگیری اختیاری" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "تکمیل برپایی" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "حالت برون‌خط" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "به کار انداختن حالت برون‌خط" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "پایگاه دادهٔ فیلم (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "زبان نتیجهٔ TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "بسامد به‌روز رسانی" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "آغزا دوبارهٔ گیشه پس از تغییر" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "هرگز" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "روزانه" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "هفتگی" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "ماهانه" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "استفاده از کلید APIتان" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" "کلیدتان را از این‌جا " "ثبت کنید" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "کلید APIتان" #: src/ui/preferences.blp:75 msgctxt "preferences" msgid "Save Key" msgstr "ذخیرهٔ کلید" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "خانه‌تکانی" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "پاک سازی انباره در خروج" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "پاکسازی داده‌های جست‌وجوی انباشه" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "پاک سازی داده" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "سیاههٔ‌ تماشایتان خالیست" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "افزودن محتوا با دکمهٔ + یا درون‌ریزی از سیاههٔ تماشایی قدیمی‌تر." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "سیاههٔ‌ تماشایتان" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "دیده نشده" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "به‌روز رسانی سیاههٔ تماشایتان" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "استفاده از حالت برون‌خط" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "تلاش دوباره در اجرای بعدی" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "فعّال سازی آگاهی‌ها؟" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 msgid "Activate" msgstr "فعّال سازی" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "غیرفعّال" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "افزودن عنوانی به کتابخانه‌ةان" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "نمایش یا نهفتن نوار جست‌وجو" #: src/ui/views/main_view.blp:110 msgid "Search Your Watchlist" msgstr "جست‌وجوی سیاههٔ تماشایتان" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "حالت برون‌خط به کار افتاد" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_چینش" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "آ-ی" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "ی-آ" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "تاریخ افزودن (نخست جدیدترین)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "تاریخ افزودن (نخست قدیمی‌ترین)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "تاریخ انتشار (نخست جدیدترین)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "تاریخ انتشار (نخست قدیمی‌ترین)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "جدا کردن دیده شده از دیده نشده" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "نهفتن دیده شده‌ها" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_تازه‌سازی" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "_درون‌ریزی" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "_برون‌ریزی" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "از پایگاه دادهٔ فیلم (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "دستی" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "فعّالیت‌های پس‌زمینه" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "بدون فعّالیت پس‌زمینه" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "ویرایش پوستر" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "حذف پوستر" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "سریال ارائه‌ای جدید دارد" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "سریال به زودی ارائه‌ای جدید دارد" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "این عنوان به دیده شده علامت خورد" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "افزودن به سیاههٔ تماشا" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "پیروی از سبک سامانه" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "سبک روشن" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "سبک تیره" #: src/views/content_view.py:323 msgid "Search results" msgstr "نتایج جست‌وجو" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "منتظر شبکه…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "آماده کردن چیزها…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "بار گرفتن داده‌ها" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "فیلم‌ها" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "به‌روز رسانی خودکار سیاههٔ آگاهی" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "به‌روز رسانی خودکار" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, python-brace-format msgid "New release for {title}" msgstr "ارائه جدید برای {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "این به‌روز رسانی روی {count_movies} فیلم اثر می‌گذارد" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr " و " #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr " {count_series} سریال" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "این به‌روز رسانی روی {count_series} سریال اثر می‌گذارد" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "حذف {title}؟" #: src/widgets/episode_row.py:270 msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "همهٔ تغییرات این قسمت از دست خواهند رفت." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 msgctxt "alert dialog action" msgid "_Delete" msgstr "_حذف" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "از پیش در سیاههٔ تماشایتان" #: src/widgets/season_expander.py:144 msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "این فصل فراداده‌های ذخیره نشده‌ای دارد." ticketbooth-1.1.1/po/fr.po000066400000000000000000001120531475632104500154270ustar00rootroot00000000000000# French translations for ticketbooth package. # Copyright (C) 2023 THE ticketbooth'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Automatically generated, 2023. # # "J. Lavoie" , 2023. # Alessandro Iepure , 2023. # rene-coty , 2023, 2025. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2025-02-19 08:46+0000\n" "Last-Translator: rene-coty \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.10.1-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Largeur de la fenêtre" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Hauteur de la fenêtre" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Fenêtre maximisée" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Onglet actif" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Spécifie si l’application est exécutée pour la première fois" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "Spécifie si la base de données nécessite une mise à jour" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Spécifie si l’application a téléchargé les données requises" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Type de tri de l’affichage" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "Séparer les contenus déjà vus et pas encore vus" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "Masquer les contenus déjà vus" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "Visibilité de la barre de recherche" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 msgid "Search mode" msgstr "Mode de recherche" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "Requête de recherche" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Thème de couleurs de l’appli" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Langue utilisée dans les résultats de recherche TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Fréquence de recherche de nouvelles données sur TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Date de la dernière mise à jour automatique" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 msgid "Last notification autoupdate date" msgstr "Date de mise à jour automatique de la dernière notification" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Vider le cache lors de la fermeture" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "Utiliser la clé TMDB de l’utilisateur" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "Clé TMDB de l’utilisateur" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Gardez la trace de vos émissions favorites" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth vous permet de créer votre liste de films et de séries " "télévisées, de conserver vos titres regardés et de trouver des informations " "sur les dernières sorties." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth ne vous permet pas de regarder ou de télécharger des contenus. " "Cette application utilise l’API TMDB mais n’est ni promue ni certifiée par " "TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "Confirmer l’exportation ?" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" "L’exportation de votre bibliothèque créera une archive contenant toutes vos " "données. Vous pourrez importer cette archive plus tard pour restaurer votre " "bibliothèque." #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 msgctxt "alert dialog action" msgid "_Cancel" msgstr "A_nnuler" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "_Exporter" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "Export de la bibliothèque" #: src/main.py:307 msgid "Confirm Import?" msgstr "Confirmer l’importation ?" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" "La bibliothèque importée sera fusionnée avec l’actuelle. Cette action ne " "peut être annulée et en cas de conflit, les données nouvelles seront " "conservées." #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "_Importer" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "Importation de la bibliothèque" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Aucun réseau" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Connectez-vous à Internet pour compléter la configuration." #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "_OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Effacer le cache" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} titres" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Supprimer tous les films" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Supprimer toutes les séries télé" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth utilise actuellement {total_space:.2f} Mo. Utilisez les options " "ci-dessous pour libérer de l’espace." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} Mo occupés" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Activités en cours en arrière-plan" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Certaines activités sont en cours d’exécution en arrière-plan et doivent " "être achevées avant de quitter l’application. Surveillez l’indicateur dans " "la barre supérieure pour vérifier si elles sont terminées." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Modifier le film" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Modifier la série télé" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Saison {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Ajouter {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Mettre à jour {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Saison" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Déjà vu" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Marquer comme vu" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "Durée du film" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} saison" msgstr[1] "{num} saisons" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "Nombre de saisons" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} épisode" msgstr[1] "{num} épisodes" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Statut" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Langue originale" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Titre original" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budget" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Revenus" #: src/pages/details_page.py:531 msgid "In Production" msgstr "En production" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Oui" #: src/pages/details_page.py:535 msgid "No" msgstr "Non" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "Identifiant TMDB" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h} h {m} min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m} min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Mise à jour de {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Mettre à jour {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Chargement des métadonnées…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Supprimer {title} ?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Ce titre sera supprimé de votre liste de visionnage." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Annuler" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Supprimer" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Supprimer {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Certaines icônes sont couvertes par le droit d’auteur du Projet GNOME" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Irénée Thirion" #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Séries TV" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Annuler" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Enregistrer" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Général" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Titre (requis)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Date de sortie" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Genres (séparés par une virgule)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Durée (en minutes)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Sous-titre" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Créé par" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Aperçu" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Saisons (requis)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Utilisez le bouton + pour ajouter des saisons" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Ajouter" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Informations supplémentaires" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budget ($ US)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Revenus ($ US)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "En production" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Rechercher sur The Movie Database…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Rechercher un titre" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Commencez à taper dans la barre de recherche pour voir une liste de films et " "séries TV" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Aucun résultat trouvé" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Essayez une recherche différente" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Modifier la saison" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Épisodes (requis)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Utilisez le bouton + pour ajouter des épisodes" #: src/ui/dialogs/message_dialogs.blp:9 msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Effacer les données mises en cache ?" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" "Cette opération effacera toutes les données stockées mises en caches. Elles " "pourront être téléchargées à nouveau la prochaine fois que vous ajouterez " "des contenus depuis TMDB." #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 msgctxt "message dialog action" msgid "Cancel" msgstr "Annuler" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 msgctxt "message dialog action" msgid "Clear" msgstr "Effacer" #: src/ui/dialogs/message_dialogs.blp:19 msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Effacer les données stockées ?" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" "Cette opération supprimera définitivement les données sélectionnées, ce qui " "effacera toutes vos modifications." #: src/ui/dialogs/message_dialogs.blp:26 msgid "Movies" msgstr "Films" #: src/ui/dialogs/message_dialogs.blp:34 msgid "TV Series" msgstr "Séries" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Général" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Afficher les raccourcis" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Afficher les préférences" #: src/ui/gtk/help-overlay.blp:28 msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Rechercher dans votre liste de visionnage" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Quitter" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Gestion de la bibliothèque" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Ajouter un titre depuis TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Ajouter un titre manuellement" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Mettre à jour la bibliothèque" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menu principal" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "Nombre d’épisodes" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "Date de diffusion du prochain épisode" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "Me notifier lors des nouvelles sorties" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Mettre à jour les métadonnées" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Modifier" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Supprimer" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Description" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Saisons" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "Notes" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Préférences" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "Raccourcis _clavier" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_ À propos de Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Modifier l’épisode" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Numéro de l’épisode (requis)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Préférences" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Téléchargement optionnel" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Pour une expérience d’utilisation complète, un téléchargement de 15 KB est " "requis. La configuration initiale n’a pas permis de récupérer les données " "automatiquement et le mode hors ligne a donc été activé. Il restera actif " "jusqu’à ce que la configuration soit terminée." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Terminer la configuration" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Mode hors-ligne" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth peut fonctionner entièrement hors-ligne. Si vous choisissez " "d’utiliser l’application avec ce mode, certaines fonctionnalités requérant " "un accès à Internet et/ou à des APIs tierces ne seront pas disponibles." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Activer le mode hors-ligne" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB permet d’obtenir des métadonnées localisées pour la plupart des " "contenus. Ticket Booth les téléchargera dans votre langue préférée, que vous " "pouvez sélectionner ci-dessous. Si un contenu n’est pas disponible dans " "votre langue, il sera affiché en anglais américain et ensuite dans sa langue " "d’origine. Si aucune langue n’est disponible, le résultat sera une chaîne " "vide. Nous vous invitons à contribuer à TMDB. En outre, une mise à jour automatique de " "la base de données est effectuée à la fréquence de votre choix." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Langues des résultats TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Fréquence de mise à jour" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Redémarrer Ticket Booth après les changements" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Jamais" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Quotidienne" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Hebdomadaire" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Mensuelle" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "Utiliser votre clé d’API" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" "Enregistrez la vôtre ici" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "Votre clé d’API" #: src/ui/preferences.blp:75 msgctxt "preferences" msgid "Save Key" msgstr "Enregistrer la clé" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Ménage" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Effacer le cache à la fermeture" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Effacer les données de recherche mises en cache" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Effacer les données" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Votre liste de visionnage est vide" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "" "Ajoutez du contenu avec le bouton + ou importez-en depuis une liste de " "visionnage plus ancienne." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Votre liste de visionnage" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "Pas encore vu" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "Mise à jour de votre liste de visionnage" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" "Après la mise à jour de Ticket Booth nous devrons mettre à jour les entrées " "de la base de données locales" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Utiliser le mode hors-ligne" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Essayer au prochain lancement" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "Activer les notifications ?" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" "Souhaitez-vous activer les notifications pour toutes les séries encore en " "cours de production et pour les films qui ne sont pas encore sortis ?" #: src/ui/views/db_update_view.blp:76 msgid "Activate" msgstr "Activer" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "Désactiver" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Ajouter un titre à votre bibliothèque" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "Afficher / masquer la barre de recherche" #: src/ui/views/main_view.blp:110 msgid "Search Your Watchlist" msgstr "Rechercher dans votre liste de visionnage" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Mode hors-ligne activé" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Tri" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Date d’ajout (récents d’abord)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Date d’ajout (anciens d’abord)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Date de sortie (récentes d’abord)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Date de sortie (anciennes d’abord)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "Séparer les contenus déjà vus et ceux pas encore vus" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "Masquer les contenus vus" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Actualiser" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "_Importer" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "_Exporter" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Depuis The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manuellement" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Activités en arrière-plan" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Aucune activité en arrière-plan" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Modifier l’affiche" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Supprimer l’affiche" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "La série a une nouvelle sortie" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "La série aura bientôt une nouvelle sortie" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "Ce titre est marqué comme déjà vu" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Ajouter à la liste de visionnage" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Suivre le style du système" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Thème clair" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Thème sombre" #: src/views/content_view.py:323 msgid "Search results" msgstr "Résultats de recherche" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "En attente de réseau…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Pour une expérience complète, un téléchargement de 15 KB est requis. " "Cependant si vous n’êtes pas connecté à Internet ou ne souhaitez pas " "attendre, vous pouvez passer cette étape et continuer hors ligne sans " "certaines fonctionnalités." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Préparation…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Téléchargement des données" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Films" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Mise à jour automatique de la liste des notifications" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Mise à jour automatique" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, python-brace-format msgid "New release for {title}" msgstr "Nouvelle sortie pour {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "Un nouvel épisode de {title} est sorti il y a {days} jour(s)." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "Nouvelle sortie pour {num} séries dans votre liste de visionnage" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "Les séries sont {series}." #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "{title} aura bientôt une nouvelle sortie" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "Un nouvel épisode sortira dans {days} jour(s)." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" "{num} séries de votre liste de visionnage auront bientôt un nouvel épisode" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "{title} a cessé(e) d’être produit(e)" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" "{title} s’est achevé(e). C'est le moment idéal pour revoir vos moments " "préférés ou pour trouver le prochain épisode !" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "{num} séries de votre liste de visionnage ont cessé d’être produites" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "{title} est sorti !" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "{title} est sorti il y a {days} jour(s)." #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "{num} films de votre liste de visionnage sont sortis." #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "Les films sont {movies}." #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "{title} sortira bientôt !" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "{title} sortira dans {days} jour(s)." #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "{num} films de votre liste de visionnage vont bientôt sortir" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "{num} éléments de votre liste de visionnage ont une mise à jour" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "Ces mises à jour concernent {count_movies} film(s)" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr " et " #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr " {count_series} série(s)" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "Ces mises à jour concernent {count_series} série(s)" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Supprimer {title} ?" #: src/widgets/episode_row.py:270 msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Tous les changements appliqués à cet épisode seront perdus." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 msgctxt "alert dialog action" msgid "_Delete" msgstr "_Supprimer" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Déjà dans votre liste de visionnage" #: src/widgets/season_expander.py:144 msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Cette saison contient des métadonnées non enregistrées." #~ msgid "Notify on new releases" #~ msgstr "Notifier les nouvelles sorties" #~ msgid "day" #~ msgstr "jour" #~ msgid "days" #~ msgstr "jours" #, python-brace-format #~ msgid "" #~ "We hope {out_of_production_series[0].title} has come to an satisfiying " #~ "ending." #~ msgstr "" #~ "Nous espérons que {out_of_production_series[0].title} est arrivé(e) à bon " #~ "terme." #~ msgid "movie" #~ msgstr "film" #~ msgid "movies" #~ msgstr "films" #~ msgid "serie" #~ msgstr "série" #~ msgid "series" #~ msgstr "séries" #~ msgid "and" #~ msgstr "et" #~ msgid "" #~ "Fixes issue that prevented the addition of movies with large budgets and " #~ "revenues." #~ msgstr "" #~ "Corrige un problème qui empêchait l’ajout de films avec des budgets et " #~ "des revenus importants." #~ msgid "First release" #~ msgstr "Première version" ticketbooth-1.1.1/po/hi.po000066400000000000000000001164251475632104500154270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Scrambled777 , 2024. # Nitin Khalia , 2024. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2024-05-07 18:07+0000\n" "Last-Translator: Scrambled777 \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.5.4-rc\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "विंडो चौड़ाई" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "विंडो ऊंचाई" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "विंडो अधिकतम" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "सक्रिय टैब" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "निर्दिष्ट करता है कि क्या ऐप पहली बार चलाया गया है" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "निर्दिष्ट करता है कि क्या ऐप ने आवश्यक डेटा डाउनलोड किया है" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "निर्दिष्ट करता है कि क्या ऐप ने आवश्यक डेटा डाउनलोड किया है" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "श्रेणीकरण शैली देखें" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "शीर्षक खोजें" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "ऐप रंग योजना" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "TMDB परिणामों द्वारा प्रयुक्त भाषा" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "TMBD पर नए डेटा की जांच करने की आवृत्ति" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "अंतिम ऑटो-अपडेट तिथि" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "अंतिम ऑटो-अपडेट तिथि" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "बाहर निकलने पर कैशे साफ़ करें" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "अपने पसंदीदा शो पर नज़र रखें" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth आपको फिल्में और TV शो की अपनी निगरानी सूची बनाने, देखे गए शीर्षकों पर " "नज़र रखने और नवीनतम रिलीज़ के बारे में जानकारी प्राप्त करने देता है।" #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth आपको सामग्री देखने या डाउनलोड करने नहीं देता है। यह ऐप TMBD API का " "उपयोग करता है लेकिन TMDB द्वारा समर्थित या प्रमाणित नहीं है।" #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "रद्द (_C)" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "नेटवर्क नहीं" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "सेटअप पूरा करने के लिए इंटरनेट से कनेक्ट करें।" #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "ठीक है" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "कैशे साफ करें" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} शीर्षक" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "सभी फिल्में मिटाएं" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "सभी TV श्रंखलायें मिटाएं" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth वर्तमान में {total_space:.2f} MB का उपयोग कर रहा है। कुछ स्थान खाली " "करने के लिए नीचे दिए गए विकल्पों का उपयोग करें।" #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB घेरी गई" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "पृष्ठभूमि गतिविधियां चल रही हैं" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "कुछ गतिविधियां पृष्ठभूमि में चल रही हैं और बाहर निकलने से पहले उन्हें पूरा करना आवश्यक है। यह " "जांचने के लिए कि वे कब समाप्त हो गए हैं, शीर्षलेख पट्टी में संकेतक देखें।" #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "फिल्म संपादित करें" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "TV श्रृंखला संपादित करें" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "सीज़न {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "जोडें {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "{title} अपडेट करें" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "सीज़न" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "देखे गये" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "देखे गए चिह्नित करें" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "रनटाइम (मिनट)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} सीज़न" msgstr[1] "{num} सीजंस" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} सीज़न" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} एपिसोड" msgstr[1] "{num} एपिसोडस" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "स्थिति" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "मूल भाषा" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "मूल शीर्षक" #: src/pages/details_page.py:511 msgid "Budget" msgstr "बजट" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "राजस्व" #: src/pages/details_page.py:531 msgid "In Production" msgstr "उत्पादन में" #: src/pages/details_page.py:534 msgid "Yes" msgstr "हाँ" #: src/pages/details_page.py:535 msgid "No" msgstr "नहीं" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}h {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "{title} अपडेट किया जा रहा है" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "अपडेट {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "मेटाडेटा लोड हो रहा है…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "{title} मिटाएं?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "यह शीर्षक आपकी निगरानी सूची से मिटा दिया जाएगा।" #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "रद्द (_C)" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "मिटाएं (_D)" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "{title} मिटाएं" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Scrambled777 " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "फिल्म" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "TV श्रृंखला" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "रद्द करें" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "सहेजें" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "सामान्य" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "शीर्षक (आवश्यक)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "रिलीज़ दिनांक" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "शैलियां (अल्पविराम से अलग)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "रनटाइम (मिनट)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "टैगलाइन" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "इनके द्वारा बनाई गई" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "अवलोकन" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "सीजंस (required)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "सीज़न जोड़ने के लिए + बटन का उपयोग करें" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "जोड़ें" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "अतिरिक्त जानकारी" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "बजट (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "राजस्व (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "उत्पादन में" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "The Movie Database खोजें…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "शीर्षक खोजें" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "मेल खाने वाली फिल्मों और TV श्रृंखलाओं की सूची देखने के लिए खोज बार में टाइप करना प्रारंभ करें" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "कोई परिणाम नहीं मिला" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "भिन्न खोज का प्रयास करें" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "सीज़न संपादित करें" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "एपिसोड (आवश्यक)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "एपिसोड जोड़ने के लिए + बटन का उपयोग करें" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "कैश्ड खोज डेटा साफ़ करें" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "रद्द करें" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "डेटा साफ़ करें" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "डेटा साफ़ करें" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "फिल्में" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "TV श्रृंखला" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "सामान्य" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "शॉर्टकट दिखाएं" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "प्राथमिकताएं दिखाएं" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "आपकी निगरानी सूची" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "छोड़ें" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "लाइब्रेरी प्रबंधन" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "TMDB से शीर्षक जोड़ें" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "शीर्षक मैन्युअल रूप से जोड़ें" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "लाइब्रेरी ताज़ा करें" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "मुख्य मेनू" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} एपिसोड" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "मेटाडेटा अपडेट करें" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "संपादित करें" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "मिटाएं" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "विवरण" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "सीजंस" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "प्राथमिकताएं (_P)" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "कीबोर्ड शॉर्टकट (_K)" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "Ticket Booth के बारे में (_A)" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "एपिसोड संपादन" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "एपिसोड नंबर (आवश्यक)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "प्राथमिकताएं" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "वैकल्पिक डाउनलोड" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "संपूर्ण अनुभव के लिए, 15KB का डाउनलोड आवश्यक है। प्रारंभिक सेटअप स्वचालित रूप से डेटा " "पुनर्प्राप्त नहीं कर सका और इस प्रकार ऑफ़लाइन मोड सक्रिय हो गया है। सेटअप पूरा होने तक " "यह सक्रिय रहेगा।" #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "सेटअप पूरा करें" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "ऑफ़लाइन मोड" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth पूरी तरह से ऑफ़लाइन काम कर सकता है। यदि आप इस मोड में चलना चुनते हैं, तो " "कुछ सुविधाएं जिनके लिए इंटरनेट और/या तृतीय पक्ष API तक पहुंच की आवश्यकता होती है, उपलब्ध " "नहीं होंगी।" #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "ऑफ़लाइन मोड सक्षम करें" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB अधिकांश सामग्री के लिए स्थानीयकृत मेटाडेटा प्रदान करता है। Ticket Booth इसे आपकी " "पसंदीदा भाषा में डाउनलोड करेगा, जिसे नीचे चुना जा सकता है। यदि यह उपलब्ध नहीं है, तो यह " "अंग्रेजी US और फिर सामग्री की मूल भाषा में वापस आ जाएगा। यदि इनमें से कोई भी उपलब्ध नहीं " "है, तो इसका परिणाम एक रिक्त स्ट्रिंग होगा। कृपया TMDB में योगदान करने पर विचार करें। इसके अतिरिक्त, आपके " "द्वारा चुनी गई आवृत्ति पर एक स्वचालित अपडेट किया जाता है।" #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "TMDB परिणाम भाषा" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "अपडेट आवृत्ति" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "बदलने के बाद Ticket Booth पुनः प्रारंभ करें" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "कभी नहीं" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "दैनिक" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "साप्ताहिक" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "मासिक" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "सहेजें" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "गृह व्यवस्था" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "बाहर निकलने पर कैशे साफ़ करें" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "कैश्ड खोज डेटा साफ़ करें" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "डेटा साफ़ करें" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "आपकी निगरानी सूची खाली है" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "+ बटन के साथ सामग्री जोड़ें।" #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "आपकी निगरानी सूची" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "देखे गये" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "पहले से ही आपकी निगरानी सूची में है" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "ऑफ़लाइन मोड का उपयोग करें" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "अगली शुरुआत पर पुनः प्रयास करें" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "सक्रिय टैब" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "अपनी लाइब्रेरी में एक शीर्षक जोड़ें" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "आपकी निगरानी सूची" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "ऑफ़लाइन मोड सक्षम" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "छंटाई (_S)" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "तिथि जोड़ी गई (नवीनतम पहले)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "तिथि जोड़ी गई (सबसे पुरानी पहले)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "रिलीज की तारीख (नवीनतम पहले)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "रिलीज की तारीख (सबसे पुरानी पहले)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "देखे गये" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "ताज़ा करें (_R)" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "The Movie Database (TMDB) से" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "मैन्युअल" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "पृष्ठभूमि गतिविधियां" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "कोई पृष्ठभूमि गतिविधियां नहीं" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "पोस्टर संपादन" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "पोस्टर मिटाएं" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "निगरानी सूची में जोड़ें" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "सिस्टम शैली का पालन करें" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "हल्की शैली" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "गहरी शैली" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "नेटवर्क की प्रतीक्षा में…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "संपूर्ण अनुभव के लिए, 15KB का डाउनलोड आवश्यक है। हालाँकि, यदि आप इंटरनेट से कनेक्ट नहीं हैं " "या प्रतीक्षा नहीं करना चाहते हैं, तो आप इस चरण को छोड़ सकते हैं और कुछ सुविधाओं के बिना " "ऑफ़लाइन जारी रख सकते हैं।" #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "चीजें तैयार हो रही हैं…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "डेटा डाउनलोड हो रहा है" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "फिल्में" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "स्वचालित अपडेट" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "स्वचालित अपडेट" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "{title} मिटाएं" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "{title} मिटाएं?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "इस एपिसोड के सभी परिवर्तन खो जाएंगे।" #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "मिटाएं (_D)" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "पहले से ही आपकी निगरानी सूची में है" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "इस सीज़न में न सहेजा गया मेटाडेटा शामिल है।" #, fuzzy #~ msgid "movie" #~ msgstr "फिल्म" #, fuzzy #~ msgid "movies" #~ msgstr "फिल्में" #, fuzzy #~ msgid "series" #~ msgstr "TV श्रृंखला" ticketbooth-1.1.1/po/it.po000066400000000000000000001064721475632104500154440ustar00rootroot00000000000000# Italian translations for ticketbooth package. # Copyright (C) 2023 THE ticketbooth'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Automatically generated, 2023. # # Alessandro Iepure , 2023, 2025. # albanobattistella , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2025-02-14 19:55+0000\n" "Last-Translator: Alessandro Iepure \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Larghezza finestra" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Altezza finestra" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Finestra massimizzata" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Scheda attiva" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Specifica se l'app è eseguita per la prima volta" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "Specifica se il database ha bisogno di essere aggiornato" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Specifica se l'app ha scaricato i dati richiesti" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Tipo di ordinamento" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "Separa i contenuti visti da quelli non visti" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "Nascondi contenuti visti" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "Visibilità barra di ricerca" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 msgid "Search mode" msgstr "Modalità di ricerca" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "Query di ricerca" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Tema dell'app" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Lingua usata dai risultati di TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Frequenza per cercare nuovi dati su TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Ultima data di autoaggiornamento" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 msgid "Last notification autoupdate date" msgstr "Ultima data notifica di auto-aggiornamento" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Elimina cache all'uscita" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "Usa la chiave TMDB dell'utente" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "Chiave TMDB dell'utente" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Tieni traccia dei tuoi show preferiti" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth ti permette di creare un elenco di film e serie TV, tenere " "traccia dei titoli visti e trovare informazioni sulle ultime uscite." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth non permette di vedere o scaricare contenuto. Questa app usa " "l'API di TMDB ma non è approvata né certificata da TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "Conferma export?" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" "Esportando la tua libreria, verrà creato un archivio contenente tutti i tuoi " "dati. Puoi importare questo archivio per ripristinare la libreria in un " "secondo momento." #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Annulla" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "_Esporta" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "Esportando libreria" #: src/main.py:307 msgid "Confirm Import?" msgstr "Conferma import?" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" "Importando una libreria, essa verrà unità con quella corrente. Questa azione " "non può essere annullata e un caso di conflitti, i dati nuovi verranno " "mantenuti." #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "_Importa" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "Importando libreria" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Nessuna connessione" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Connettiti a Internet per completare la configurazione." #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "_OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Elimina cache" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} titoli" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Elimina tutti i film" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Elimina tutte le serie TV" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth attualmente occupa {total_space:.2f} MB. Usa le opzioni sotto " "per liberare un po' di spazio." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB occupati" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Attività in background in esecuzione" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Alcune attività sono in esecuzione in background e devono essere completate " "prima di uscire. Guarda l'indicatore nella header bar per controllare quando " "sono finite." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Modifica film" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Modifica serie TV" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Stagione {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Aggiungo {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Aggiorno {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Stagione" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Visto" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Segna come visto" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "Durata del film" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Stagione" msgstr[1] "{num} Stagioni" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "Numero di stagioni" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Episodio" msgstr[1] "{num} Episodi" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Stato" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Lingua originale" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Titolo originale" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budget" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Incasso" #: src/pages/details_page.py:531 msgid "In Production" msgstr "In produzione" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Sì" #: src/pages/details_page.py:535 msgid "No" msgstr "No" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "ID TMDB" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}h {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Aggiornando {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Aggiorna {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Caricamento dei metadati…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Elimina {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Questo titolo verrà eliminato dalla tua lista." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Annulla" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Elimina" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Elimina {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Alcune icone sono copyright di GNOME Project" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Alessandro Iepure " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Serie TV" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Annulla" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Salva" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Generali" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Titolo (richiesto)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Data di rilascio" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Generi (separati da virgola)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Durata (minuti)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Slogan" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Creato da" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Trama" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Stagioni (richiesto)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Usa il pulsante + per aggiungere stagioni" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Aggiungi" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Informazioni aggiuntive" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budget ($ US)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Incasso ($ US)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "In produzione" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Cerca in The Movie Database…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Cerca un titolo" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Inizia a scrivere nella barra di ricerca per vedere una lista di film e " "serie TV corrispondenti" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Nessun risultato trovato" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Prova a cercare qualcos'altro" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Modifica stagione" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episodi (richiesto)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Usa il pulsante + per aggiungere episodi" #: src/ui/dialogs/message_dialogs.blp:9 msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Elimina dati in cache?" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" "Questa operazione eliminerà i dati presenti nella cache. Potrebbero essere " "scaricati di nuovo la prossima volta che aggiungi contenuti da TMDB." #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 msgctxt "message dialog action" msgid "Cancel" msgstr "Annulla" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 msgctxt "message dialog action" msgid "Clear" msgstr "Elimina dati" #: src/ui/dialogs/message_dialogs.blp:19 msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Elimina dati salvati?" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" "Questa operazione eliminerà permanentemente i dati selezionati, perdendo " "tutte le tue modifiche." #: src/ui/dialogs/message_dialogs.blp:26 msgid "Movies" msgstr "Film" #: src/ui/dialogs/message_dialogs.blp:34 msgid "TV Series" msgstr "Serie TV" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Generali" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostra scorciatoie" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Mostra preferenze" #: src/ui/gtk/help-overlay.blp:28 msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Cerca nella tua lista" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Esci" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Gestione libreria" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Aggiungi un titolo da TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Aggiungi un titolo manualmente" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Aggiorna libreria" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menù principale" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "Numero di episodi" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "Data di messa in onda del prossimo episodio" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "Avvisami delle nuove uscite" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Aggiorna metadati" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Modifica" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Elimina" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Descrizione" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Stagioni" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "Note" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Preferenze" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Scorciatoie da tastiera" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Su Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Modifica episodio" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Numero episodio (richiesto)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Preferenze" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Download opzionale" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Per un'esperienza completa, un download di 15 KB è richiesto. La " "configurazione iniziale non ha potuto scaricare i dati in automatico e " "quindi la modalità offline è stata attivata. Resterà attiva finché la " "configurazione non sarà completata." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Completa configurazione" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Modalità offline" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth può funzionare completamente offline. Se scegli questa " "modalità, alcune funzionalità che richiedono Internet e/o accesso a API di " "terze parti non saranno disponibili." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Abilita modalità offline" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB fornisce metadati localizzati per la maggior parte dei contenuti. " "Ticket Booth scaricherà i dati nella lingua preferita, selezionabile sotto. " "Qualora essa non fosse disponibile, saranno scaricati in Inglese US oppure " "nella lingua originale del contenuto. Se nessuna fosse disponibile, il " "risultato sarà una stringa vuota. Per favore considera di contribuire a TMDB. In aggiunta, " "un aggiornamento automatico è eseguito con una frequenza selezionabile." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Lingua risultati TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Frequenza di aggiornamento" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Riavvia Ticket Booth dopo la modifica" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Mai" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Giornalmente" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Settimanalmente" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Mensilmente" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "Usa la tua chiave API" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" "Registra la tua qua" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "La tua chiave API" #: src/ui/preferences.blp:75 msgctxt "preferences" msgid "Save Key" msgstr "Salva chiave" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Pulizie" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Elimina la cache all'uscita" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Elimina cache di ricerca" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Elimina dati" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "La tua lista è vuota" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "Aggiungi contenuti con il pulsate + o importa da una lista vecchia." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "La tua lista" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "Non Visto" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "Aggiornando la tua lista" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" "Dopo l'aggiornamento di Ticket Booth dobbiamo aggiornare le voci del " "database locale" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Usa la modalità offline" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Riprova al prossimo avvio" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "Attiva notifiche?" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" "Vuoi attivare notifiche per tutte le serie ancora in produzione e per tutti " "i film che non sono ancora stati rilasciati?" #: src/ui/views/db_update_view.blp:76 msgid "Activate" msgstr "Attiva" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "Disattiva" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Aggiungi un titolo alla tua lista" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "Mostra/Nascondi barra di ricerca" #: src/ui/views/main_view.blp:110 msgid "Search Your Watchlist" msgstr "Cerca nella tua lista" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Modalità offline attivata" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Ordina" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Data aggiunta (più recente prima)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Data aggiunta (più vecchio prima)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Data rilascio (più recente prima)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Data rilascio (più vecchio prima)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "Separa visti da non visti" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "Nascondi visti" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Aggiorna" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "_Importa" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "_Esporta" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Da The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manualmente" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Attività in background" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Nessuna attività in background" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Modifica poster" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Elimina poster" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "La serie ha una nuova uscita" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "La seria avrà una nuova uscita prossimamente" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "Questo titolo è marchiato come visto" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Aggiungi alla lista" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Segui tema di sistema" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Tema chiaro" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Tema scuro" #: src/views/content_view.py:323 msgid "Search results" msgstr "Risultati di ricerca" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "In attesa della rete…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Per un'esperienza completa, un download di 15 KB è richiesto. Se non sei " "connesso a Internet o non vuoi aspettare, è comunque possibile saltare " "questo passo e continuare offline senza alcune funzionalità." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Preparando per il primo avvio…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Scaricando i dati" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Film" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Aggiornamento automatico della lista di notifica" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Aggiornamento automatico" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, python-brace-format msgid "New release for {title}" msgstr "Nuova uscita per {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "Un nuovo episodio di {title} è stato rilasciato {days} giorno fa." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "Nuova uscita per {num} serie TV nella tua lista" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "Le serie sono {series}." #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "{title} avrà una nuova uscita prossimamente" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "Un nuovo episosio uscirà in {days} giorni." #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "{num} Serie TV nella tua lista avranno un episodio prossimamente" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "{title} non è più in produzione" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" "{title} si è conclusa. È il momento perfetto per riguardare i tuoi momenti " "preferiti o trovare la prossima serie!" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "{num} serie TV nella tua lista sono andate fuori produzione" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "{title} è uscito!" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "{title} è stato rilasciato {days} giorni fa." #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "{num} film nella tua lista sono stati rilasciati." #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "I film sono {movies}." #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "{title} sarà rilasciato presto!" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "{title} sarà rilasciato in {days} giorni." #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "{num} film nella tua lista saranno rilasciati presto" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "{num} elementi nella tua lista hanno un aggiornamento" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "Questi aggiornamenti sono per {count_movies} film" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr " e " #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr " {count_series} serie TV" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "Questi aggiornamenti sono per {count_series} serie TV" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Elimina {title}?" #: src/widgets/episode_row.py:270 msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Tutte le modifiche a questo episodio andranno perse." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 msgctxt "alert dialog action" msgid "_Delete" msgstr "_Elimina" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Già nella tua lista" #: src/widgets/season_expander.py:144 msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Questa stagione contiene metadati non salvati." #~ msgid "Notify on new releases" #~ msgstr "Avvisami delle nuove uscite" #~ msgid "movie" #~ msgstr "Film" #~ msgid "movies" #~ msgstr "Film" #~ msgid "serie" #~ msgstr "serie" #, fuzzy #~ msgid "series" #~ msgstr "Serie TV" #~ msgid "" #~ "Fixes issue that prevented the addition of movies with large budgets and " #~ "revenues." #~ msgstr "" #~ "Risolto il problema che impediva l'aggiunta di film con budget e ricavi " #~ "elevati." #~ msgid "First release" #~ msgstr "Prima versione" ticketbooth-1.1.1/po/meson.build000066400000000000000000000002021475632104500166120ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later i18n.gettext('ticketbooth', preset: 'glib') ticketbooth-1.1.1/po/nb_NO.po000066400000000000000000000744431475632104500160250ustar00rootroot00000000000000# Norwegian Bokmal translations for ticketbooth package. # Copyright (C) 2023 THE ticketbooth'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Automatically generated, 2023. # # Allan Nordhøy , 2023. # Alessandro Iepure , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-09-12 15:22+0000\n" "Last-Translator: Alessandro Iepure \n" "Language-Team: Norwegian Bokmål \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0.1-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Vindusbredde" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Vindushøyde" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Vindu maksimert" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Aktiv fane" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Angir hvorvidt programmet kjøres for første gang" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Vis sorteringsstil" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Søk etter tittel" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Programfargedrakt" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Språk brukt i TMDB-resultater" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Frekvens for sjekk av ny data på TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Siste autospillingsdato" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Siste autospillingsdato" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Tøm hurtiglager ved programslutt" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Avbryt" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "" #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "" #: src/preferences.py:321 #, fuzzy msgctxt "Background activity title" msgid "Clear cache" msgstr "Tøm hurtiglager" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Kjørende bakgrunnsaktiviteter" #: src/window.py:233 #, fuzzy msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Noen aktiviteter som kjører i bakgrunnen må ferdigstilles før programslutt. " "En indikator i tittelfeltet snurrer til det er utført." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Rediger film" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Rediger TV-serie" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Sesong {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Oppdaterer {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Sesong" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Sett" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Spilletid (minutter)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, fuzzy, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} sesonger" msgstr[1] "{num} sesonger" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} sesonger" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, fuzzy, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} episoder" msgstr[1] "{num} episoder" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Status" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Opprinnelig språk" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Originaltittel" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budsjett" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Omsetning" #: src/pages/details_page.py:531 msgid "In Production" msgstr "I produksjon" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Ja" #: src/pages/details_page.py:535 msgid "No" msgstr "Nei" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}t {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Oppdaterer {title}…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, fuzzy, python-brace-format msgid "Update {title}" msgstr "Oppdaterer {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Laster inn metadata…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Slett {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Denne tittelen vil bli slettet fra din oppsynsliste." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Avbryt" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Slett" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, fuzzy, python-brace-format msgid "Delete {title}" msgstr "Slett {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Allan Nordhøy, " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 #, fuzzy msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 #, fuzzy msgctxt "Category" msgid "TV Series" msgstr "TV-serier" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Avbryt" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Lagre" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Generelt" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Tittel (påkrevd)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Utgivelsesdato" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Sjangre (kommainndelt)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Spilletid (minutter)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Slogan" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Opprettet av" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Oversikt" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Sesonger (påkrevd)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Bruk «+»-knappen for å legge til sesonger" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Legg til" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Ytterligere info" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budsjett {US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Omsetning (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "I produksjon" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Søk i «The Movie Database»…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Søk etter tittel" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "Skriv i søkefeltet for å vise en liste over filmer og TV-serier" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Resultatløst" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Prøv å søke etter noe annet" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Rediger sesong" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episoder (påkrevd)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Bruk «+»-knappen for å legge til episoder" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Tøm data" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Avbryt" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Tøm data" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Tøm data" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filmer" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "TV-serier" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Generelt" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Vis snarveier" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Din oppsynsliste" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Avslutt" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Bibliotekshåndtering" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Legg til tittel fra TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Legg til tittel manuelt" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Gjenoppfrisk bibliotek" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Hovedmeny" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} episoder" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Oppdater metadata" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Rediger" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Slett" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Beskrivelse" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Sesonger" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Innstillinger" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Tastatursnarveier" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Om Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Rediger episode" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Episodenummer (påkrevd)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Innstillinger" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Frakoblet modus" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Skru på frakoblet modus" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Oppdateringsfrekvens" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Aldri" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Daglig" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Ukentlig" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Måndelig" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Lagre" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Tøm hurtiglager ved programslutt" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Tøm data" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Oppsynslisten din er tom" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "" #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Din oppsynsliste" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Sett" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Allerede i din oppsynsliste" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Bruk frakoblet modus" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Prøv igjen ved neste kjøring" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Aktiv fane" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Legg til en tittel i biblioteket ditt" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Din oppsynsliste" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "Sortering" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Å" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Å-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Dato tillagt (nyeste først)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Dato tillagt (eldste først)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Utgivelsesdato (nyeste først)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Utgivelsesdato (eldste først)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Sett" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "Gjenoppfrisk" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manuelt" #: src/ui/widgets/background_indicator.blp:13 #, fuzzy msgid "Background Activities" msgstr "Bakgrunnsaktiviteter" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Rediger plakat" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Slett plakat" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Legg til på oppsynsliste" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Følg systemstil" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Lys stil" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Mørk stil" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Venter på nettverk…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Klargjør…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Laster ned data" #: src/views/main_view.py:57 #, fuzzy msgctxt "Category" msgid "Movies" msgstr "Filmer" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Slett {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Slett {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Alle endringer av denne episoden vil gå tapt." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Slett" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 #, fuzzy msgid "Already in your watchlist" msgstr "Allerede i din oppsynsliste" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Denne sesongen inneholder ulagret metadata." #, fuzzy #~ msgid "movie" #~ msgstr "Film" #, fuzzy #~ msgid "movies" #~ msgstr "Filmer" #, fuzzy #~ msgid "series" #~ msgstr "TV-serier" ticketbooth-1.1.1/po/nl.po000066400000000000000000001013271475632104500154330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Heimen Stoffels , 2024. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2024-04-28 18:07+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.5.1\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Vensterbreedte" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Vensterhoogte" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Venster maximaliseren" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Actief tabblad" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Geef aan of de toepassing voor de eerste keer opstart" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Geef aan of de toepassing de vereiste gegevens heeft opgehaald" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Geef aan of de toepassing de vereiste gegevens heeft opgehaald" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Sorteervolgorde" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Zoeken naar titel" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Thema" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Taal van TMDB-resultaten" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Hoe vaak de TMDB-gegevens moeten worden vernieuwd" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Recentste automatische bijwerking" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Recentste automatische bijwerking" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Cache wissen na afsluiten" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Houd je favoriete series in de gaten" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Met Ticket Booth kun je een kijklijst met series en films aanleggen, ze " "volgen en meer informatie zoeken over de nieuwste afleveringen." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Let op: met Ticket Booth kun je geen inhoud bekijken of downloaden. Deze " "toepassing maakt gebruik van de TMDB-api, maar wordt niet gemaakt of erkend " "door TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Annuleren" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Geen internetverbinding" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Maak verbinding met het internet om de instelhulp te voltooien." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "Oké" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Cache wissen" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} items" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Alle films verwijderen" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Alle tv-series verwijderen" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth gebruikt momenteel {total_space:.2f} MB. Gebruik onderstaande " "opties om ruimte vrij te maken." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} mb in gebruik" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Achtergrondactiviteiten actief" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Enkele activiteiten worden op de achtergrond voortgezet en dienen te worden " "voltooid alvorens af te sluiten. Zoek de indicator op de bovenbalk en " "controleer of alles is afgerond." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Film bewerken" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Tv-serie bewerken" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Seizoen {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "{title} toevoegen" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "{title} bijwerken" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Seizoen" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Bekeken" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Markeren als bekeken" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Duur (in minuten)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} seizoen" msgstr[1] "{num} seizoenen" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} seizoen" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} aflevering" msgstr[1] "{num} afleveringen" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Status" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Oorspronkelijke taal" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Oorspronkelijke titel" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budget" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Opbrengst" #: src/pages/details_page.py:531 msgid "In Production" msgstr "In productie" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Ja" #: src/pages/details_page.py:535 msgid "No" msgstr "Nee" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h} uur, {m} min." #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m} min." #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "{title} bijwerken" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "{title} bijwerken" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Bezig met laden van gegevens…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Wil je “{title}” verwijderen?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Hierdoor wordt het item van je kijklijst gehaald." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Annuleren" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "Verwij_deren" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "“{title}” verwijderen" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Heimen Stoffels " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Tv-serie" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Annuleren" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Opslaan" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Algemeen" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Titel (vereist)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Verschenen op" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Genres (kommagescheiden)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Duur (in minuten)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Slagzin" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Gemaakt door" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Overzicht" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Aantal seizoenen (vereist)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Klik op de ‘+’-knop om seizoenen toe te voegen" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Toevoegen" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Aanvullende informatie" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budget (in VS$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Opbrengst (in VS$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "In productie" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Doorzoek The Movie Database…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Zoeken naar titel" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Typ een zoekopdracht in het zoekvak om een lijst met films en tv-series op " "te halen" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Er zijn geen zoekresultaten" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Probeer een andere zoekopdracht" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Seizoen bewerken" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Aantal afleveringen (vereist)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Klik op de ‘+’-knop om afleveringen toe te voegen" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Zoekgeschiedenis wissen" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Annuleren" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Gegevens wissen" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Gegevens wissen" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Films" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Tv-serie" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Algemeen" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Sneltoetsen tonen" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Voorkeuren openen" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Mijn kijklijst" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Afsluiten" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Verzamelingsbeheer" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "TMDB-item toevoegen" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Eigen item toevoegen" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Verzameling herladen" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Hoofdmenu" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} aflevering" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Gegevens bijwerken" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Bewerken" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Verwijderen" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Omschrijving" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Aantal seizoenen" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Voorkeuren" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Sneltoetsen" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Over Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Aflevering bewerken" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Afleveringsnummer (vereist)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Voorkeuren" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Optionele download" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Als je gebruik wilt maken van alle functies van Ticket Booth, dan is een " "aanvullende download van 15 KB vereist. Tijdens het instellen konden deze " "gegevens niet worden opgehaald. De offline-modus is ingeschakeld en blijft " "actief totdat je de functies downloadt." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Alle functies inschakelen" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Offline-modus" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth kan geheel offline werken. Als je deze modus inschakelt, kun je " "geen functies gebruiken die een internetverbinding en/of toegang tot " "bepaalde api's vereisen." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Offline-modus inschakelen" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB heeft van de meeste items vertalingen. Ticket Booth kan deze in een " "taal naar keuze tonen. Als de taal in kwestie niet beschikbaar is, wordt " "terugvallen op Amerikaans Engels of de oorspronkelijke taal van het item. " "Als geen van allen beschikbaar is, wordt een blanco veld getoond. Overweeg " "bij te dragen aan " "TMDB. Aanvullend kan naar eigen inzicht de inhoud automatisch worden " "bijgewerkt." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Taal van TMDB-resultaten" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Bijwerken, iedere" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Herstart Ticket Booth om de wijziging toe te passen" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nooit" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Iedere dag" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Iedere week" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Iedere maand" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Opslaan" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Opruiming" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Cache wissen na afsluiten" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Zoekgeschiedenis wissen" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Gegevens wissen" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Je kijklijst is leeg" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Klik op de ‘+’-knop om items toe te voegen." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Mijn kijklijst" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Bekeken" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Dit staat al op je kijklijst" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Offline-modus inschakelen" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Opnieuw proberen na volgende opstart" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Actief tabblad" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Voeg een item toe aan je verzameling" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Mijn kijklijst" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "De offline-modus is ingeschakeld" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Sorteren" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Datum van toevoegen (nieuwste eerst)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Datum van toevoegen (oudste eerst)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Datum van verschijnen (nieuwste eerst)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Datum van verschijnen (oudste eerst)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Bekeken" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "He_rladen" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Van The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Handmatig" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Achtergrondactiviteiten" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Geen achtergrondactiviteiten" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Poster bewerken" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Poster verwijderen" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Toevoegen aan kijklijst" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Systeemthema" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Licht thema" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Donker thema" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Bezig met wachten op internetverbinding…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Om gebruik te kunnen maken van alle functies is een aanvullende download van " "15 KB vereist. Als je niet verbonden bent met het internet of niet wilt " "wachten, dan kun je deze stap overslaan en de beperktere offline-modus " "gebruiken." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Bezig met afstellen…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Bezig met ophalen van gegevens…" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Films" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Automatisch bijwerken" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Automatisch bijwerken" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "“{title}” verwijderen" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Wil je “{title}” verwijderen?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Alle aanpassingen aan deze aflevering worden gewist." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "Verwij_deren" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Dit staat al op je kijklijst" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Dit seizoen bevat niet-opgeslagen gegevens." #, fuzzy #~ msgid "movie" #~ msgstr "Film" #, fuzzy #~ msgid "movies" #~ msgstr "Films" #, fuzzy #~ msgid "series" #~ msgstr "Tv-serie" ticketbooth-1.1.1/po/pl.po000066400000000000000000001025201475632104500154310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Robert Wolniak , 2023. # Robert Wolniak , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-11-20 05:06+0000\n" "Last-Translator: Robert Wolniak \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.2\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Szerokość okna" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Wysokość okna" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Okno zmaksymalizowane" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Aktywna karta" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Określa, czy aplikacja jest uruchamiana po raz pierwszy" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Określa, czy aplikacja pobrała niezbędne dane" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Określa, czy aplikacja pobrała niezbędne dane" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Zobacz styl sortowania" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Szukaj po tytule" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Schemat kolorystyczny aplikacji" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Język rezultatów z TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Częstotliwość sprawdzania TMDB pod kątem nowych danych" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Data najnowszej automatycznej aktualizacji" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Data najnowszej automatycznej aktualizacji" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Wyczyść ciasteczka przy wyłączaniu aplikacji" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Śledź swoje ulubione programy" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Dzięki Ticket Booth możesz stworzyć swoją listę filmów i seriali do " "obejrzenia, jak również śledzić na bieżąco postępy w oglądanych tytułach i " "znajdywać informacje o nowościach." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth nie zawiera funkcji oglądania czy pobierania zawartości. " "Aplikacja korzysta z TMDB API, ale nie jest wspierana ani w żaden sposób " "powiązana z TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Anuluj" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Brak połączenia z siecią" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Aby ukończyć konfigurację, połącz się z internetem." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Wyczyść ciasteczka" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} tytułów" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Usuń wszystkie filmy" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Usuń wszystkie seriale" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth obecnie używa {total_space:.2f} MB przestrzeni na dysku. Użyj " "opcji poniżej by zwolnić nieco miejsca." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB używane" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Działające aktywności w tle" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Niektóre aktywności działają w tle i muszą zostać zakończone, zanim program " "zostanie zamknięty. Żeby zobaczyć kiedy aktywność zostanie zakończona, patrz " "na wskaźnik w pasku nagłówka." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Edytuj film" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Edytuj seriale" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Sezon {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Dodaj {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Zaktualizuj {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Sezon" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Obejrzane" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Oznacz jako obejrzane" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Czas trwania (w minutach)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} sezon" msgstr[1] "{num} sezony" msgstr[2] "{num} sezonów" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} sezon" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} odcinek" msgstr[1] "{num} odcinki" msgstr[2] "{num} odcinków" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Status" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Język oryginału" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Oryginalny tytuł" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Budżet" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Dochód" #: src/pages/details_page.py:531 msgid "In Production" msgstr "W produkcji" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Tak" #: src/pages/details_page.py:535 msgid "No" msgstr "Nie" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}g {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Aktualizowanie {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Aktualizuj {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Wczytywanie metadanych…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Usunąć {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Tytuł ten zostanie usunięty z twojej listy do obejrzenia." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Anuluj" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Usuń" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Usuń {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Robert Wolniak " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Seriale" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Anuluj" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Zapisz" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Ogólne" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Tytuł (wymagane)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Data premiery" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Gatunki (oddzielone przecinkiem)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Czas trwania (w minutach)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Słowa kluczowe" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Stworzony przez" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Streszczenie" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Ilość sezonów (wymagane)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Użyj przycisku + by dodać sezon" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Dodaj" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Dodatkowe informacje" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budżet (w dolarach amerykańskich)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Dochód (w dolarach amerykańskich)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "W produkcji" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Przeszukaj The Movie Database…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Szukaj po tytule" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Zacznij wpisywać w pasku wyszukiwania, aby wyświetlić listę pasujących " "filmów i seriali" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Brak wyników" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Spróbuj wyszukać inną frazę" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Edytuj sezon" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Ilość odcinków (wymagane)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Użyj przycisku + by dodać odcinki" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Wyczyść buforowane dane wyszukiwania" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Anuluj" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Wyczyść dane" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Wyczyść dane" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filmy" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Seriale" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Ogólne" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Pokaż skróty klawiszowe" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Pokaż ustawienia" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Twoja lista do obejrzenia" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Wyjdź" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Zarządzanie biblioteką" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Dodaj tytuł z TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Dodaj tytuł ręcznie" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Odśwież bibliotekę" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menu główne" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} odcinek" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Zaktualizuj metadane" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Edytuj" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Usuń" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Opis" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Sezony" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Ustawienia" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Skróty klawiszowe" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_O aplikacji Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Edytuj odcinek" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Numer odcinka (wymagane)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Ustawienia" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Opcjonalne pobieranie" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "W celu uzyskania pełniejszego doświadczenia z programu wymagane jest " "pobranie 15 KB danych. W trakcie wstępnej konfiguracji nie udało się pobrać " "tych danych automatycznie, w związku z czym został włączony tryb offline. " "Pozostanie on włączony, dopóki etap konfiguracji nie zostanie zakończony." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Ukończ konfigurację" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Tryb offline" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth ma możliwość działania bez dostępu do internetu. Jeśli " "zdecydujesz się na korzystanie z programu w tym trybie, niektóre funkcje " "wymagające połączenia z internetem i/lub dostępu do API stron trzecich nie " "będą dostępne." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Włącz tryb offline" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "The Movie Database (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB zapewnia zlokalizowane metadane dla większości treści. Ticket Booth " "pobierze je w wybranym przez ciebie języku, do wybrania poniżej. Jeżeli " "wybrany język nie byłby dostępny, program spróbuje pobrać dane w języku " "angielskim, lub w języku oryginału. Jeśli żaden z nich nie będzie dostępny, " "zostanie wyświetlony pusty ciąg znaków. Prosimy o rozważenie dodania nowych treści do " "bazy TMDB. Dodatkowo automatyczne aktualizacje będą wykonywane " "regularnie na podstawie wybranych preferencji." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Język wyników z TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Częstotliwość aktualizacji" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Po wykonaniu zmiany uruchom ponownie Ticket Booth" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nigdy" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Codziennie" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Co tydzień" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Co miesiąc" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Zapisz" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Czyszczenie" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Wyczyść ciasteczka przy wyłączaniu programu" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Wyczyść buforowane dane wyszukiwania" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Wyczyść dane" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Twoja lista do obejrzenia jest pusta" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Dodaj zawartość przy pomocy przycisku +." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Twoja lista do obejrzenia" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Obejrzane" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Jest już na twojej liście do obejrzenia" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Włącz tryb offline" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Spróbuj ponownie przy kolejnym uruchomieniu" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Aktywna karta" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Dodaj tytuł do swojej biblioteki" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Twoja lista do obejrzenia" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Tryb offline włączony" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Sortowanie" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Data dodania (najnowsze jako pierwsze)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Data dodania (najstarsze jako pierwsze)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Data premiery (najnowsze jako pierwsze)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Data premiery (najstarsze jako pierwsze)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Obejrzane" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Odśwież" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Z The Movie Database (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Ręcznie" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Aktywności w tle" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Bez aktywności w tle" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Edytuj plakat" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Usuń plakat" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Dodaj do listy do obejrzenia" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Ustaw styl systemu" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Styl jasny" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Styl ciemny" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Oczekiwanie na sieć…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "W celu uzyskania pełniejszego doświadczenia z programu wymagane jest " "pobranie 15 KB danych. Jeśli nie masz połączenia z internetem albo nie " "chcesz czekać, możesz pominąć ten krok i korzystać z programu w trybie " "offline, bez kilku jego funkcji." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Przygotowania programu…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Pobieranie danych" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Filmy" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Automatyczne aktualizacje" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Automatyczne aktualizacje" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Usuń {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Usunąć {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Wszystkie zmiany w tym odcinku zostaną utracone." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Usuń" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Jest już na twojej liście do obejrzenia" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Ten sezon zawiera niezapisane metadane." #, fuzzy #~ msgid "movie" #~ msgstr "Film" #, fuzzy #~ msgid "movies" #~ msgstr "Filmy" #, fuzzy #~ msgid "series" #~ msgstr "Seriale" ticketbooth-1.1.1/po/pt.po000066400000000000000000001007051475632104500154440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Juliano Dorigão , 2023. # ssantos , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-12-19 16:08+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.3\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Largura da janela" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Altura da janela" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Janela maximizada" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Guia ativa" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Especifica se o aplicativo é executado pela primeira vez" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Especifica se o aplicativo baixou os dados necessários" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Especifica se o aplicativo baixou os dados necessários" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Ver estilo de classificação" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Pesquisar por Título" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Esquema de cores do aplicativo" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Linguagem usada pelos resultados do TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Frequência para verificar novos dados no TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Data da última atualização automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Data da última atualização automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Limpar cache ao sair" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Acompanhe seus programas favoritos" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "O Ticket Booth permite que você crie sua lista de filmes e programas de TV, " "acompanhe os títulos assistidos e encontre informações sobre os últimos " "lançamentos." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "O Ticket Booth não permite que você assista ou baixe conteúdo. Este " "aplicativo usa a API TMDB, mas não é endossado ou certificado pelo TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Sem rede" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Conecte-se à Internet para concluir a configuração." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Limpar cache" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Títulos" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Apagar todos os filmes" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Apagar todas as séries de TV" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth usa atualmente {total_space:.2f} MB. Use as opções abaixo para " "liberar espaço." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB ocupado" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Atividades em segundo plano em execução" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Algumas atividades estão sendo executadas em segundo plano e precisam ser " "concluídas antes de sair. Procure o indicador na barra de cabeçalho para " "verificar quando terminar." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Editar filme" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Editar série de TV" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Temporada {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Adicionar {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Atualizar {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Temporada" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Assistido" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Marcar como assistido" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Temporada" msgstr[1] "{num} Temporadas" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Episódio" msgstr[1] "{num} Episódios" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Estado" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Idioma Original" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Título original" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Orçamento" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Receita" #: src/pages/details_page.py:531 msgid "In Production" msgstr "Em Produção" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Sim" #: src/pages/details_page.py:535 msgid "No" msgstr "Não" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}h {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "A atualizar {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Atualizar {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "A carregar metadados…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Apagar {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Este título será apagado da sua lista de observação." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Excluir" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Apagar {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Juliano Dorigão " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Filme" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Série de TV" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Gravar" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Geral" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Título (obrigatório)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Data de lançamento" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Gêneros (separados por vírgula)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Duração (minutos)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Slogan" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Criado por" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Visão geral" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Temporadas (obrigatório)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Use o botão + para adicionar temporadas" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Adicionar" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Informações adicionais" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Orçamento (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Receita (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "Em produção" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Buscar no banco de dados de filmes…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Pesquisar por Título" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Comece a digitar na barra de pesquisa para ver uma lista de filmes e séries " "de TV correspondentes" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Nenhum resultado encontrado" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Tente uma pesquisa diferente" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Editar temporada" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episódios (obrigatório)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Use o botão + para adicionar episódios" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Limpar dados de pesquisa em cache" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Apagar os dados" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Apagar os dados" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filmes" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Série de TV" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Geral" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar atalhos" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Mostrar preferências" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "A sua lista" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Sair" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Gestão de biblioteca" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Adicionar título do TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Adicionar título manualmente" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Atualizar biblioteca" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menu principal" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Atualizar metadados" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Editar" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Apagar" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Descrição" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Temporadas" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Preferências" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Atalhos do teclado" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Sobre Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Editar episódio" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Número do episódio (obrigatório)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Preferências" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Descarregar opcional" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Para uma experiência completa uma descarga de 15 KB é necessária. A " "configuração inicial não conseguiu recuperar os dados automaticamente e, " "portanto, o modo offline foi ativado. Permanecerá ativo até que a " "configuração seja concluída." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Configuração completa" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Modo offline" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "O Ticket Booth pode funcionar totalmente offline. Se optar por executar " "neste modo, alguns recursos que exigem Internet e/ou acesso a APIs de " "terceiros não estarão disponíveis." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Ativar modo offline" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "O banco de dados de filmes (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "O TMDB fornece metadados localizados para a maioria dos conteúdos. O Ticket " "Booth descarguerá no idioma de sua preferência, selecionável abaixo. Caso " "não esteja disponível, o inglês dos EUA será usado e depois o idioma " "original do conteúdo. Se nenhum estiver disponível, resultará numa linha em " "branco. Por favor, considere contribuir para o TMDB. Além disso, uma atualização " "automática é realizada na frequência da sua escolha." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Idioma dos resultados TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Frequência de atualização" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Reinicie Ticket Booth após alterar" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nunca" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Diário" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Semanalmente" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Mensal" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Gravar" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Serviço de limpeza" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Limpar Cache ao Sair" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Limpar dados de pesquisa em cache" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Apagar os dados" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "A sua lista está vazia" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Adicione conteúdo com o botão +." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "A sua lista" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Usar o modo offline" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Tente novamente na próxima execução" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Guia ativa" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Adicione um título à sua biblioteca" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "A sua lista" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Modo offline ativado" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Ordenação" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Data adicionada (mais recente primeiro)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Data adicionada (o mais antigo primeiro)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Data de lançamento (mais recente primeiro)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Data de lançamento (mais antigo primeiro)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Atualizar" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Do banco de dados de filmes (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manualmente" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Atividades em segundo plano" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Sem atividades em segundo plano" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Editar pôster" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Apagar pôster" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Adicionar à lista" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Seguir o estilo do sistema" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Estilo claro" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Estilo escuro" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "A aguardar rede…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Para uma experiência completa é necessária uma descarga de 15 KB. Porém, se " "não estiver conectado à Internet ou não quiser esperar, pode pular esta " "etapa e continuar offline sem alguns recursos." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "A preparar…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "A descarregar dados" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Filmes" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Atualização automática" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Apagar {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Apagar {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Todas as alterações neste episódio serão perdidas." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Excluir" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Já está na sua lista" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Esta temporada contém metadados não gravados." ticketbooth-1.1.1/po/pt_BR.po000066400000000000000000001014751475632104500160340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Juliano Dorigão , 2023. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2023-11-07 11:33+0000\n" "Last-Translator: Juliano Dorigão \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.2-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Largura da janela" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Altura da janela" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Janela maximizada" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Guia ativa" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Especifica se o aplicativo é executado pela primeira vez" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Especifica se o aplicativo baixou os dados necessários" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Especifica se o aplicativo baixou os dados necessários" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Ver estilo de classificação" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Pesquisar por Título" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Esquema de cores do aplicativo" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Idioma usado pelos resultados do TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Frequência para verificar novos dados no TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Data da última atualização automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Data da última atualização automática" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Limpar cache ao sair" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Acompanhe seus programas favoritos" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "O Ticket Booth permite que você crie sua lista de filmes e programas de TV, " "acompanhe os títulos assistidos e encontre informações sobre os últimos " "lançamentos." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "O Ticket Booth não permite que você assista ou baixe conteúdo. Este " "aplicativo usa a API TMDB, mas não é endossado ou certificado pelo TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Sem rede" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Conecte-se à Internet para concluir a configuração." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "OK" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Limpar cache" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Títulos" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Excluir todos os filmes" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Excluir todas as séries de TV" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth está usando atualmente {total_space:.2f} MB. Use as opções " "abaixo para liberar espaço." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB ocupado" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Atividades em segundo plano em execução" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Algumas atividades estão sendo executadas em segundo plano e precisam ser " "concluídas antes de sair. Procure o indicador na barra de cabeçalho para " "verificar quando terminar." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Editar filme" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Editar série de TV" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Temporada {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Adicionar {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Atualizar {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Temporada" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Assistido" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Marcar como assistido" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Duração (minutos)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Temporada" msgstr[1] "{num} Temporadas" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} Temporada" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Episódio" msgstr[1] "{num} Episódios" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Status" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Idioma Original" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Título original" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Orçamento" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Receita" #: src/pages/details_page.py:531 msgid "In Production" msgstr "Em Produção" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Sim" #: src/pages/details_page.py:535 msgid "No" msgstr "Não" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}h {m}min" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}min" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Atualizando {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Atualizar {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Carregando metadados…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Excluir {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Este título será excluído da sua lista de observação." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Cancelar" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Excluir" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Excluir {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Juliano Dorigão " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Filme" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Série de TV" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Salvar" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Geral" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Título (obrigatório)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Data de lançamento" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Gêneros (separados por vírgula)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Duração (minutos)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Slogan" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Criado por" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Visão geral" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Temporadas (obrigatório)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Use o botão + para adicionar temporadas" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Adicionar" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Informações adicionais" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Orçamento (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Receita (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "Em produção" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Buscar no banco de dados de filmes…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Pesquisar por Título" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Comece a digitar na barra de pesquisa para ver uma lista de filmes e séries " "de TV correspondentes" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Nenhum resultado encontrado" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Tente uma pesquisa diferente" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Editar temporada" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Episódios (obrigatório)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Use o botão + para adicionar episódios" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Limpar dados de pesquisa em cache" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Cancelar" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Apagar os dados" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Apagar os dados" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filmes" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Série de TV" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Geral" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar atalhos" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Mostrar preferências" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Sua lista" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Sair" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Gestão de biblioteca" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Adicionar título do TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Adicionar título manualmente" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Atualizar biblioteca" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Menu principal" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} Episódio" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Atualizar metadados" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Editar" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Excluir" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Descrição" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Temporadas" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Preferências" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Atalhos do teclado" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Sobre Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Editar episódio" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Número do episódio (obrigatório)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Preferências" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Baixar opcional" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Para uma experiência completa é necessário um download de 15 KB. A " "configuração inicial não conseguiu recuperar os dados automaticamente e, " "portanto, o modo offline foi ativado. Ele permanecerá ativo até que a " "configuração seja concluída." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Configuração completa" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Modo offline" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "O Ticket Booth pode funcionar totalmente offline. Se você optar por executar " "neste modo, alguns recursos que exigem Internet e/ou acesso a APIs de " "terceiros não estarão disponíveis." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Ativar modo offline" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "O banco de dados de filmes (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "O TMDB fornece metadados localizados para a maioria dos conteúdos. O Ticket " "Booth fará o download no idioma de sua preferência, selecionável abaixo. " "Caso não esteja disponível, será usado o inglês dos EUA e depois o idioma " "original do conteúdo. Se nenhum estiver disponível, resultará em uma linha " "em branco. Por favor, considere contribuir para o TMDB. Além disso, uma atualização " "automática é realizada na frequência de sua escolha." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Idioma dos resultados TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Frequência de atualização" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Reinicie Ticket Booth após alterar" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Nunca" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Diário" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Semanalmente" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Mensal" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Salvar" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Serviço de limpeza" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Limpar Cache ao Sair" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Limpar dados de pesquisa em cache" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Apagar os dados" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Sua lista está vazia" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Adicione conteúdo com o botão +." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Sua lista" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Assistido" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Já está na sua lista" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Usar o modo offline" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Tente novamente na próxima execução" #: src/ui/views/db_update_view.blp:66 #, fuzzy msgid "Activate Notifications?" msgstr "Atualização automática" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Guia ativa" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Adicione um título à sua biblioteca" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Sua lista" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Modo offline ativado" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Ordenação" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Data adicionada (mais recente primeiro)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Data adicionada (o mais antigo primeiro)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Data de lançamento (mais recente primeiro)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Data de lançamento (mais antigo primeiro)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Assistido" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Atualizar" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Do banco de dados de filmes (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Manualmente" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Atividades em segundo plano" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Sem atividades em segundo plano" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Editar pôster" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Excluir pôster" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Adicionar à lista" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Seguir o estilo do sistema" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Estilo claro" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Estilo escuro" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Aguardando rede…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Para uma experiência completa é necessário um download de 15 KB. Porém, se " "você não estiver conectado à Internet ou não quiser esperar, você pode pular " "esta etapa e continuar offline sem alguns recursos." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Preparando…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Baixando dados" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Filmes" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Atualização automática" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Atualização automática" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Excluir {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Excluir {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Todas as alterações neste episódio serão perdidas." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Excluir" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Já está na sua lista" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Esta temporada contém metadados não salvos." #, fuzzy #~ msgid "movie" #~ msgstr "Filme" #, fuzzy #~ msgid "movies" #~ msgstr "Filmes" #, fuzzy #~ msgid "series" #~ msgstr "Série de TV" ticketbooth-1.1.1/po/ticketbooth.pot000066400000000000000000000661121475632104500175270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 msgid "Specifies if the database needs an update" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 msgid "Search mode" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 msgid "Last notification autoupdate date" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 msgctxt "alert dialog action" msgid "_Cancel" msgstr "" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "" #: src/preferences.py:256 src/window.py:235 msgctxt "alert dialog action" msgid "_OK" msgstr "" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "" #: src/pages/details_page.py:223 msgid "Runtime of Movie" msgstr "" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "" msgstr[1] "" #: src/pages/details_page.py:240 msgid "Number of Seasons" msgstr "" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "" msgstr[1] "" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "" #: src/pages/details_page.py:511 msgid "Budget" msgstr "" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "" #: src/pages/details_page.py:531 msgid "In Production" msgstr "" #: src/pages/details_page.py:534 msgid "Yes" msgstr "" #: src/pages/details_page.py:535 msgid "No" msgstr "" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "" #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "" #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "" #: src/ui/dialogs/message_dialogs.blp:9 msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 msgctxt "message dialog action" msgid "Cancel" msgstr "" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 msgctxt "message dialog action" msgid "Clear" msgstr "" #: src/ui/dialogs/message_dialogs.blp:19 msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 msgid "Movies" msgstr "" #: src/ui/dialogs/message_dialogs.blp:34 msgid "TV Series" msgstr "" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "" #: src/ui/gtk/help-overlay.blp:28 msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "" #: src/ui/pages/details_page.blp:146 msgid "Number of Episodes" msgstr "" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "" #: src/ui/preferences.blp:19 msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 msgctxt "preferences" msgid "Save Key" msgstr "" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "" #: src/ui/views/content_view.blp:15 msgid "Add content with the + button or import from an older watchlist." msgstr "" #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "" #: src/ui/views/content_view.blp:140 msgid "Unwatched" msgstr "" #: src/ui/views/db_update_view.blp:29 msgid "Updating your watchlist" msgstr "" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 msgid "Activate" msgstr "" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 msgid "Search Your Watchlist" msgstr "" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 msgid "Hide watched" msgstr "" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "" #: src/views/main_view.py:146 msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, python-brace-format msgid "New release for {title}" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "" #: src/widgets/episode_row.py:270 msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "" #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 msgctxt "alert dialog action" msgid "_Delete" msgstr "" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "" #: src/widgets/season_expander.py:144 msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "" ticketbooth-1.1.1/po/tr.po000066400000000000000000001007331475632104500154470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # Sabri Ünal , 2024. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2024-04-09 15:54+0000\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.5-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Pencere genişliği" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Pencere yüksekliği" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Pencere büyültüldü" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Etkin sekme" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Uygulamanın ilk kez çalıştırılma durumunu belirtir" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Uygulamanın gerekli verileri indirme durumunu belirtir" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Uygulamanın gerekli verileri indirme durumunu belirtir" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Sıralama biçemini görüntüle" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Başlık Ara" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Uygulama renk şeması" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "TMDB sonuçları için kullanılan dil" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "TMDB yeni verilerini denetleme sıklığı" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Son kendiliğinden güncelleme tarihi" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Son kendiliğinden güncelleme tarihi" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Çıkışta önbelleği temizle" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Gözde programlarınızı takip edin" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Bilet Gişesi, film ve TV Şovları izleme listesi oluşturmanızı, izlenen " "başlıkları takip etmenizi ve en son yayınlar hakkında bilgi bulmanızı sağlar." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Bilet Gişesi içerik izlemenizi ya da indirmenizi sağlamaz. Bu uygulama TMDB " "API'sini kullanır ancak TMDB tarafından onaylanmamış veya " "sertifikalandırılmamıştır." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "İ_ptal" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Ağ Yok" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Kurulumu tamamlamak için İnternete bağlan." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "Tamam" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Önbelleği temizle" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Başlık" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Tüm filmleri sil" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Tüm TV Dizilerini Sil" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Bilet gişesi {total_space:.2f} MB kullanıyor. Biraz yer açmak için aşağıdaki " "seçenekleri kullanın." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "{space:.2f} MB dolu" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Arka Plan Etkinlikleri Çalışıyor" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Kimi etkinlikler arka planda çalışır ve çıkmadan önce tamamlanması " "gerekiyor. Ne zaman bittiklerini denetlemek için başlık çubuğundaki " "göstergeye bakın." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Filmi Düzenle" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "TV Dizilerini Düzenle" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "{num}. Sezon" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "{title} Ekle" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "{title} Güncelle" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Sezon" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "İzlendi" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "İzlendi Olarak İmle" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Yayın Süresi (dakika)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Sezon" msgstr[1] "{num} Sezon" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} Sezon" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Bölüm" msgstr[1] "{num} Bölüm" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Durum" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Özgün Dil" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Özgün Başlık" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Bütçe" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Gelir" #: src/pages/details_page.py:531 msgid "In Production" msgstr "Yapım Aşamasında" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Evet" #: src/pages/details_page.py:535 msgid "No" msgstr "Hayır" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}sa {m}dk" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}dk" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "{title} Güncelleniyor" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "{title} Güncelle" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Üst Veriler Yükleniyor…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "{title} Silinsin Mi?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Bu başlık izleme listenizden silinecek." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "İ_ptal" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Sil" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "{title} Sil" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "Sabri Ünal " #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Film" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Diziler" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "İptal" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Kaydet" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Genel" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Başlık (gerekli)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Yayınlanma Tarihi" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Türler (virgülle ayrılmış)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Yayın Süresi (dakika)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Etiket Satırı" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Oluşturan" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Genel Görünüm" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Sezon (gerekli)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Sezon eklemek için + düğmesini kullanın" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Ekle" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Ek Bilgi" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Budget (ABD Doları)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Gelir (ABD Doları)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "Yapım aşamasında" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Film Veritabanında Ara…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Başlık Ara" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "Eşleşen film ve dizilerin listesini görmek için arama çubuğuna yazın" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Sonuç Bulunamadı" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Başka arama deneyin" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Sezonu Düzenle" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Bölümler (gerekli)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Bölüm eklemek için + düğmesini kullanın" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Önbelleklenmiş Arama Verilerini Temizle" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "İptal" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Verileri Temizle" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Verileri Temizle" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Filmler" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Diziler" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Genel" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Kısayolları Göster" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Tercihleri Göster" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "İzleme Listeniz" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Çık" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Kitaplık yönetimi" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "TMDB'den başlık ekle" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Başlığı elle ekle" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Kütüphaneyi yenile" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Ana Menü" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} Bölüm" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Meta Verileri Güncelle" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Düzenle" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Sil" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Açıklama" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Sezon" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Tercihler" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Klavye Kısayolları" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "Bilet Gişesi _Hakkında" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Bölümü Düzenle" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Bölüm Numarası (gerekli)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Tercihler" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "İsteğe Bağlı İndirme" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Tam deneyim için 15 KB'lık bir indirme gerekli. İlk kurulum verileri " "kendiliğinden alamadı ve bu nedenle çevrim dışı kip etkinleştirildi. Bu kip, " "kurulum tamamlanana kadar etkin olacak." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Kurulumu Tamamla" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Çevrim Dışı Kip" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Bilet Gişesi tamamen çevrim dışı çalışabilir. Bu kipte çalıştırmayı " "seçerseniz, İnternet ve/veya üçüncü taraf API'lerine erişim gerektiren " "özellikler kullanılamaz." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Çevrim Dışı Kipi Etkinleştir" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "Film Veritabanı (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB çoğu içerik için yerelleştirilmiş üst veri sağlar. Bilet Gişesi bu " "verileri tercih ettiğiniz dilde indirir. Olmaması durumunda, ABD İngilizcesi " "kullanılır, o da olmazsa içeriğin özgün diline geri dönülür. Her ikisi de " "yoksa boş dize döner. Lütfen TMDB'ye katkıda bulunmayı ihmal etmeyin. Ek olarak, " "seçtiğiniz sıklıkta kendiliğinden güncellenir." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "TMDB Sonuç Dili" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Güncelleme Sıklığı" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Değiştirdikten sonra Bilet Gişesini yeniden başlat" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Asla" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Günlük" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Haftalık" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Aylık" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Kaydet" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Temizlik" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Çıkışta Önbelleği Temizle" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Önbelleklenmiş Arama Verilerini Temizle" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Verileri Temizle" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "İzleme Listeniz Boş" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "+ düğmesi ile içerik ekleyin." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "İzleme Listeniz" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "İzlendi" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Zaten izleme listenizde" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Çevrim Dışı Kipi Kullan" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Sonraki çalıştırmada tekrar dene" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Etkin sekme" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Kitaplığınıza başlık ekleyin" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "İzleme Listeniz" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Çevrim Dışı Kip Etkin" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Sıralama" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "A-Z" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Z-A" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Eklenme tarihi (yeniden > eskiye)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Eklenme tarihi (eskiden > yeniye)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Yayın tarihi (yeniden > eskiye)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Yayın tarihi (eskiden > yeniye)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "İzlendi" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Yenile" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "Film Veritabanından (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Elle" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Arka Plan Etkinlikleri" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Arka Plan Etkinliği Yok" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Posteri düzenle" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Posteri sil" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "İzleme listesine ekle" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Sistem biçemini izle" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Açık biçem" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Koyu biçem" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "Ağ Bekleniyor…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Tam bir deneyim için 15 KB'lık bir indirme gerekli. Ancak, internete bağlı " "değilseniz ya da beklemek istemiyorsanız, bu adımı atlayabilir ve bazı " "özellikler olmadan çevrim dışı olarak devam edebilirsiniz." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Her şey hazırlanıyor…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Veriler indiriliyor" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Filmler" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Kendiliğinden Güncelle" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Kendiliğinden Güncelle" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "{title} Sil" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "{title} Silinsin Mi?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Bu bölümdeki tüm değişiklikler kaybolacak." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Sil" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Zaten izleme listenizde" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Bu sezon kaydedilmemiş üst veriler içerir." #, fuzzy #~ msgid "movie" #~ msgstr "Film" #, fuzzy #~ msgid "movies" #~ msgstr "Filmler" #, fuzzy #~ msgid "series" #~ msgstr "Diziler" ticketbooth-1.1.1/po/uk.po000066400000000000000000001111471475632104500154420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the ticketbooth package. # DartDeaDia , 2023. # Сергій , 2024. msgid "" msgstr "" "Project-Id-Version: ticketbooth\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-14 19:37+0100\n" "PO-Revision-Date: 2024-01-07 19:06+0000\n" "Last-Translator: Сергій \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 5.4-dev\n" #. TRANSLATORS: do not translate #: data/me.iepure.Ticketbooth.desktop.in:8 msgid "@app_name@" msgstr "@app_name@" #: data/me.iepure.Ticketbooth.gschema.xml.in:15 msgid "Window width" msgstr "Ширина вікна" #: data/me.iepure.Ticketbooth.gschema.xml.in:19 msgid "Window height" msgstr "Висота вікна" #: data/me.iepure.Ticketbooth.gschema.xml.in:23 msgid "Window maximized" msgstr "Вікно розгорнуто" #: data/me.iepure.Ticketbooth.gschema.xml.in:31 msgid "Active tab" msgstr "Активна вкладка" #: data/me.iepure.Ticketbooth.gschema.xml.in:35 msgid "Specifies if the app is run for the first time" msgstr "Вказує, чи запускається програма вперше" #: data/me.iepure.Ticketbooth.gschema.xml.in:39 #, fuzzy msgid "Specifies if the database needs an update" msgstr "Вказує, чи завантажив застосунок необхідні дані" #: data/me.iepure.Ticketbooth.gschema.xml.in:43 msgid "Specifies if the app downloaded the required data" msgstr "Вказує, чи завантажив застосунок необхідні дані" #: data/me.iepure.Ticketbooth.gschema.xml.in:57 msgid "View sorting style" msgstr "Переглянути стиль упорядкування" #: data/me.iepure.Ticketbooth.gschema.xml.in:61 msgid "Separate watched content from unwatched" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:65 msgid "Hide watched content" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:69 msgid "Search bar visibility" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:77 #, fuzzy msgid "Search mode" msgstr "Пошук стрiчки" #: data/me.iepure.Ticketbooth.gschema.xml.in:81 msgid "Search query" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:93 msgid "App color scheme" msgstr "Колірна схема додатку" #: data/me.iepure.Ticketbooth.gschema.xml.in:97 msgid "Language used by TMDB results" msgstr "Мова, що використовується в результатах TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:110 msgid "Frequency to check for new data on TMDB" msgstr "Частота перевірки нових даних у TMDB" #: data/me.iepure.Ticketbooth.gschema.xml.in:114 msgid "Last autoupdate date" msgstr "Дата останнього автооновлення" #: data/me.iepure.Ticketbooth.gschema.xml.in:118 #, fuzzy msgid "Last notification autoupdate date" msgstr "Дата останнього автооновлення" #: data/me.iepure.Ticketbooth.gschema.xml.in:122 msgid "Clear cache on exit" msgstr "Очищення кешу при виході" #: data/me.iepure.Ticketbooth.gschema.xml.in:126 msgid "Use the user's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.gschema.xml.in:130 msgid "User's TMDB key" msgstr "" #: data/me.iepure.Ticketbooth.metainfo.xml.in:15 src/ui/about_dialog.blp:10 msgid "Keep track of your favorite shows" msgstr "Відстежуйте ваші улюблені шоу" #: data/me.iepure.Ticketbooth.metainfo.xml.in:21 msgid "" "Ticket Booth allows you to build your watchlist of movies and TV Shows, keep " "track of watched titles, and find information about the latest releases." msgstr "" "Ticket Booth дозволяє створювати список фільмів і серіалів для перегляду, " "відстежувати переглянуті стрічки та знаходити інформацію про найновіші " "випуски." #: data/me.iepure.Ticketbooth.metainfo.xml.in:23 msgid "" "Ticket Booth does not allow you to watch or download content. This app uses " "the TMDB API but is not endorsed or certified by TMDB." msgstr "" "Ticket Booth не дозволяє переглядати або завантажувати контент. Цей додаток " "використовує API TMDB, але не схвалений і не сертифікований TMDB." #: src/main.py:193 msgid "Confirm Export?" msgstr "" #: src/main.py:194 msgid "" "Exporting your library will create an archive containing all your data. You " "can import this archive later to restore your library." msgstr "" #: src/main.py:196 src/main.py:310 src/widgets/episode_row.py:272 #: src/widgets/season_expander.py:146 #, fuzzy msgctxt "alert dialog action" msgid "_Cancel" msgstr "_Скасувати" #: src/main.py:197 msgctxt "alert dialog action" msgid "_Export" msgstr "" #: src/main.py:230 msgctxt "Background activity title" msgid "Exporting library" msgstr "" #: src/main.py:307 msgid "Confirm Import?" msgstr "" #: src/main.py:308 msgid "" "Importing a library will merge it with the current library. This action " "cannot be undone and in case of conflicts, the new data will be kept." msgstr "" #: src/main.py:311 msgctxt "alert dialog action" msgid "_Import" msgstr "" #: src/main.py:344 msgctxt "Background activity title" msgid "Importing library" msgstr "" #: src/preferences.py:253 msgctxt "message dialog heading" msgid "No Network" msgstr "Немає мережі" #: src/preferences.py:254 msgctxt "message dialog body" msgid "Connect to the Internet to complete the setup." msgstr "Підключіться до Інтернету, щоб завершити налаштування." #: src/preferences.py:256 src/window.py:235 #, fuzzy msgctxt "alert dialog action" msgid "_OK" msgstr "ОК" #: src/preferences.py:321 msgctxt "Background activity title" msgid "Clear cache" msgstr "Очистити кеш" #. TRANSLATORS: {number} is the number of titles #: src/preferences.py:373 src/preferences.py:375 #, python-brace-format msgid "{number} Titles" msgstr "{number} Стрiчок" #: src/preferences.py:412 msgctxt "Background activity title" msgid "Delete all movies" msgstr "Видалити всі фільми" #: src/preferences.py:423 msgctxt "Background activity title" msgid "Delete all TV Series" msgstr "Видалити всі серіали" #. TRANSLATORS: {total_space:.2f} is the total occupied space #: src/preferences.py:498 #, python-brace-format msgid "" "Ticket Booth is currently using {total_space:.2f} MB. Use the options below " "to free some space." msgstr "" "Ticket Booth зараз використовує {total_space:.2f} МБ. Скористайтеся " "наведеними нижче опціями, щоб звільнити місце." #: src/preferences.py:502 src/preferences.py:504 #, python-brace-format msgid "{space:.2f} MB occupied" msgstr "Зайнято {space:.2f} МБ" #: src/window.py:232 msgctxt "message dialog heading" msgid "Background Activies Running" msgstr "Запуск фонових дій" #: src/window.py:233 msgctxt "message dialog body" msgid "" "Some activities are running in the background and need to be completed " "before exiting. Look for the indicator in the header bar to check when they " "are finished." msgstr "" "Деякі дії виконуються у фоновому режимі і мають бути завершені перед " "виходом. Щоб перевірити, коли дія завершиться, подивіться на індикатор у " "рядку заголовка." #: src/dialogs/add_manual_dialog.py:89 msgid "Edit Movie" msgstr "Редагувати фільм" #: src/dialogs/add_manual_dialog.py:92 msgid "Edit TV Series" msgstr "Редагувати серіал" #: src/dialogs/add_manual_dialog.py:294 #, python-brace-format msgid "Season {num}" msgstr "Сезон {num}" #: src/dialogs/add_manual_dialog.py:334 src/widgets/search_result_row.py:165 #, python-brace-format msgctxt "Background activity title" msgid "Add {title}" msgstr "Додати {title}" #: src/dialogs/add_manual_dialog.py:340 #, python-brace-format msgctxt "Background activity title" msgid "Update {title}" msgstr "Оновити {title}" #: src/dialogs/edit_season_dialog.py:44 src/widgets/season_expander.py:43 msgid "Season" msgstr "Сезон" #. type: ignore #: src/pages/details_page.py:213 src/pages/details_page.py:313 #: src/pages/details_page.py:375 src/pages/details_page.py:444 #: src/pages/details_page.py:590 src/ui/views/content_view.blp:163 #: src/ui/widgets/poster_button.blp:141 src/widgets/episode_row.py:129 #: src/widgets/episode_row.py:160 src/widgets/episode_row.py:330 msgid "Watched" msgstr "Переглянуте" #: src/pages/details_page.py:216 src/pages/details_page.py:316 #: src/pages/details_page.py:378 src/pages/details_page.py:447 #: src/pages/details_page.py:593 src/widgets/episode_row.py:132 #: src/widgets/episode_row.py:163 src/widgets/episode_row.py:333 msgid "Mark as Watched" msgstr "Позначити як переглянуте" #: src/pages/details_page.py:223 #, fuzzy msgid "Runtime of Movie" msgstr "Тривалість (хвилини)" #. TRANSLATORS: {num} is the total number of seasons #: src/pages/details_page.py:236 #, python-brace-format msgid "{num} Season" msgid_plural "{num} Seasons" msgstr[0] "{num} Сезон" msgstr[1] "{num} Сезонiв" msgstr[2] "{num} Сезонiв" #: src/pages/details_page.py:240 #, fuzzy msgid "Number of Seasons" msgstr "{num} Сезон" #. TRANSLATORS: {num} is the total number of episodes #: src/pages/details_page.py:245 src/pages/details_page.py:293 #, python-brace-format msgid "{num} Episode" msgid_plural "{num} Episodes" msgstr[0] "{num} Серія" msgstr[1] "{num} Серій" msgstr[2] "{num} Серій" #: src/pages/details_page.py:480 src/ui/dialogs/add_manual.blp:171 msgid "Status" msgstr "Статус" #: src/pages/details_page.py:488 src/ui/dialogs/add_manual.blp:175 msgid "Original Language" msgstr "Мова оригіналу" #: src/pages/details_page.py:498 src/ui/dialogs/add_manual.blp:181 msgid "Original Title" msgstr "Оригінальна назва" #: src/pages/details_page.py:511 msgid "Budget" msgstr "Кошторис" #: src/pages/details_page.py:521 msgid "Revenue" msgstr "Касові збори" #: src/pages/details_page.py:531 msgid "In Production" msgstr "У виробництві" #: src/pages/details_page.py:534 msgid "Yes" msgstr "Так" #: src/pages/details_page.py:535 msgid "No" msgstr "Ні" #: src/pages/details_page.py:540 msgid "TMDB ID" msgstr "" #. TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively #: src/pages/details_page.py:566 src/widgets/episode_row.py:185 #, python-brace-format msgid "{h}h {m}min" msgstr "{h}год {m}хв" #. TRANSLATORS: {m} is the runtime minutes #: src/pages/details_page.py:569 src/widgets/episode_row.py:189 #, python-brace-format msgid "{m}min" msgstr "{m}хв" #. TRANSLATORS: {title} is the showed content's title #: src/pages/details_page.py:652 #, python-brace-format msgid "Updating {title}" msgstr "Оновлення {title}" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:659 #, python-brace-format msgid "Update {title}" msgstr "Оновити {title}" #: src/pages/details_page.py:721 msgid "Loading Metadata…" msgstr "Завантаження метаданих…" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:741 #, python-brace-format msgctxt "message dialog heading" msgid "Delete {title}?" msgstr "Видалити {title}?" #. type: ignore #: src/pages/details_page.py:743 msgctxt "message dialog body" msgid "This title will be deleted from your watchlist." msgstr "Ця стрiчка буде видалена з вашого списку спостереження." #: src/pages/details_page.py:744 msgctxt "message dialog action" msgid "_Cancel" msgstr "_Скасувати" #: src/pages/details_page.py:745 msgctxt "message dialog action" msgid "_Delete" msgstr "_Видалити" #. TRANSLATORS: {title} is the content's title #: src/pages/details_page.py:777 #, python-brace-format msgid "Delete {title}" msgstr "Видалити {title}" #: src/ui/about_dialog.blp:9 msgid "" "Copyright © 2023 - 2025 Alessandro Iepure\n" "Some icons are copyright of the GNOME Project" msgstr "" #. TRANSLATORS: replace with your name (with optional email or website) #: src/ui/about_dialog.blp:16 msgid "translator-credits" msgstr "DartDeaDia" #: src/ui/dialogs/add_manual.blp:38 src/widgets/search_result_row.py:80 msgctxt "Category" msgid "Movie" msgstr "Кіно" #: src/ui/dialogs/add_manual.blp:43 src/views/main_view.py:63 #: src/widgets/search_result_row.py:82 msgctxt "Category" msgid "TV Series" msgstr "Серіали" #: src/ui/dialogs/add_manual.blp:51 src/ui/dialogs/edit_season.blp:24 msgid "Cancel" msgstr "Скасувати" #: src/ui/dialogs/add_manual.blp:57 src/ui/dialogs/edit_season.blp:30 #: src/ui/pages/edit_episode_page.blp:19 msgid "Save" msgstr "Зберегти" #: src/ui/dialogs/add_manual.blp:81 src/ui/dialogs/edit_season.blp:52 #: src/ui/pages/edit_episode_page.blp:41 msgid "General" msgstr "Загальне" #: src/ui/dialogs/add_manual.blp:84 src/ui/dialogs/edit_season.blp:55 #: src/ui/pages/edit_episode_page.blp:55 msgid "Title (required)" msgstr "Назва (обов'язково)" #: src/ui/dialogs/add_manual.blp:89 msgid "Release Date" msgstr "Дата випуску" #: src/ui/dialogs/add_manual.blp:108 msgid "Genres (comma separated)" msgstr "Жанри (через кому)" #: src/ui/dialogs/add_manual.blp:113 src/ui/pages/edit_episode_page.blp:60 msgid "Runtime (minutes)" msgstr "Тривалість (хвилини)" #: src/ui/dialogs/add_manual.blp:123 msgid "Tagline" msgstr "Слоган" #: src/ui/dialogs/add_manual.blp:128 src/ui/pages/details_page.blp:291 msgid "Created by" msgstr "Автор" #: src/ui/dialogs/add_manual.blp:133 src/ui/pages/edit_episode_page.blp:71 msgid "Overview" msgstr "Загальна інформація" #: src/ui/dialogs/add_manual.blp:152 msgid "Seasons (required)" msgstr "Сезони (обов'язково)" #: src/ui/dialogs/add_manual.blp:153 msgid "Use the + button to add seasons" msgstr "Використовуйте кнопку \"+\", щоб додати сезони" #: src/ui/dialogs/add_manual.blp:158 src/ui/dialogs/edit_season.blp:67 msgid "Add" msgstr "Додати" #: src/ui/dialogs/add_manual.blp:168 src/ui/pages/details_page.blp:350 msgid "Additional Information" msgstr "Додаткова інформація" #: src/ui/dialogs/add_manual.blp:186 msgid "Budget (US$)" msgstr "Кошторис (US$)" #: src/ui/dialogs/add_manual.blp:197 msgid "Revenue (US$)" msgstr "Касові збори (US$)" #: src/ui/dialogs/add_manual.blp:207 msgid "In production" msgstr "У виробництві" #: src/ui/dialogs/add_tmdb.blp:27 msgid "Search The Movie Database…" msgstr "Пошук у базі даних фільмів…" #: src/ui/dialogs/add_tmdb.blp:37 msgid "Search For a Title" msgstr "Пошук стрiчки" #: src/ui/dialogs/add_tmdb.blp:39 msgid "" "Start typing in the search bar to see a list of matching movies and TV series" msgstr "" "Почніть вводити текст у рядку пошуку, щоб побачити список відповідних " "фільмів і серіалів" #: src/ui/dialogs/add_tmdb.blp:46 msgid "No Results Found" msgstr "Нічого не знайдено" #: src/ui/dialogs/add_tmdb.blp:48 msgid "Try a different search" msgstr "Спробуйте інший варіант пошуку" #: src/ui/dialogs/edit_season.blp:14 msgid "Edit Season" msgstr "Редагувати сезон" #: src/ui/dialogs/edit_season.blp:61 msgid "Episodes (required)" msgstr "Серії (обов'язково)" #: src/ui/dialogs/edit_season.blp:62 msgid "Use the + button to add episodes" msgstr "Використовуйте кнопку \"+\", щоб додати серії" #: src/ui/dialogs/message_dialogs.blp:9 #, fuzzy msgctxt "message dialog heading" msgid "Clear Cached Data?" msgstr "Очистити кешовані дані пошуку" #: src/ui/dialogs/message_dialogs.blp:10 msgctxt "message dialog body" msgid "" "This operation will clear all stored cache data. It might get downloaded " "again next time you add content from TMDB." msgstr "" #: src/ui/dialogs/message_dialogs.blp:13 src/ui/dialogs/message_dialogs.blp:40 #, fuzzy msgctxt "message dialog action" msgid "Cancel" msgstr "Скасувати" #: src/ui/dialogs/message_dialogs.blp:14 src/ui/dialogs/message_dialogs.blp:41 #, fuzzy msgctxt "message dialog action" msgid "Clear" msgstr "Очистити дані" #: src/ui/dialogs/message_dialogs.blp:19 #, fuzzy msgctxt "message dialog heading" msgid "Clear Stored Data?" msgstr "Очистити дані" #: src/ui/dialogs/message_dialogs.blp:20 msgctxt "message dialog body" msgid "" "This operation will permanentlly delete the selected data, loosing all your " "changes." msgstr "" #: src/ui/dialogs/message_dialogs.blp:26 #, fuzzy msgid "Movies" msgstr "Фільми" #: src/ui/dialogs/message_dialogs.blp:34 #, fuzzy msgid "TV Series" msgstr "Серіали" #: src/ui/gtk/help-overlay.blp:15 msgctxt "shortcut window" msgid "General" msgstr "Загальне" #: src/ui/gtk/help-overlay.blp:18 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Показати клавіатурні скорочення" #: src/ui/gtk/help-overlay.blp:23 msgctxt "shortcut window" msgid "Show Preferences" msgstr "Показати налаштування" #: src/ui/gtk/help-overlay.blp:28 #, fuzzy msgctxt "shortcut window" msgid "Search your Watchlist" msgstr "Ваш список спостереження" #: src/ui/gtk/help-overlay.blp:33 msgctxt "shortcut window" msgid "Quit" msgstr "Вийти" #: src/ui/gtk/help-overlay.blp:39 msgctxt "shortcut window" msgid "Library management" msgstr "Керування бібліотекою" #: src/ui/gtk/help-overlay.blp:42 msgctxt "shortcut window" msgid "Add title from TMDB" msgstr "Додати назву з бази даних TMDB" #: src/ui/gtk/help-overlay.blp:47 msgctxt "shortcut window" msgid "Add title manually" msgstr "Додати стрічку вручну" #: src/ui/gtk/help-overlay.blp:51 msgctxt "shortcut window" msgid "Refresh library" msgstr "Оновити бібліотеку" #: src/ui/pages/details_page.blp:30 src/ui/views/main_view.blp:83 msgid "Main Menu" msgstr "Головне меню" #: src/ui/pages/details_page.blp:146 #, fuzzy msgid "Number of Episodes" msgstr "{num} Серія" #: src/ui/pages/details_page.blp:156 msgid "Air Date of Next Episode" msgstr "" #: src/ui/pages/details_page.blp:174 src/ui/pages/details_page.blp:175 msgid "Notify me on new releases" msgstr "" #: src/ui/pages/details_page.blp:208 msgid "Update Metadata" msgstr "Оновити метадані" #: src/ui/pages/details_page.blp:221 src/ui/widgets/episode_row.blp:87 #: src/ui/widgets/season_expander.blp:42 msgid "Edit" msgstr "Редагувати" #: src/ui/pages/details_page.blp:234 msgid "Delete" msgstr "Видалити" #: src/ui/pages/details_page.blp:263 msgid "Description" msgstr "Опис" #: src/ui/pages/details_page.blp:319 msgid "Seasons" msgstr "Сезони" #: src/ui/pages/details_page.blp:378 msgid "Notes" msgstr "" #: src/ui/pages/details_page.blp:502 src/ui/views/main_view.blp:225 msgid "_Preferences" msgstr "_Налаштування" #: src/ui/pages/details_page.blp:507 src/ui/views/main_view.blp:230 msgid "_Keyboard Shortcuts" msgstr "_Клавіатурні скорочення" #: src/ui/pages/details_page.blp:512 src/ui/views/main_view.blp:235 msgid "_About Ticket Booth" msgstr "_Про Ticket Booth" #: src/ui/pages/edit_episode_page.blp:9 msgid "Edit Episode" msgstr "Редагувати серію" #: src/ui/pages/edit_episode_page.blp:45 msgid "Episode Number (required)" msgstr "Номер серії (обов'язково)" #: src/ui/preferences.blp:15 src/ui/views/main_view.blp:122 msgid "Preferences" msgstr "Налаштування" #: src/ui/preferences.blp:18 msgctxt "preferences" msgid "Optional Download" msgstr "Необов'язкове завантаження" #: src/ui/preferences.blp:19 #, fuzzy msgctxt "preferences" msgid "" "For a complete experience, a download of 15 KB is required. The initial " "setup could not retrieve the data automatically and thus offline mode has " "been activated. It will remain active until the setup is completed." msgstr "" "Для повноцінної роботи необхідно завантажити 15 КБ. Під час початкового " "налаштування не вдалося отримати дані автоматично, тому було ввімкнено " "автономний режим. Він залишатиметься активним до завершення налаштування." #. TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. #: src/ui/preferences.blp:23 msgctxt "preferences" msgid "Complete Setup" msgstr "Завершити налаштування" #: src/ui/preferences.blp:34 msgctxt "preferences" msgid "Offline Mode" msgstr "Автономний режим" #: src/ui/preferences.blp:35 msgctxt "preferences" msgid "" "Ticket Booth can work entirely offline. If you choose to run in this mode, " "some features that require the Internet and/or access to third party APIs " "will not be available." msgstr "" "Ticket Booth може працювати повністю у автономному режимi. Якщо ви вирішите " "працювати в цьому режимі, деякі функції, які потребують Інтернету та/або " "доступу до сторонніх API, будуть недоступні." #: src/ui/preferences.blp:38 msgctxt "preferences" msgid "Enable Offline Mode" msgstr "Увімкнути автономний режим" #: src/ui/preferences.blp:43 msgctxt "preferences" msgid "The Movie Database (TMDB)" msgstr "База даних фільмів (TMDB)" #: src/ui/preferences.blp:44 msgctxt "preferences" msgid "" "TMDB provides localized metadata for most content. Ticket Booth will " "download it in your prefered language, selectable below. In case it is not " "available, it will fallback to English US and then to the content's original " "language. If neither are available, it will result in a blank string. Please " "consider contributing " "to TMDB. Additionally, an automatic update is performed on a frequency " "of your choosing." msgstr "" "TMDB надає локалізовані метадані для більшості матеріалів. Ticket Booth " "завантажить їх мовою, якій ви надаєте перевагу, яку можна вибрати нижче. " "Якщо вона недоступна, буде використано англійську (США), а потім мову " "оригіналу. Якщо жоден із них недоступний, це призведе до порожнього рядка. " "Будь ласка, розгляньте можливість зробити свій внесок до TMDB. Крім того, автоматичне " "оновлення виконується з частотою, яку ви виберете." #: src/ui/preferences.blp:47 msgctxt "preferences" msgid "TMDB Results Language" msgstr "Мова результатів TMDB" #: src/ui/preferences.blp:52 msgctxt "preferences" msgid "Update Frequency" msgstr "Частота оновлення" #: src/ui/preferences.blp:53 msgctxt "preferences" msgid "Restart Ticket Booth after changing" msgstr "Після внесення змін перезапустіть Ticket Booth" #: src/ui/preferences.blp:56 msgctxt "preferences" msgid "Never" msgstr "Ніколи" #: src/ui/preferences.blp:57 msgctxt "preferences" msgid "Daily" msgstr "Щодня" #: src/ui/preferences.blp:58 msgctxt "preferences" msgid "Weekly" msgstr "Щотижня" #: src/ui/preferences.blp:59 msgctxt "preferences" msgid "Monthly" msgstr "Щомісяця" #: src/ui/preferences.blp:65 msgctxt "preferences" msgid "Use Your API Key" msgstr "" #: src/ui/preferences.blp:66 msgctxt "preferences" msgid "" "Register yours here" msgstr "" #: src/ui/preferences.blp:70 msgctxt "preferences" msgid "Your API key" msgstr "" #: src/ui/preferences.blp:75 #, fuzzy msgctxt "preferences" msgid "Save Key" msgstr "Зберегти" #: src/ui/preferences.blp:86 msgctxt "preferences" msgid "Housekeeping" msgstr "Прибирання" #: src/ui/preferences.blp:90 msgctxt "preferences" msgid "Clear Cache on Exit" msgstr "Очищати кеш при виході" #: src/ui/preferences.blp:94 msgctxt "preferences" msgid "Clear Cached Search Data" msgstr "Очистити кешовані дані пошуку" #: src/ui/preferences.blp:104 msgctxt "preferences" msgid "Clear Data" msgstr "Очистити дані" #: src/ui/views/content_view.blp:14 msgid "Your Watchlist Is Empty" msgstr "Ваш список спостереження порожній" #: src/ui/views/content_view.blp:15 #, fuzzy msgid "Add content with the + button or import from an older watchlist." msgstr "Додайте контент за допомогою кнопки \"+\"." #: src/ui/views/content_view.blp:111 src/views/content_view.py:324 msgid "Your Watchlist" msgstr "Ваш список спостереження" #: src/ui/views/content_view.blp:140 #, fuzzy msgid "Unwatched" msgstr "Переглянуте" #: src/ui/views/db_update_view.blp:29 #, fuzzy msgid "Updating your watchlist" msgstr "Вже у вашому списку спостереження" #: src/ui/views/db_update_view.blp:30 msgid "" "After updating Ticket Booth we need to update the local database entries" msgstr "" #: src/ui/views/db_update_view.blp:49 src/ui/views/first_run_view.blp:55 msgid "Use Offline Mode" msgstr "Скористатися автономним режимом" #: src/ui/views/db_update_view.blp:55 src/ui/views/first_run_view.blp:61 msgid "Try again on next run" msgstr "Спробуйте ще раз під час наступного запуску" #: src/ui/views/db_update_view.blp:66 msgid "Activate Notifications?" msgstr "" #: src/ui/views/db_update_view.blp:67 msgid "" "Would you like to activate notifications for all series that are still in " "production and for all movies that have not yet released?" msgstr "" #: src/ui/views/db_update_view.blp:76 #, fuzzy msgid "Activate" msgstr "Активна вкладка" #: src/ui/views/db_update_view.blp:85 msgid "Deactivate" msgstr "" #: src/ui/views/main_view.blp:68 msgid "Add a title to your library" msgstr "Додайте стрічку до своєї бібліотеки" #: src/ui/views/main_view.blp:75 msgid "Show/Hide search bar" msgstr "" #: src/ui/views/main_view.blp:110 #, fuzzy msgid "Search Your Watchlist" msgstr "Ваш список спостереження" #: src/ui/views/main_view.blp:121 msgid "Offline Mode Enabled" msgstr "Ввімкнено автономний режим" #: src/ui/views/main_view.blp:152 msgid "_Sorting" msgstr "_Упорядкування" #: src/ui/views/main_view.blp:156 msgid "A-Z" msgstr "А-Я" #: src/ui/views/main_view.blp:162 msgid "Z-A" msgstr "Я-А" #: src/ui/views/main_view.blp:168 msgid "Date added (newest first)" msgstr "Дата додавання (найновіші спочатку)" #: src/ui/views/main_view.blp:174 msgid "Date added (oldest first)" msgstr "Дата додавання (найстаріші спочатку)" #: src/ui/views/main_view.blp:180 msgid "Release date (newest first)" msgstr "Дата випуску (найновіші спочатку)" #: src/ui/views/main_view.blp:186 msgid "Release date (oldest first)" msgstr "Дата випуску (найстаріші спочатку)" #: src/ui/views/main_view.blp:194 msgid "Separate watched from unwatched" msgstr "" #: src/ui/views/main_view.blp:199 #, fuzzy msgid "Hide watched" msgstr "Переглянуте" #: src/ui/views/main_view.blp:206 msgid "_Refresh" msgstr "_Оновити" #: src/ui/views/main_view.blp:213 msgid "_Import" msgstr "" #: src/ui/views/main_view.blp:218 msgid "_Export" msgstr "" #: src/ui/views/main_view.blp:243 msgid "From The Movie Database (TMDB)" msgstr "З бази даних фільмів (TMDB)" #: src/ui/views/main_view.blp:248 msgid "Manually" msgstr "Вручну" #: src/ui/widgets/background_indicator.blp:13 msgid "Background Activities" msgstr "Фонові дії" #: src/ui/widgets/background_indicator.blp:36 msgid "No Background Activities" msgstr "Немає фонових дій" #: src/ui/widgets/image_selector.blp:30 msgid "Edit poster" msgstr "Редагувати постер" #: src/ui/widgets/image_selector.blp:48 msgid "Delete poster" msgstr "Видалити постер" #: src/ui/widgets/poster_button.blp:47 msgid "The series has a new release" msgstr "" #: src/ui/widgets/poster_button.blp:67 msgid "The series has a new release soon" msgstr "" #: src/ui/widgets/poster_button.blp:85 msgid "This title is marked as watched" msgstr "" #: src/ui/widgets/search_result_row.blp:89 msgid "Add to watchlist" msgstr "Додати до списку спостереження" #: src/ui/widgets/theme_switcher.blp:29 msgid "Follow system style" msgstr "Використовувати стиль системи" #: src/ui/widgets/theme_switcher.blp:43 msgid "Light style" msgstr "Світлий стиль" #: src/ui/widgets/theme_switcher.blp:57 msgid "Dark style" msgstr "Темний стиль" #: src/views/content_view.py:323 msgid "Search results" msgstr "" #: src/views/first_run_view.py:101 msgid "Waiting for Network…" msgstr "В очікуванні мережі…" #: src/views/first_run_view.py:103 msgid "" "For a complete experience, a download of 15 KB is required. However, if you " "are not connected to the Internet or don't want to wait, you can skip this " "step and continue offline without some features." msgstr "" "Для повноцінної роботи потрібно завантажити 15 КБ. Однак, якщо ви не " "підключені до Інтернету або не хочете чекати, ви можете пропустити цей крок " "і продовжити роботу в автономному режимі без деяких функцій." #: src/views/first_run_view.py:107 msgid "Getting things ready…" msgstr "Готуємо все необхідне…" #: src/views/first_run_view.py:108 msgid "Downloading data" msgstr "Завантаження даних" #: src/views/main_view.py:57 msgctxt "Category" msgid "Movies" msgstr "Фільми" #: src/views/main_view.py:146 #, fuzzy msgctxt "Notification List activity title" msgid "Automatic update of notification list" msgstr "Автоматичне оновлення" #: src/views/main_view.py:162 src/views/main_view.py:172 #: src/views/main_view.py:182 msgctxt "Background activity title" msgid "Automatic update" msgstr "Автоматичне оновлення" #. TRANSLATOR: {title} is the title of the series #: src/views/main_view.py:326 #, fuzzy, python-brace-format msgid "New release for {title}" msgstr "Видалити {title}" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:329 #, python-brace-format msgid "A new episode of {title} was released {days} day ago." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:333 #, python-brace-format msgid "New release for {num} TV series on your watchlist" msgstr "" #. TRANSLATOR: {series} is a list of TV series seperated by a comma #. TRANSLATOR: {series} is a list of all series affected seperated by a comma #: src/views/main_view.py:337 src/views/main_view.py:355 #: src/views/main_view.py:372 #, python-brace-format msgid "The TV Series are {series}." msgstr "" #. TRANSLATOR: {title} is the title of the series with a new episode soon #: src/views/main_view.py:343 #, python-brace-format msgid "{title} will have a release soon" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:346 #, python-brace-format msgid "A new episode will release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:350 #, python-brace-format msgid "{num} TV Series on your watchlist will have a new episode soon" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:361 #, python-brace-format msgid "{title} has gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the series that has gone out of production #: src/views/main_view.py:364 #, python-brace-format msgid "" "{title} has wrapped up its run. Now is the perfect time to revisit your " "favorite moments or find the next binge!" msgstr "" #. TRANSLATOR: {num} is the number of TV Series #: src/views/main_view.py:367 #, python-brace-format msgid "{num} TV Series of your watchlist have gone out of production" msgstr "" #. TRANSLATOR: {title} is the title of the movie that has had its release #: src/views/main_view.py:378 #, python-brace-format msgid "{title} has had its release!" msgstr "" #. TRANSLATOR: {title} is the title of the series and {days} the number of days #: src/views/main_view.py:381 #, python-brace-format msgid "{title} was released {days} day ago." msgstr "" #: src/views/main_view.py:384 #, python-brace-format msgid "{num} movies on your watchlist have had their releases." msgstr "" #. TRANSLATOR: {movies} is a list of all movies affected seperated by a comma #. TRANSLATOR: {movies} will be list of all series affected seperated by a comma #: src/views/main_view.py:388 src/views/main_view.py:403 #, python-brace-format msgid "The movies are {movies}." msgstr "" #. TRANSLATOR: {title} is the title of the movie that will have its release soon #: src/views/main_view.py:393 #, python-brace-format msgid "{title} will have its release soon!" msgstr "" #. TRANSLATOR: {title} is the title of the movie and {days} the number of days #: src/views/main_view.py:396 #, python-brace-format msgid "{title} will have its release in {days} day." msgstr "" #. TRANSLATOR: {num} is the number of movies #: src/views/main_view.py:400 #, python-brace-format msgid "{num} movies on your watchlist will have their releases soon" msgstr "" #. TRANSLATOR: {num} is the number of affected items #: src/views/main_view.py:413 #, python-brace-format msgid "{num} items of your watchlist have an update" msgstr "" #. TRANSLATOR: {count_movies} is the number of movies #: src/views/main_view.py:418 src/views/main_view.py:427 #, python-brace-format msgid "These updates affect {count_movies} movie" msgstr "" #. TRANSLATOR: the connector between the two parts of the sentence (foo and bar) #: src/views/main_view.py:420 msgid " and " msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:422 #, python-brace-format msgid " {count_series} TV serie" msgstr "" #. TRANSLATOR: {count_series} is the number of series #: src/views/main_view.py:430 #, python-brace-format msgid "These updates affect {count_series} TV serie" msgstr "" #: src/widgets/episode_row.py:267 src/widgets/season_expander.py:141 #, fuzzy, python-brace-format msgctxt "alert dialog heading" msgid "Delete {title}?" msgstr "Видалити {title}?" #: src/widgets/episode_row.py:270 #, fuzzy msgctxt "alert dialog body" msgid "All changes to this episode will be lost." msgstr "Всі зміни до цієї серії будуть втрачені." #: src/widgets/episode_row.py:273 src/widgets/season_expander.py:147 #, fuzzy msgctxt "alert dialog action" msgid "_Delete" msgstr "_Видалити" #: src/widgets/search_result_row.py:100 src/widgets/search_result_row.py:192 msgid "Already in your watchlist" msgstr "Вже у вашому списку спостереження" #: src/widgets/season_expander.py:144 #, fuzzy msgctxt "alert dialog body" msgid "This season contains unsaved metadata." msgstr "Цей сезон містить незбережені метадані." #, fuzzy #~ msgid "movie" #~ msgstr "Кіно" #, fuzzy #~ msgid "movies" #~ msgstr "Фільми" #, fuzzy #~ msgid "series" #~ msgstr "Серіали" ticketbooth-1.1.1/pypi-dependencies.json000066400000000000000000000061311475632104500203410ustar00rootroot00000000000000{ "name": "pypi-dependencies", "buildsystem": "simple", "build-commands": [], "modules": [ { "name": "python3-tmdbsimple", "buildsystem": "simple", "build-commands": [ "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"tmdbsimple\" --no-build-isolation" ], "sources": [ { "type": "file", "url": "https://files.pythonhosted.org/packages/9b/81/62fd61001fa4b9d0df6e31d47ff49cfa9de4af03adecf339c7bc30656b37/urllib3-2.0.4-py3-none-any.whl", "sha256": "de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/2a/53/cf0a48de1bdcf6ff6e1c9a023f5f523dfe303e4024f216feac64b6eb7f67/charset-normalizer-3.2.0.tar.gz", "sha256": "3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", "sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", "sha256": "58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f" }, { "type": "file", "url": "https://files.pythonhosted.org/packages/6c/dd/ade05d202db728b23e54aa0959622d090776023917e7308c1b2469a07b76/tmdbsimple-2.9.1-py3-none-any.whl", "sha256": "b52387c667bad1dccf5f776a576a971622a111fc08b7f731e360fabcc9860616" } ] }, { "name": "python3-Pillow", "buildsystem": "simple", "build-commands": [ "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"Pillow\" --no-build-isolation" ], "sources": [ { "type": "file", "url": "https://files.pythonhosted.org/packages/0f/8b/2ebaf9adcf4260c00f842154865f8730cf745906aa5dd499141fb6063e26/Pillow-10.0.0.tar.gz", "sha256": "9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396" } ] } ] } ticketbooth-1.1.1/requirements.txt000066400000000000000000000000221475632104500173160ustar00rootroot00000000000000Pillow tmdbsimple ticketbooth-1.1.1/src/000077500000000000000000000000001475632104500146275ustar00rootroot00000000000000ticketbooth-1.1.1/src/__init__.py000066400000000000000000000000001475632104500167260ustar00rootroot00000000000000ticketbooth-1.1.1/src/background_queue.py000066400000000000000000000077441475632104500205400ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from enum import Enum from typing import Callable from gi.repository import Gio, GLib, GObject from . import shared # type: ignore class ActivityType(Enum): """ Enum for the types of background activities """ ADD = 0 REMOVE = 1 UPDATE = 2 class BackgroundActivity(GObject.GObject): """ An activity that is run in the background. Properties: title (str): a title activity_type (str): an activity type, name as in ActivityType callback (callable): a function to run in the background completed (bool): indicates if the activity is completed Methods: start(): runs self.callback in a separate thread end(): marks the activity as completed Signals: None """ __gtype_name__ = 'BackgroundActivity' title = GObject.Property(type=str, default='') activity_type = GObject.Property(type=str, default='') task_function = GObject.Property(type=object, default=None) completed = GObject.Property(type=bool, default=False) has_error = GObject.Property(type=bool, default=False) def __init__(self, activity_type: ActivityType, title: str = '', task_function: Callable | None = None): super().__init__() self.activity_type = activity_type.name self.title = title self.task_function = task_function self._cancellable = Gio.Cancellable() def start(self, on_done: Callable) -> None: """ Runs self.callback in a separate thread. The callback must call end() to mark the activity as completed. Args: None Returns: None """ task = Gio.Task.new(self, None, on_done, self._cancellable, self) task.set_return_on_cancel(True) task.run_in_thread(self._run_in_thread) def _run_in_thread(self, task: Gio.Task, source_object: GObject.Object, task_data: object | None, cancelable: Gio.Cancellable): """Callback to run self.task_function in a thread""" if task.return_error_if_cancelled(): return outcome = self.task_function(self) # type: ignore task.return_value(outcome) def activity_finish(self, result: Gio.AsyncResult, caller: GObject.Object): """ Completes the async operation and marks the activity as completed. Args: None Returns: None """ if not Gio.Task.is_valid(result, caller): return -1 # self.completed = True return result.propagate_value().value def end(self) -> None: """ Marks the activity as completed. Args: None Returns: None """ self.completed = True def error(self) -> None: """ Marks the activity with an error. Args: None Returns: None """ self.has_error = True class BackgroundQueue: """ A queue of background activities. Properties: None Methods: add(activity: BackgroundActivity): adds an activity to the queue get_queue(): returns the queue Signals: None """ _queue = Gio.ListStore.new(item_type=BackgroundActivity) @staticmethod def add(activity: BackgroundActivity, on_done: Callable) -> None: """ Adds an activity to the queue and starts its execution. Args: activity (BackgroundActivity): the activity to add Returns: None """ BackgroundQueue._queue.append(activity) activity.start(on_done) @staticmethod def get_queue() -> Gio.ListStore: """ Returns the queue Args: None Returns: the queue (a Gio.ListStore) """ return BackgroundQueue._queue ticketbooth-1.1.1/src/css/000077500000000000000000000000001475632104500154175ustar00rootroot00000000000000ticketbooth-1.1.1/src/css/style-dark.css000066400000000000000000000002361475632104500202110ustar00rootroot00000000000000/* * Copyright (C) 2023 Alessandro Iepure * * SPDX-License-Identifier: GPL-3.0-or-later */ /* Dark mode CSS */ .chip { background-color: @dark_3; } ticketbooth-1.1.1/src/css/style.css000066400000000000000000000047501475632104500172770ustar00rootroot00000000000000/* * Copyright (C) 2023 Alessandro Iepure * * SPDX-License-Identifier: GPL-3.0-or-later */ /* Light mode CSS - Main style */ .notes { border-radius: 12px; background-color: alpha(#dddddd, 0.2); } .chip { padding: 0 7px; line-height: 20px; border-radius: 25px; background-color: @light_3; } .poster { border-radius: 12px; } .light { color: @light_2; } .dark { color: @dark_3; } .still { border-radius: 6px; } .shadow { box-shadow: 0px 0px 4px 4px @accent_color; } .pulse { animation-name: breathing; animation-duration: 3s; animation-timing-function: ease-in-out; animation-iteration-count: infinite; animation-direction: normal; animation-delay: 0s; animation-fill-mode: none; animation-play-state: running; } @keyframes breathing { 0% { transform: scale(1); } 50% { transform: scale(0.95); } 100% { transform: scale(1); } } .groupcolor list { background-color: alpha(#dddddd, 0.2); } .progress_complete progress { background-color: @success_color; } .progress_error progress { background-color: @error_color; } /* Theme Switcher * Modified from https://gitlab.gnome.org/tijder/blueprintgtk * Original header below */ /* * Base on dialect-app * https://github.com/dialect-app/dialect/blob/c0b7ca0580d4c7cfb32ff7ed0a3a08c06bbe40e0/data/resources/style.css */ .themeswitcher { margin: 9px; } .themeswitcher checkbutton { min-height: 44px; min-width: 44px; padding: 1px; background-clip: content-box; border-radius: 9999px; box-shadow: inset 0 0 0 1px @borders; } .themeswitcher checkbutton.system:checked, .themeswitcher checkbutton.light:checked, .themeswitcher checkbutton.dark:checked { box-shadow: inset 0 0 0 2px @theme_selected_bg_color; } .themeswitcher checkbutton.system { background-image: linear-gradient(to bottom right, #fff 49.99%, #202020 50.01%); } .themeswitcher checkbutton.light { background-color: #fff; } .themeswitcher checkbutton.dark { background-color: #202020; } .themeswitcher checkbutton radio { -gtk-icon-source: none; border: none; background: none; box-shadow: none; min-width: 12px; min-height: 12px; transform: translate(27px, 14px); padding: 2px; } .themeswitcher checkbutton.theme-selector radio:checked { -gtk-icon-source: -gtk-icontheme("object-select-symbolic"); background-color: @theme_selected_bg_color; color: @theme_selected_fg_color; }ticketbooth-1.1.1/src/dialogs/000077500000000000000000000000001475632104500162515ustar00rootroot00000000000000ticketbooth-1.1.1/src/dialogs/__init__.py000066400000000000000000000001251475632104500203600ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later ticketbooth-1.1.1/src/dialogs/add_manual_dialog.py000066400000000000000000000601451475632104500222350ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging import os import shutil from datetime import date, datetime from gettext import gettext as _ from gettext import pgettext as C_ from typing import List, Tuple from urllib.parse import unquote from PIL import Image, ImageStat from pathlib import Path from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore from ..background_queue import (ActivityType, BackgroundActivity, BackgroundQueue) from ..dialogs.edit_season_dialog import EditSeasonDialog from ..models.episode_model import EpisodeModel from ..models.language_model import LanguageModel from ..models.movie_model import MovieModel from ..models.season_model import SeasonModel from ..models.series_model import SeriesModel from ..providers.local_provider import LocalProvider as local from ..widgets.season_expander import SeasonExpander @Gtk.Template(resource_path=shared.PREFIX + '/ui/dialogs/add_manual.ui') class AddManualDialog(Adw.Dialog): """ This class represents the dialog to manually add content to the db. Properties: edit_mode (bool): whether or not the window is in add/edit mode Methods: update_seasons_ui(): rebuilds the ui to reflect changes to seasons get_season(title: str, poster: str, episodes: list): returns the tuple with the provided data or an empty tuple Signals: edit-saved(SeriesModel or MovieModel): emited when the user clicks the save button """ __gtype_name__ = 'AddManualDialog' edit_mode = GObject.Property(type=bool, default=False) _movies_btn = Gtk.Template.Child() _series_btn = Gtk.Template.Child() _save_btn = Gtk.Template.Child() _poster = Gtk.Template.Child() _title_entry = Gtk.Template.Child() _release_date_menu_btn = Gtk.Template.Child() _calendar = Gtk.Template.Child() _genres_entry = Gtk.Template.Child() _runtime_spinrow = Gtk.Template.Child() _tagline_entry = Gtk.Template.Child() _creator_entry = Gtk.Template.Child() _overview_text = Gtk.Template.Child() _seasons_group = Gtk.Template.Child() _status_entry = Gtk.Template.Child() _original_language_comborow = Gtk.Template.Child() _language_model = Gtk.Template.Child() _original_title_entry = Gtk.Template.Child() _budget_spinrow = Gtk.Template.Child() _revenue_spinrow = Gtk.Template.Child() _production_checkbtn = Gtk.Template.Child() __gsignals__ = { 'edit-saved': (GObject.SIGNAL_RUN_FIRST, None, (object,)), } seasons: list = [] def __init__(self, edit_mode: bool = False, content: MovieModel | SeasonModel | None = None ): super().__init__() self.edit_mode = edit_mode self._content = content logging.info(f'Edit mode: {self.edit_mode}') if edit_mode and type(self._content) is MovieModel: self.set_title(_('Edit Movie')) logging.debug(f'Editing [Movie] {self._content.title}') elif edit_mode and type(self._content) is SeriesModel: self.set_title(_('Edit TV Series')) logging.debug(f'Editing [TV Series] {self._content.title}') @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for the "map" signal. Setup the window by selecting the initial view (movies or tv series), the image for the poster and populates the language dropdown and the selected date for the release. Args: user_data (object or None): user data passed to the callback. Returns: None """ self._overview_text.remove_css_class('view') languages = local.get_all_languages() # move 'no language' to 1st place languages.insert(0, languages.pop(len(languages)-6)) for language in languages: self._language_model.append(language.name) self._poster.set_blank_image( f'resource://{shared.PREFIX}/blank_poster.jpg') if not self._content: if shared.schema.get_string('win-tab') == 'movies': self._movies_btn.set_active(True) else: self._series_btn.set_active(True) self._release_date_menu_btn.set_label( self._calendar.get_date().format('%x')) return # Both Movies and TV Series self._poster.set_image(self._content.poster_path) self._title_entry.set_text(self._content.title) self._title_entry.grab_focus() self._release_date_menu_btn.set_label( date.fromisoformat(self._content.release_date).strftime('%x')) self._calendar.select_day(GLib.DateTime.new_from_iso8601( datetime.fromisoformat(self._content.release_date).isoformat()+'Z')) self._genres_entry.set_text(', '.join(self._content.genres)) self._tagline_entry.set_text(self._content.tagline) self._overview_text.get_buffer().set_text(self._content.overview, -1) self._status_entry.set_text(self._content.status) self._original_language_comborow.set_selected( self._get_selected_language_index(self._content.original_language)) self._original_title_entry.set_text(self._content.original_title) # Movies specific if type(self._content) is MovieModel: self._movies_btn.set_active(True) self._runtime_spinrow.set_value(self._content.runtime) self._budget_spinrow.set_value(self._content.budget) self._revenue_spinrow.set_value(self._content.revenue) # TV Series specific if type(self._content) is SeriesModel: self._series_btn.set_active(True) self._creator_entry.set_text(','.join(self._content.created_by)) self._production_checkbtn.set_active(self._content.in_production) self.seasons = self._parse_seasons(self._content.seasons) self.update_seasons_ui() def _parse_seasons(self, seasons_as_model: List[SeasonModel]) -> List[tuple]: """ Parse seasons passed as a list of SeasonModels into a list of tuples. Args: seasons_as_model(List[SeasonModel]): a list of SeasonModels Returns: a list of tuples representing the same data """ seasons_as_tuple = [] for season in seasons_as_model: episodes_as_tuple = [] for episode in season.episodes: episodes_as_tuple.append(( episode.title, episode.number, episode.runtime, episode.overview, episode.still_path, episode.watched, episode.id )) seasons_as_tuple.append(( season.title, season.poster_path, episodes_as_tuple )) return seasons_as_tuple def _get_selected_language_index(self, language: LanguageModel) -> int: """ Loops languages looking for the index of the provided language. Args: language (LanguageModel): language to look for Returns: index (int) """ for idx in range(0, self._language_model.get_n_items()): if language.name == self._language_model.get_string(idx): return idx return -1 @Gtk.Template.Callback('_on_title_changed') def _on_title_changed(self, user_data: object | None) -> None: """ Callback for "changed" signal. Wrapper around self._enable_save_btn(). Args: user_data (object or None): user data passed to the callback. Returns: None """ self._enable_save_btn() @Gtk.Template.Callback('_on_movies_btn_toggled') def _on_movies_btn_toggled(self, user_data: object | None) -> None: """ Callback for "toggled" signal. Wrapper around self._enable_save_btn(). Args: user_data (object or None): user data passed to the callback. Returns: None """ self._enable_save_btn() def _enable_save_btn(self) -> None: """ Checks whether the "save" button should be active or not. Args: None Returns: None """ # Movies: title required if self._movies_btn.get_active() and self._title_entry.get_text(): self._save_btn.set_sensitive(True) return # TV Series: title and at least a season required if self._series_btn.get_active() and self._title_entry.get_text() and len(self.seasons) > 0: self._save_btn.set_sensitive(True) return self._save_btn.set_sensitive(False) @Gtk.Template.Callback('_on_calendar_day_selected') def _on_calendar_day_selected(self, user_data: object | None) -> None: """ Callback for the "day-selected" signal. Sets the button's label as the selected date (user locale format) Args: user_data (object or None): user data passed to the callback. Returns: None """ self._release_date_menu_btn.set_label( self._calendar.get_date().format('%x')) @Gtk.Template.Callback('_on_season_add_btn_clicked') def _on_season_add_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Opens the "edit season" dialog. Args: user_data (object or None): user data passed to the callback. Returns: None """ # TRANSLATORS: {num} is the season number logging.debug('Edit season dialog open') dialog = EditSeasonDialog(self, title=_( 'Season {num}').format(num=len(self.seasons)+1)) dialog.connect('edit-saved', self._on_edit_saved) dialog.present(dialog.parent) def _on_edit_saved(self, source: Gtk.Widget, title: str, poster_uri: str, episodes: List[tuple]) -> None: """ Callback for the "edit-saved" signal. Appends the recieved data as a tuple in the seasons list and updates the ui. Args: source (Gtk.Widget): caller widget title (str): season title poster_uri (str): season poster uri episodes (List[tuple]): season episodes Returns: None """ logging.info(f'Updated {title}, {poster_uri}, {episodes}') self.seasons.append((title, poster_uri, episodes)) self.update_seasons_ui() @Gtk.Template.Callback('_on_done_btn_clicked') def _on_done_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Adds a background activity to add/update the content and closes the window. Args: user_data (object or None): user data passed to the callback. Returns: None """ if not self.edit_mode: BackgroundQueue.add( activity=BackgroundActivity( # TRANSLATORS: {title} is the content's title activity_type=ActivityType.ADD, title=C_('Background activity title', 'Add {title}').format(title=self._title_entry.get_text()), task_function=self._add_content_to_db), on_done=self._on_add_done) else: BackgroundQueue.add( activity=BackgroundActivity( # TRANSLATORS: {title} is the content's title activity_type=ActivityType.UPDATE, title=C_('Background activity title', 'Update {title}').format(title=self._title_entry.get_text()), task_function=self._add_content_to_db), on_done=self._on_add_done) self.close() def _add_content_to_db(self, activity: BackgroundActivity) -> None: """ Copies the poster image to the data folder, saves the content, and refreshes the main window. Args: activity (BackgroundActivity): the calling activity Returns: None """ poster_uri, color = self._copy_image_to_data(self._poster.get_uri(), shared.poster_dir, self._title_entry.get_text() ) if not self.edit_mode else (self._content.poster_path, False) # type: ignore if self._movies_btn.get_active(): self._save_movie(poster_uri, color) else: self._save_series(poster_uri, color) def _on_add_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" self.get_ancestor(Adw.ApplicationWindow).activate_action('win.refresh', None) activity.end() def _save_movie(self, poster_uri: str, color: bool) -> None: """ Creates a MovieModel with the provided data and saves or updates the movie in the local db. Args: poster_uri (str): movie poster uri Returns: None """ buffer = self._overview_text.get_buffer() start_iter = buffer.get_start_iter() end_iter = buffer.get_end_iter() overview = buffer.get_text(start_iter, end_iter, False) movie = MovieModel(t={ "add_date": datetime.now(), # add date "backdrop_path": '', # background "budget":int(self._budget_spinrow.get_value()), # budget "color": color, "genres": ''.join(self._genres_entry.get_text().split()), # genres "id": local.get_next_manual_movie() if not self.edit_mode else self._content.id, # id "manual":True, # manual "original_language":local.get_language_by_name(self._original_language_comborow.get_selected_item( ).get_string()).iso_name, # original language "original_title": self._original_title_entry.get_text(), # original title "overview":overview, # overview "poster_path": poster_uri, # poster "release_date": self._calendar.get_date().format('%Y-%m-%d'), # release date "revenue":int(self._revenue_spinrow.get_value()), # revenue "runtime":int(self._runtime_spinrow.get_value()), # runtime "status":self._status_entry.get_text(), # status "tagline":self._tagline_entry.get_text(), # tagline "title":self._title_entry.get_text(), # title "watched": False if not self.edit_mode else self._content.watched # watched }) if not self.edit_mode: local.add_movie(movie=movie) else: local.update_movie(old=self._content, new=movie) self.emit('edit-saved', movie) def _save_series(self, series_poster_uri: str, color: bool) -> None: """ Creates a SeriesModel with associated SeasonModels/EpisodeModels with the provided data and saves or updates the TV series in the local db. Args: poster_uri (str): tv series poster uri Returns: None """ show_id = local.get_next_manual_series() base_season_id = local.get_next_manual_season() base_episode_id = local.get_next_manual_episode() seasons = [] for idx, season in enumerate(self.seasons): # Create folder to store the images, if needed if not os.path.exists(f"{shared.series_dir}/{show_id}/{self._increment_manual_id(base_season_id, idx)}"): os.makedirs( f"{shared.series_dir}/{show_id}/{self._increment_manual_id(base_season_id, idx)}") # Copy the season poster poster_uri, color = self._copy_image_to_data(season[1], f"{shared.series_dir}/{show_id}/{self._increment_manual_id(base_season_id, idx)}", season[0]) episodes = [] for jdx, episode in enumerate(season[2]): # Copy the episode still still_uri, color = self._copy_image_to_data(episode[4], f"{shared.series_dir}/{show_id}/{self._increment_manual_id(base_season_id, idx)}", episode[0] ) episode_id = self._increment_manual_id(base_episode_id, jdx) season_number = idx+1 watched = False episodes.append(EpisodeModel(t=( episode_id, # id episode[1], # episode number episode[3], # overview episode[2], # runtime season_number, # season number show_id, # show id still_uri, # still uri episode[0], # title watched # watched ))) base_episode_id = self._increment_manual_id( base_episode_id, len(episodes)+1) season_id = self._increment_manual_id(base_season_id, idx) season_number = idx+1 seasons.append(SeasonModel(t=( len(episodes), # episodes number season_id, # id season_number, # season number '', # overview poster_uri, # season poster season[0], # title show_id, # show id episodes # season episodes ))) buffer = self._overview_text.get_buffer() start_iter = buffer.get_start_iter() end_iter = buffer.get_end_iter() overview = buffer.get_text(start_iter, end_iter, False) serie = SeriesModel(t={ "activate_notification": False, # activate notification "add_date": datetime.now(), # add date "backdrop_path":'', # backgroud "color": color, # color "created_by": self._creator_entry.get_text(), # created by "episodes_number": self._compute_episode_number(seasons), # episode number "genres": ''.join(self._genres_entry.get_text().split()), # genres "id": show_id, # id "in_production": self._production_checkbtn.get_active(), # in production "last_air_date": '', # last air date "manual": True, # manual "new_release": False, # new release flag "next_air_date": '', # next air date "original_language": local.get_language_by_name(self._original_language_comborow.get_selected_item( ).get_string()).iso_name, # type: ignore # original language "original_title": self._original_title_entry.get_text(), # original title "overview": overview, # overview "poster_path": series_poster_uri, # poster "release_date": self._calendar.get_date().format('%Y-%m-%d'), # release date "seasons_number": len(seasons), # seasons number "soon_release" :False, # soon_release flag "status": self._status_entry.get_text(), # status "tagline": self._tagline_entry.get_text(), # tagline "title": self._title_entry.get_text(), # title "watched": False, # watched "last_episode_number": 0, # last episode number "recent_change": False, # recent change flag "notes": '', # notes "seasons": seasons # seasons }) if self.edit_mode: local.delete_series(self._content.id) # type: ignore local.add_series(serie=serie) self.emit('edit-saved', serie) else: local.add_series(serie=serie) def _increment_manual_id(self, id: str, amount: int = 1) -> str: """ Increments the integer part of a manual id by amount. Args: id (str): id to increment amount (int): how much to increment by Returns: the incremented id """ tmp = id.split('-') return f'M-{int(tmp[1]) + amount}' def _compute_badge_color(self, poster_path) -> bool: im = Image.open(poster_path) box = (im.size[0]-175, 0, im.size[0], 175) region = im.crop(box) median = ImageStat.Stat(region).median if sum(median) < 3 * 128: return True else: return False def _compute_episode_number(self, seasons: List[SeasonModel]) -> int: """ Counts the total number of episodes of a tv series. Args: seasons (List[SeasonModel]): seasons to loop on Returns: the total number of episodes """ num = 0 for season in seasons: for episode in season.episodes: num += 1 return num def _copy_image_to_data(self, src_uri: str, dest_folder: str, filename: str) -> Tuple[str,bool]: """ Copies src_uri to dest_folder as filename. If src_uri is a resource (empty poster/still) the operation is not carried out. dest_folder must already exist on file system. Args: src_uri (str): source file uri dest_folder (str): path to the destination folder filename (str): new name for the copied file Returns: uri of the copied file or src_uri if is a resource. """ if src_uri.startswith('file'): extension = src_uri[src_uri.rindex('.'):] dest_path = f"{dest_folder}/{unquote(filename)}{extension}" shutil.copy2(src_uri[7:], dest_path) return f"file://{dest_path}", self._compute_badge_color(Path(dest_path)) return src_uri, False def update_seasons_ui(self) -> None: """ Rebuilds the ui to reflect changes to seasons. Args: None Returns: None """ # Empty PreferencesGroup list_box = self._seasons_group.get_first_child( ).get_last_child().get_first_child() # ugly workaround list_box.remove_all() # Fill PreferencesGroup for season in self.seasons: self._seasons_group.add(SeasonExpander( season_title=season[0], poster_uri=season[1], episodes=season[2])) self._enable_save_btn() def get_season(self, title: str, uri: str, episodes: List[tuple]) -> tuple: """ Compares and retrieves the tuple containing the passed data. Args: title (str): a title uri (str): an uri episodes (List[tuple]): a list of tuples representing episodes Returns: tuple matching the passed data """ for season in self.seasons: if (season[0] == title and season[1] == uri and season[2] == episodes): return season return () ticketbooth-1.1.1/src/dialogs/add_tmdb_dialog.py000066400000000000000000000042101475632104500216750ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore from ..models.search_result_model import SearchResultModel from ..providers.tmdb_provider import TMDBProvider @Gtk.Template(resource_path=shared.PREFIX + '/ui/dialogs/add_tmdb.ui') class AddTMDBDialog(Adw.Dialog): """ This class represents the dialog used to search for movies and tv-series on TMDB. Properties: None Methods: None Signals: None """ __gtype_name__ = 'AddTMDBDialog' _search_entry = Gtk.Template.Child() _stack = Gtk.Template.Child() _model = Gtk.Template.Child() def __init__(self): super().__init__() @Gtk.Template.Callback('_on_searchentry_search_changed') def _on_searchentry_search_changed(self, user_data: object | None) -> None: """ Callback for the "seach-changed" signal. Updates the GtkListModel used by the factory to populate the GtkListView. Args: user_data (object or None): user data passed to the callback. Returns: None """ logging.info(f'Search query: "{self._search_entry.get_text()}"') if self._model.get_property('n-items') > 0: self._model.remove_all() if not self._search_entry.get_text(): self._stack.set_visible_child_name('empty') return response = TMDBProvider().search(query=self._search_entry.get_text()) if not response['results']: self._stack.set_visible_child_name('no-results') logging.info('No results for query') return for result in response['results']: if result['media_type'] in ['movie', 'tv']: search_result = SearchResultModel(result) logging.info( f'Found [{"movie" if search_result.media_type == "movie" else "TV series"}] {search_result.title}, {search_result.year}') self._model.append(search_result) self._stack.set_visible_child_name('results') ticketbooth-1.1.1/src/dialogs/edit_season_dialog.py000066400000000000000000000161571475632104500224510ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gettext import gettext as _ from typing import List from gi.repository import Adw, GObject, Gtk from .. import shared # type: ignore from ..pages.edit_episode_page import EditEpisodeNavigationPage from ..widgets.episode_row import EpisodeRow @Gtk.Template(resource_path=shared.PREFIX + '/ui/dialogs/edit_season.ui') class EditSeasonDialog(Adw.Dialog): """ This class represents the window to edit a season. Properties: None Methods: update_episodes_ui(): rebuilds the ui to reflect changes to episodes Signals: edit-saved (title: str, poster_uri: str, episodes: List[tuple]): emited when the user clicks the save button """ __gtype_name__ = 'EditSeasonDialog' _navigation_view = Gtk.Template.Child() _save_btn = Gtk.Template.Child() _poster = Gtk.Template.Child() _title_entry = Gtk.Template.Child() _episodes_group = Gtk.Template.Child() __gsignals__ = { 'edit-saved': (GObject.SIGNAL_RUN_FIRST, None, (str, str, object,)), } def __init__(self, parent: Gtk.Window, title: str = _('Season'), poster_uri: str = f'resource://{shared.PREFIX}/blank_poster.jpg', episodes: List[tuple] | None = None): super().__init__() self.parent = parent self._title = title self._poster_uri = poster_uri self._episodes = episodes if episodes else [] @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Sets the title text and poster image, populates the episode data. Args: user_data (object or None): user data passed to the callback. Returns: None """ self._title_entry.set_text(self._title) if self._poster_uri.startswith('file'): self._poster.set_image(self._poster_uri) self._title_entry.grab_focus() for episode in self._episodes: self._episodes_group.add(EpisodeRow(title=episode[0], episode_number=episode[1], runtime=episode[2], overview=episode[3], still_uri=episode[4], watched=episode[5], editable=True) ) @Gtk.Template.Callback('_on_title_entry_changed') def _on_title_entry_changed(self, user_data: object | None) -> None: """ Callback for "changed" signal. Wrapper around self._enable_save_btn(). Args: user_data (object or None): user data passed to the callback. Returns: None """ self._enable_save_btn() def _enable_save_btn(self) -> None: """ Checks whether the "save" button should be made active or not. Args: None Returns: None """ if self._title_entry.get_text() and len(self._episodes) > 0: self._save_btn.set_sensitive(True) return self._save_btn.set_sensitive(False) @Gtk.Template.Callback('_on_save_btn_clicked') def _on_save_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Emits the "edit-saved" signal and closes the window. Args: user_data (object or None): user data passed to the callback. Returns: None """ self.emit('edit-saved', self._title_entry.get_text(), self._poster.get_uri(), self._episodes) self.close() @Gtk.Template.Callback('_on_add_btn_clicked') def _on_add_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Shows the "edit episode" page. Args: user_data (object or None): user data passed to the callback. Returns: None """ edit_episode_page = EditEpisodeNavigationPage(episode_number=len(self._episodes)+1) edit_episode_page.connect('edit-saved', self._on_episode_saved) self._navigation_view.push(edit_episode_page) def _on_episode_saved(self, source: Gtk.Widget, title: str, episode_number: int, runtime: int, overview: str, still_uri: str, watched: bool) -> None: """ Callback for "edit-saved" signal. Appends the recieved data as a tuple in the episodes list and updates the ui. Args: source (Gtk.Widget): caller widget title (str): epiosode title episode_number (int): episode number runtime (int): episode runtime in minutes overview (str): episode overview still_uri (str): episode still uri Returns: None """ self._episodes.append((title, episode_number, runtime, overview, still_uri, watched)) self.update_episodes_ui() def update_episodes_ui(self) -> None: """ Rebuilds the ui to reflect changes to episodes. Args: None Returns: None """ # Empty PreferencesGroup list_box = self._episodes_group.get_first_child().get_last_child().get_first_child() # ugly workaround list_box.remove_all() # Fill PreferencesGroup for episode in self._episodes: self._episodes_group.add(EpisodeRow(title=episode[0], episode_number=episode[1], runtime=episode[2], overview=episode[3], still_uri=episode[4], watched=episode[5], editable=True)) self._enable_save_btn() def get_episode(self, title: str, episode_number: int, runtime: int, overview: str, still_uri: str) -> tuple: """ Compares and retrieves the tuple containing the passed data. Args: title (str): a title episode_number (int): an episode number runtime (int): a runtime in minutes overview (str): an overview still_uri (str): an uri Returns: tuple matching the passed data """ for episode in self._episodes: if (episode[0] == title and episode[1] == episode_number and episode[2] == runtime and episode[3] == overview and episode[4] == still_uri): return episode return () ticketbooth-1.1.1/src/dialogs/meson.build000066400000000000000000000006011475632104500204100ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) dialogsdir = join_paths(pkgdatadir, 'src/dialogs') sources = [ '__init__.py', 'add_manual_dialog.py', 'add_tmdb_dialog.py', 'edit_season_dialog.py', ] install_data(sources, install_dir: dialogsdir) ticketbooth-1.1.1/src/logging/000077500000000000000000000000001475632104500162555ustar00rootroot00000000000000ticketbooth-1.1.1/src/logging/__init__.py000066400000000000000000000000001475632104500203540ustar00rootroot00000000000000ticketbooth-1.1.1/src/logging/meson.build000066400000000000000000000005211475632104500204150ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) loggingdir = join_paths(pkgdatadir, 'src/logging') sources = [ '__init__.py', 'session_file_handler.py', ] install_data(sources, install_dir: loggingdir) ticketbooth-1.1.1/src/logging/session_file_handler.py000066400000000000000000000114611475632104500230110ustar00rootroot00000000000000# session_file_handler.py # # Copyright 2023 Geoffrey Coulaud # # 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 . # # SPDX-License-Identifier: GPL-3.0-or-later import lzma from io import TextIOWrapper from logging import StreamHandler from lzma import FORMAT_XZ, PRESET_DEFAULT from os import PathLike from pathlib import Path from typing import Optional from .. import shared # type: ignore class SessionFileHandler(StreamHandler): """ A logging handler that writes to a new file on every app restart. The files are compressed and older sessions logs are kept up to a small limit. """ NUMBER_SUFFIX_POSITION = 1 backup_count: int filename: Path log_file: Optional[TextIOWrapper] = None def create_dir(self) -> None: """Create the log dir if needed""" self.filename.parent.mkdir(exist_ok=True, parents=True) def path_is_logfile(self, path: Path) -> bool: return path.is_file() and path.name.startswith(self.filename.stem) def path_has_number(self, path: Path) -> bool: try: int(path.suffixes[self.NUMBER_SUFFIX_POSITION][1:]) except (ValueError, IndexError): return False return True def get_path_number(self, path: Path) -> int: """Get the number extension in the filename as an int""" suffixes = path.suffixes number = ( 0 if not self.path_has_number(path) else int(suffixes[self.NUMBER_SUFFIX_POSITION][1:]) ) return number def set_path_number(self, path: Path, number: int) -> str: """Set or add the number extension in the filename""" suffixes = path.suffixes if self.path_has_number(path): suffixes.pop(self.NUMBER_SUFFIX_POSITION) suffixes.insert(self.NUMBER_SUFFIX_POSITION, f'.{number}') stem = path.name.split('.', maxsplit=1)[0] new_name = stem + ''.join(suffixes) return new_name def file_sort_key(self, path: Path) -> int: """Key function used to sort files""" return self.get_path_number(path) if self.path_has_number(path) else 0 def get_logfiles(self) -> list[Path]: """Get the log files""" logfiles = list(filter(self.path_is_logfile, self.filename.parent.iterdir())) logfiles.sort(key=self.file_sort_key, reverse=True) return logfiles def rotate_file(self, path: Path) -> None: """Rotate a file's number suffix and remove it if it's too old""" # If uncompressed, compress if not path.name.endswith('.xz'): try: with open(path, 'r', encoding='utf-8') as original_file: original_data = original_file.read() except UnicodeDecodeError: # If the file is corrupted, throw it away path.unlink() return # Compress the file compressed_path = path.with_suffix(path.suffix + '.xz') with lzma.open( compressed_path, 'wt', format=FORMAT_XZ, preset=PRESET_DEFAULT, encoding='utf-8', ) as lzma_file: lzma_file.write(original_data) path.unlink() path = compressed_path # Rename with new number suffix new_number = self.get_path_number(path) + 1 new_path_name = self.set_path_number(path, new_number) path = path.rename(path.with_name(new_path_name)) # Remove older files if new_number > self.backup_count: path.unlink() return def rotate(self) -> None: """Rotate the numbered suffix on the log files and remove old ones""" for path in self.get_logfiles(): self.rotate_file(path) def __init__(self, filename: PathLike, backup_count: int = 2) -> None: self.filename = Path(filename) self.backup_count = backup_count self.create_dir() self.rotate() self.log_file = open(self.filename, 'w', encoding='utf-8') shared.log_files = self.get_logfiles() super().__init__(self.log_file) def close(self) -> None: if self.log_file: self.log_file.close() super().close() ticketbooth-1.1.1/src/main.py000066400000000000000000000327171475632104500161370ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later # isort: off # autopep8: off import gi from src.background_queue import ActivityType, BackgroundActivity, BackgroundQueue gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') # isort: on # autopep: on import logging import os import platform import subprocess import sys from gettext import gettext as _ from gettext import pgettext as C_ from typing import Callable from datetime import datetime from gi.repository import Adw, Gio, GObject, Gtk, GLib from . import shared # type: ignore from .models.search_result_model import SearchResultModel from .preferences import PreferencesDialog from .views.content_view import ContentView from .pages.details_page import DetailsView from .views.first_run_view import FirstRunView from .views.db_update_view import DbUpdateView from .views.main_view import MainView from .widgets.background_activity_row import BackgroundActivityRow from .widgets.background_indicator import BackgroundIndicator from .widgets.episode_row import EpisodeRow from .widgets.image_selector import ImageSelector from .widgets.poster_button import PosterButton from .widgets.search_result_row import SearchResultRow from .window import TicketboothWindow from .providers.local_provider import LocalProvider as local class TicketboothApplication(Adw.Application): """The main application singleton class.""" # Types used in blueprint files _custom_widgets = [ SearchResultModel, PosterButton, SearchResultRow, DetailsView, DbUpdateView, FirstRunView, MainView, ContentView, EpisodeRow, ImageSelector, BackgroundIndicator, BackgroundActivityRow, ] def __init__(self): super().__init__(application_id=shared.APP_ID, flags=Gio.ApplicationFlags.DEFAULT_FLAGS) logging.info('Ticket Booth started') logging.info(f'Debug: {shared.DEBUG}') logging.debug('Python version: %s', sys.version) if os.getenv('FLATPAK_ID') == shared.APP_ID: process = subprocess.run( ('flatpak-spawn', '--host', 'flatpak', '--version'), capture_output=True, encoding='utf-8', check=False, ) logging.debug('Flatpak version: %s', process.stdout.rstrip()) logging.debug('Platform: %s', platform.platform()) if os.name == 'posix': for key, value in platform.uname()._asdict().items(): logging.debug('\t%s: %s', key.title(), value) logging.debug('─' * 37) self.create_action('quit', lambda *_: self.quit(), ['q']) self.create_action('about', self.on_about_action) self.create_action('preferences', self.on_preferences_action, ['comma']) self.create_action('export', self.do_export) self.create_action('import', self.do_import) for i in self._custom_widgets: GObject.type_ensure(i) def do_activate(self): """ Called when the application is activated. We raise the application's main window, creating it if necessary. """ win = self.props.active_window if not win: win = TicketboothWindow(application=self) logging.debug('Window open') win.present() def on_about_action(self, widget: Gtk.Widget, user_data: object | None): """Callback for the app.about action.""" builder = Gtk.Builder.new_from_resource(shared.PREFIX + '/ui/about_dialog.ui') about_dialog = builder.get_object('about_dialog') about_dialog.set_application_name(shared.APP_NAME) about_dialog.set_application_icon(shared.APP_ID) about_dialog.set_version(shared.VERSION) about_dialog.add_credit_section('Contributors', [ # your name # your name website ]) about_dialog.add_legal_section('Movie and TV Series Metadata', 'This product uses the TMDB API but is not endorsed or certified by TMDB.', Gtk.License.CUSTOM, 'All rights belong to their respective owners.') logging.debug('About window open') about_dialog.present(self.props.active_window) def on_preferences_action(self, widget: Gtk.Widget, user_data: object | None): """Callback for the app.preferences action.""" pref_dialog = PreferencesDialog() logging.debug('Preferences dialog open') pref_dialog.present(self.props.active_window) def create_action(self, name: Gtk.Widget, callback: Callable, shortcuts=None): """ Add an application action. Args: name: the name of the action callback: the function to be called when the action is activated shortcuts: an optional list of accelerators """ action = Gio.SimpleAction.new(name, None) action.connect('activate', callback) self.add_action(action) if shortcuts: self.set_accels_for_action(f'app.{name}', shortcuts) logging.debug(f'Created action app.{name} ({shortcuts})') def do_export(self, widget: Gtk.Widget, user_data: object | None): """ Callback for the app.export action Args: widget (Gtk.Widget): the widget that triggered the action user_data (object or None): additional data passed to the callback Returns: None """ logging.info('Export requested') logging.info('Opening file dialog to select export location') self.dialog = Gtk.FileDialog.new() self.dialog.set_modal(True) self.dialog.set_initial_name(f"ticketbooth-export-{datetime.now().strftime('%Y-%m-%d-%H:%M:%S')}.zip") file_filter_store = Gio.ListStore.new(Gtk.FileFilter) file_filter = Gtk.FileFilter() file_filter.add_suffix("zip") file_filter_store.append(file_filter) self.dialog.set_filters(file_filter_store) self.dialog.save(self.props.active_window, None, self._on_file_save_complete, None) def _on_file_save_complete(self, source: Gtk.Widget, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the file dialog. Finishes the file selection and, if successfull, asks for confirmation Args: source (Gtk.Widget): caller widget result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ try: self.archive = self.dialog.save_finish(result) dialog = Adw.AlertDialog.new( heading=_("Confirm Export?"), body=_("Exporting your library will create an archive containing all your data. You can import this archive later to restore your library."), ) dialog.add_response('cancel', C_('alert dialog action', '_Cancel')) dialog.add_response('export', C_('alert dialog action', '_Export')) dialog.set_default_response('export') dialog.set_close_response('cancel') dialog.set_response_appearance('export', Adw.ResponseAppearance.SUGGESTED) dialog.choose(self.props.active_window, None, self._on_export_alert_dialog_choose, None) except GLib.GError: logging.info("Export cancelled") def _on_export_alert_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the export confirmation dialog. If the user confirms the export, the export process is started. Args: dialog (Adw.AlertDialog): the dialog that triggered the response response (int): the response code Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cancel': logging.info("Export cancelled") return BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.ADD, title=C_('Background activity title', 'Exporting library'), task_function=self._export_content_from_db), on_done=self._on_export_done ) def _export_content_from_db(self, activity: BackgroundActivity) -> None: """ Exports the library to the selected archive. Args: activity (BackgroundActivity): the calling activity Returns: None """ if not local.export_data(self.archive.get_path()): activity.error() logging.info("Export failed") def _on_export_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" activity.activity_finish(result, self) activity.end() logging.info("Export done") def do_import(self, new_state: None, source: Gtk.Widget) -> None: """ Callback for the app.import action Args: new_state (None): the new state of the action source (Gtk.Widget): the widget that triggered the action Returns: None """ logging.info('Import requested') logging.info('Opening file dialog to select import location') self.dialog = Gtk.FileDialog.new() self.dialog.set_modal(True) file_filter_store = Gio.ListStore.new(Gtk.FileFilter) file_filter = Gtk.FileFilter() file_filter.add_suffix("zip") file_filter_store.append(file_filter) self.dialog.set_filters(file_filter_store) self.dialog.open(self.props.active_window, None, self._on_file_open_complete, None) def _on_file_open_complete(self, source: Gtk.Widget, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the file dialog. Finishes the file selection and, if successfull, asks for confirmation Args: source (Gtk.Widget): caller widget result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ try: self.archive = self.dialog.open_finish(result) dialog = Adw.AlertDialog.new( heading=_("Confirm Import?"), body=_("Importing a library will merge it with the current library. This action cannot be undone and in case of conflicts, the new data will be kept."), ) dialog.add_response('cancel', C_('alert dialog action', '_Cancel')) dialog.add_response('import', C_('alert dialog action', '_Import')) dialog.set_default_response('import') dialog.set_close_response('cancel') dialog.set_response_appearance('import', Adw.ResponseAppearance.SUGGESTED) dialog.choose(self.props.active_window, None, self._on_import_alert_dialog_choose, None) except GLib.GError: logging.info("Import cancelled") def _on_import_alert_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the import confirmation dialog. If the user confirms the import, the import process is started. Args: dialog (Adw.AlertDialog): the dialog that triggered the response response (int): the response code Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cancel': logging.info("Import cancelled") return BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.ADD, title=C_('Background activity title', 'Importing library'), task_function=self._import_content_to_db), on_done=self._on_import_done ) def _import_content_to_db(self, activity: BackgroundActivity) -> None: """ Imports the library from the selected archive. Args: activity (BackgroundActivity): the calling activity Returns: None """ if not local.import_data(self.archive.get_path()): activity.error() logging.info("Import failed") def _on_import_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" activity.activity_finish(result, self) activity.end() self.props.active_window.activate_action('win.refresh') logging.info("Import done") def main(): """The application's entry point.""" app = TicketboothApplication() return app.run(sys.argv) ticketbooth-1.1.1/src/meson.build000066400000000000000000000040021475632104500167650ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) moduledir = join_paths(pkgdatadir, 'src') gnome = import('gnome') # Compile resources blueprints = custom_target('blueprints', input: files( 'ui/gtk/help-overlay.blp', 'ui/window.blp', 'ui/about_dialog.blp', 'ui/preferences.blp', 'ui/views/main_view.blp', 'ui/views/first_run_view.blp', 'ui/views/db_update_view.blp', 'ui/views/content_view.blp', 'ui/dialogs/add_manual.blp', 'ui/dialogs/add_tmdb.blp', 'ui/dialogs/edit_season.blp', 'ui/dialogs/message_dialogs.blp', 'ui/pages/edit_episode_page.blp', 'ui/pages/details_page.blp', 'ui/widgets/theme_switcher.blp', 'ui/widgets/poster_button.blp', 'ui/widgets/search_result_row.blp', 'ui/widgets/episode_row.blp', 'ui/widgets/image_selector.blp', 'ui/widgets/season_expander.blp', 'ui/widgets/background_indicator.blp', 'ui/widgets/background_activity_row.blp', ), output: '.', command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'] ) gnome.compile_resources('ticketbooth', configure_file( input: 'ticketbooth.gresource.xml.in', output: 'ticketbooth.gresource.xml', configuration: conf ), gresource_bundle: true, install: true, install_dir: pkgdatadir, dependencies: blueprints, ) configure_file( input: 'ticketbooth.in', output: 'ticketbooth', configuration: conf, install: true, install_dir: get_option('bindir') ) subdir('widgets') subdir('dialogs') subdir('providers') subdir('models') subdir('views') subdir('pages') subdir('logging') # Install sources ticketbooth_sources = [ '__init__.py', 'main.py', 'window.py', configure_file( input: 'shared.py.in', output: 'shared.py', configuration: conf ), 'preferences.py', 'background_queue.py', ] install_data(ticketbooth_sources, install_dir: moduledir) ticketbooth-1.1.1/src/models/000077500000000000000000000000001475632104500161125ustar00rootroot00000000000000ticketbooth-1.1.1/src/models/__init__.py000066400000000000000000000001251475632104500202210ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later ticketbooth-1.1.1/src/models/episode_model.py000066400000000000000000000077501475632104500213050ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import os import re import requests from gi.repository import GObject from PIL import Image from .. import shared # type: ignore class EpisodeModel(GObject.GObject): """ This class represents an episode object stored in the db. Properties: id (str): episode id number (int): episode number in its season overview (str): episode overview runtime (int): episode runtime in minutes season_number (int): season the episode belongs to show_id (int): id of the show the episode belongs to still_path (str): uri of the episode still title (str): episode title watched (bool): whether the episode has been watched or not Methods: None Signals: None """ __gtype_name__ = 'EpisodeModel' id = GObject.Property(type=str, default='') number = GObject.Property(type=int, default=0) overview = GObject.Property(type=str, default='') runtime = GObject.Property(type=int, default=0) season_number = GObject.Property(type=int, default=0) show_id = GObject.Property(type=str, default='') still_path = GObject.Property(type=str, default='') title = GObject.Property(type=str, default='') watched = GObject.Property(type=bool, default=False) def __init__(self, d=None, t=None): super().__init__() if d is not None: self.id = d['id'] self.number = d['episode_number'] self.overview = re.sub(r'\s{2}', ' ', d['overview']) self.runtime = d['runtime'] if d['runtime'] else 0 self.season_number = d['season_number'] self.show_id = d['show_id'] self.still_path = self._download_still(d['still_path']) self.title = d['name'] self.watched = False else: self.id = t[0] # type: ignore self.number = t[1] # type: ignore self.overview = t[2] # type: ignore self.runtime = t[3] # type: ignore self.season_number = t[4] # type: ignore self.show_id = t[5] # type: ignore self.still_path = t[6] # type: ignore self.title = t[7] # type: ignore self.watched = t[8] # type: ignore def _download_still(self, path: str) -> str: """ Returns the uri of the still image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the still image """ if not path: return f'resource://{shared.PREFIX}/blank_still.jpg' if not os.path.exists(f'{shared.series_dir}/{self.show_id}/{self.season_number}'): os.makedirs( f'{shared.series_dir}/{self.show_id}/{self.season_number}') files = glob.glob( f'{path[1:-4]}.jpg', root_dir=f'{shared.series_dir}/{self.show_id}/{self.season_number}') if files: return f'file://{shared.series_dir}/{self.show_id}/{self.season_number}/{files[0]}' url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.series_dir}/{self.show_id}/{self.season_number}{path}', 'wb') as f: f.write(r.content) with Image.open(f'{shared.series_dir}/{self.show_id}/{self.season_number}{path}') as img: img = img.resize((500, 281)) img.save( f'{shared.series_dir}/{self.show_id}/{self.season_number}{path}', 'JPEG') return f'file://{shared.series_dir}/{self.show_id}/{self.season_number}{path}' else: return f'resource://{shared.PREFIX}/blank_still.jpg' except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return f'resource://{shared.PREFIX}/blank_still.jpg' ticketbooth-1.1.1/src/models/language_model.py000066400000000000000000000016201475632104500214260ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import GObject class LanguageModel(GObject.GObject): """ This class represents a language object stored in the db. Properties: iso_name (str): ISO_639_1 code name (str): localized or English name Methods: None Signals: None """ __gtype_name__ = 'LanguageModel' iso_name = GObject.Property(type=str, default='') name = GObject.Property(type=str, default='') def __init__(self, d=None, t=None): super().__init__() if d is not None: self.iso_name = d['iso_639_1'] if d['name']: self.name = d['name'] else: self.name = d['english_name'] else: self.iso_name = t[0] # type: ignore self.name = t[1] # type: ignore ticketbooth-1.1.1/src/models/meson.build000066400000000000000000000006701475632104500202570ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) modelsdir = join_paths(pkgdatadir, 'src/models') sources = [ '__init__.py', 'search_result_model.py', 'language_model.py', 'movie_model.py', 'episode_model.py', 'season_model.py', 'series_model.py', ] install_data(sources, install_dir: modelsdir) ticketbooth-1.1.1/src/models/movie_model.py000066400000000000000000000240351475632104500207670ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import re from datetime import datetime, timedelta from typing import List, Tuple from pathlib import Path import requests from gi.repository import GLib, GObject from PIL import Image, ImageFilter, ImageStat import src.providers.local_provider as local from .. import shared # type: ignore from ..models.language_model import LanguageModel class MovieModel(GObject.GObject): """ This class represents a movie object stored in the db. Properties: activate_notification (bool): Provide notification if the movie is added to the watchlist before its release date. add_date (str): date of addition to the db (ISO format) backdrop_path (str): path where the background image is stored budget (float): movie budget color (bool): color of the poster badges, False being dark genres (List[str]): list of genres id (str): movie id manual (bool): if movie is added manually new_release (bool): if the movie has had its release original_language (LanguageModel): LanguageModel of the original language original_title (str): movie title in original language overview (str): movie overview, usually the main plot poster_path (str): path where the backgroud poster is stored recent_change (bool): indicates that new/soon_release was changed during the last check release_date (str): release date in YYYY-MM-DD format revenue (float): movie revenue runtime (int): movie runtime in minutes tagline (str): movie tagline soon_release (bool): if the movie has its release soon status (str): movie status, usually released or planned title (str): movie title watched (bool): if the movie has been market as watched notes (str): additional notes added by the user Methods: None Signals: None """ __gtype_name__ = 'MovieModel' activate_notification = GObject.Property(type=bool, default=False) add_date = GObject.Property(type=str, default='') backdrop_path = GObject.Property(type=str, default='') budget = GObject.Property(type=float, default=0) color = GObject.Property(type=bool, default=False) genres = GObject.Property(type=GLib.strv_get_type()) id = GObject.Property(type=str, default='') manual = GObject.Property(type=bool, default=False) new_release = GObject.Property(type=bool, default=False) original_language = GObject.Property(type=LanguageModel) original_title = GObject.Property(type=str, default='') overview = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') recent_change = GObject.Property(type=bool, default=False) release_date = GObject.Property(type=str, default='') revenue = GObject.Property(type=float, default=0) runtime = GObject.Property(type=int, default=0) soon_release = GObject.Property(type=bool, default=False) status = GObject.Property(type=str, default='') tagline = GObject.Property(type=str, default='') title = GObject.Property(type=str, default='') watched = GObject.Property(type=bool, default=False) notes = GObject.Property(type=str, default='') def __init__(self, d=None, t=None): super().__init__() if d is not None: self.add_date = datetime.now().date() self.backdrop_path = self._download_background( path=d['backdrop_path']) self.budget = d['budget'] self.genres = self._parse_genres(api_dict=d['genres']) self.id = d['id'] self.manual = False self.new_release = False self.original_language = local.LocalProvider.get_language_by_code( d['original_language']) # type: ignore self.original_title = d['original_title'] self.overview = re.sub(r'\s{2}', ' ', d['overview']) self.poster_path, self.color = self._download_poster( path=d['poster_path'], color=False) self.recent_change = False self.release_date = d['release_date'] if d['release_date'] else None self.revenue = d['revenue'] self.runtime = d['runtime'] self.soon_release = datetime.strptime(self.release_date, '%Y-%m-%d') < datetime.strptime(self.add_date, '%Y-%m-%d') + timedelta( days=14) and datetime.strptime(self.release_date, '%Y-%m-%d') > datetime.strptime(self.add_date, '%Y-%m-%d') if self.release_date and self.add_date else False self.status = d['status'] self.tagline = d['tagline'] self.title = d['title'] self.watched = False self.activate_notification = datetime.strptime(self.release_date, '%Y-%m-%d') > datetime.strptime( # if the release date is in the future activate notifications self.add_date, '%Y-%m-%d') if self.release_date and self.add_date else False self.notes = '' else: self.activate_notification = t["activate_notification"] # type: ignore self.add_date = t["add_date"] # type: ignore self.backdrop_path = t["backdrop_path"] # type: ignore self.budget = t["budget"] # type: ignore self.color = t["color"] # type: ignore self.genres = self._parse_genres( db_str=t["genres"]) # type: ignore self.id = t["id"] # type: ignore self.manual = t["manual"] # type:ignore self.new_release = t["new_release"] #type: ignore self.original_language = local.LocalProvider.get_language_by_code( t["original_language"]) # type: ignore self.original_title = t["original_title"] # type: ignore self.overview = t["overview"] # type: ignore self.poster_path = t["poster_path"] # type: ignore self.recent_change = t["recent_change"] # type: ignore self.release_date = t["release_date"] # type: ignore self.revenue = t["revenue"] # type: ignore self.runtime = t["runtime"] # type: ignore self.soon_release = t["soon_release"] # type: ignore self.status = t["status"] # type: ignore self.tagline = t["tagline"] # type: ignore self.title = t["title"] # type: ignore self.watched = t["watched"] # type:ignore self.notes = t["notes"] # type: ignore def _parse_genres(self, api_dict: dict = {}, db_str: str = '') -> List[str]: """ Function to parse genres into a list of strings. Genres are provided by the TMDB API as a dict and are stored in the local db as a comma-separated string. Providing both arguments is an error. Args: from_api (dict): dict from TMDB API from_db (str): string from local db Returns: list of strings """ genres = [] if api_dict: for genre in api_dict: genres.append(genre['name']) return genres if db_str: return db_str.split(',') return genres def _download_background(self, path: str) -> str: """ Returns the uri of the background image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the background image """ if not path: return '' files = glob.glob(f'{path[1:-4]}.jpg', root_dir=shared.background_dir) if files: return f'file://{shared.background_dir}/{files[0]}' url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.background_dir}{path}', 'wb') as f: f.write(r.content) with Image.open(f'{shared.background_dir}{path}') as image: image = ( image.convert('RGB') .filter(ImageFilter.GaussianBlur(20)) ) image.save(f'{shared.background_dir}{path}', 'JPEG') return f'file://{shared.background_dir}{path}' else: return '' except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return '' def _download_poster(self, path: str, color: bool) -> Tuple[str, bool]: """ Returns the uri of the poster image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the poster image """ if not path: return (f'resource://{shared.PREFIX}/blank_poster.jpg', False) files = glob.glob(f'{path[1:-4]}.jpg', root_dir=shared.poster_dir) if files: color = self._compute_badge_color(Path(f'{files[0]}')) return (f'file://{shared.poster_dir}/{files[0]}', color) url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.poster_dir}{path}', 'wb') as f: f.write(r.content) color = self._compute_badge_color(Path(f'{path}')) return f'file://{shared.poster_dir}{path}', color else: return f'resource://{shared.PREFIX}/blank_poster.jpg', False except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return f'resource://{shared.PREFIX}/blank_poster.jpg', False def _compute_badge_color(self, path: str) -> bool: color_light = False im = Image.open(Path(f'{shared.poster_dir}/{path}')) box = (im.size[0]-175, 0, im.size[0], 175) region = im.crop(box) median = ImageStat.Stat(region).median if sum(median) < 3 * 128: color_light = True return color_light ticketbooth-1.1.1/src/models/search_result_model.py000066400000000000000000000031051475632104500225060ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import re from gi.repository import GObject class SearchResultModel(GObject.GObject): """ This class represents the object returned from the TMDB search endpoint. Properties: title (str): content's title year (str): content's release year description (str): content's description poster_path (str): API endpoint for the content poster tmdb_id (int): content's unique id in the API media_type (str): content's media type Methods: None Signals: None """ __gtype_name__ = 'SearchResultModel' title = GObject.Property(type=str, default='') year = GObject.Property(type=str, default='') description = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') tmdb_id = GObject.Property(type=int, default=0) media_type = GObject.Property(type=str, default='') def __init__(self, d=None): super().__init__() if d is not None: self.tmdb_id = d['id'] self.poster_path = d['poster_path'] self.description = re.sub(r'\s{2}', ' ', d['overview']) if d['media_type'] == 'movie': self.media_type = d['media_type'] self.title = d['title'] self.year = d['release_date'][0:4] elif d['media_type'] == 'tv': self.media_type = d['media_type'] self.title = d['name'] self.year = d['first_air_date'][0:4] ticketbooth-1.1.1/src/models/season_model.py000066400000000000000000000117231475632104500211400ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import os import re from typing import List import requests from gi.repository import GObject import src.providers.local_provider as local import src.providers.tmdb_provider as tmdb from .. import shared # type: ignore from ..models.episode_model import EpisodeModel class SeasonModel(GObject.GObject): """ This class represents a season object stored in the db. Properties: episodes (List[EpisodeModel]): list of episodes in self episodes_number (int): number of episodes in self id (str): season id number (int): season number overview (str): season overview poster_path (str): uri of the season's poster show_id (int): id of the show the searies belongs to title (str): season title Methods: None Signals: None """ __gtype_name__ = 'SeasonModel' episodes = GObject.Property(type=object) episodes_number = GObject.Property(type=int, default=0) id = GObject.Property(type=str, default='') number = GObject.Property(type=int, default=0) overview = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') show_id = GObject.Property(type=str, default='') title = GObject.Property(type=str, default='') def __eq__(self, other) -> bool: """ Custom comparing fuction, overrides '==' operator. Args: other: object to compare to Returns: bool result of the operation """ if type(other) is not SeasonModel: return False if (self.episodes_number == other.episodes_number and self.id == other.id and self.number == other.number and self.overview == other.overview and self.poster_path == other.poster_path and self.show_id == other.show_id and self.title == other.title): return True else: return False def __init__(self, show_id: int = 0, d=None, t=None): super().__init__() if d is not None: self.episodes_number = d['episode_count'] self.id = d['id'] self.number = d['season_number'] self.overview = re.sub(r'\s{2}', ' ', d['overview']) self.poster_path = self._download_poster(show_id, d['poster_path']) self.title = d['name'] self.show_id = show_id self.episodes = self._parse_episodes( tmdb.TMDBProvider.get_season_episodes(show_id, self.number)) else: self.episodes_number = t[0] # type: ignore self.id = t[1] # type: ignore self.number = t[2] # type: ignore self.overview = t[3] # type: ignore self.poster_path = t[4] # type: ignore self.title = t[5] # type: ignore self.show_id = t[6] # type: ignore if len(t) == 8: # type: ignore self.episodes = t[7] # type: ignore else: self.episodes = local.LocalProvider.get_season_episodes( self.show_id, self.number) # type: ignore def _download_poster(self, show_id: int, path: str) -> str: """ Returns the uri of the poster image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the poster image """ if not path: return f'resource://{shared.PREFIX}/blank_poster.jpg' if not os.path.exists(f'{shared.series_dir}/{show_id}/{self.number}'): os.makedirs(f'{shared.series_dir}/{show_id}/{self.number}') files = glob.glob( f'{path[1:-4]}.jpg', root_dir=f'{shared.series_dir}/{show_id}/{self.number}') if files: return f'file://{shared.series_dir}/{show_id}/{self.number}/{files[0]}' url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.series_dir}/{show_id}/{self.number}{path}', 'wb') as f: f.write(r.content) return f'file://{shared.series_dir}/{show_id}/{self.number}{path}' else: return f'resource://{shared.PREFIX}/blank_poster.jpg' except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return f'resource://{shared.PREFIX}/blank_poster.jpg' def _parse_episodes(self, episodes: dict) -> List[EpisodeModel]: """ Parses episode data comming from tmdb into a list of EpisodeModels. Args: episodes (dict): dict from the api Returns: List of EpisodeModels """ episode_list = [] for episode in episodes: episode_list.append(EpisodeModel(d=episode)) return episode_list ticketbooth-1.1.1/src/models/series_model.py000066400000000000000000000311411475632104500211360ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import re from datetime import datetime, timedelta from typing import List, Tuple from pathlib import Path import requests from gi.repository import GLib, GObject from PIL import Image, ImageFilter, ImageStat import src.providers.local_provider as local from .. import shared # type: ignore from ..models.language_model import LanguageModel from ..models.season_model import SeasonModel class SeriesModel(GObject.GObject): """ This class represents a series object stored in the db. Properties: add_date (str): date of addition to the db (ISO format) backdrop_path (str): uri of the background image color (bool): color of the poster badges, False being dark created_by (List[str]): list of creators episodes_number (int): number of total episodes genres (List[str]): list of genres id (str): series id in_production (bool): whether the series is still in production last_air_date (str): the date of the last aired episode manual (bool): if the series is added manually new_release (bool): whether the has seen a new release since the last check next_air_date (str) : used to notify user on upcoming releases original_language (LanguageModel): LanguageModel of the original language original_title (str): series title in original language overview (str): series overview poster_path (str): uri of the poster image recent_change (bool): indicates that new/soon_release has chagned in the last check release_date (str): first air date in YYYY-MM-DD format seasons_number (int): number of total seasons seasons (List[SeasonModel]): list of SeasonModels status (str): series status tagline (str): series tagline title (str): series title watched (bool): whether the series has been watched completely or not activate_notification (bool): whether the series should be checked for new releases notes (str): user notes Methods: None Signals: None """ __gtype_name__ = 'SeriesModel' activate_notification = GObject.Property(type=bool, default=False) add_date = GObject.Property(type=str, default='') backdrop_path = GObject.Property(type=str, default='') color = GObject.Property(type=bool, default=True) created_by = GObject.Property(type=GLib.strv_get_type()) episodes_number = GObject.Property(type=int, default=0) genres = GObject.Property(type=GLib.strv_get_type()) id = GObject.Property(type=str, default='') in_production = GObject.Property(type=bool, default=True) last_air_date = GObject.Property(type=str, default='') last_episode_number = GObject.Property(type=str, default='') manual = GObject.Property(type=bool, default=False) new_release = GObject.Property(type=bool, default=False) next_air_date = release_date = GObject.Property(type=str, default='') original_language = GObject.Property(type=LanguageModel) original_title = GObject.Property(type=str, default='') overview = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') recent_change = GObject.Property(type=bool, default=False) release_date = GObject.Property(type=str, default='') seasons_number = GObject.Property(type=int, default=0) seasons = GObject.Property(type=object) soon_release = GObject.Property(type=bool, default=False) status = GObject.Property(type=str, default='') tagline = GObject.Property(type=str, default='') title = GObject.Property(type=str, default='') watched = GObject.Property(type=bool, default=False) notes = GObject.Property(type=str, default='') def __init__(self, d=None, t=None): super().__init__() if d is not None: self.add_date = datetime.now() self.backdrop_path = self._download_background(d['backdrop_path']) self.created_by = self._parse_creators(api_dict=d['created_by']) self.episodes_number = d['number_of_episodes'] self.genres = self._parse_genres(api_dict=d['genres']) self.id = d['id'] self.in_production = d['in_production'] self.last_air_date = d['last_air_date'] self.last_episode_number = f"{d['last_episode_to_air']['season_number']}.{d['last_episode_to_air']['episode_number']}" self.manual = False self.new_release = False next_episode_to_air = d['next_episode_to_air'] if next_episode_to_air == None: self.next_air_date = "" else: self.next_air_date = next_episode_to_air['air_date'] self.original_language = local.LocalProvider.get_language_by_code( d['original_language']) # type: ignore self.original_title = d['original_name'] self.overview = re.sub(r'\s{2}', ' ', d['overview']) # Here the color is also set since it was easy to hook it into the poster download self.poster_path, self.color = self._download_poster( d['poster_path']) self.recent_change = False self.release_date = d['first_air_date'] self.seasons_number = d['number_of_seasons'] self.seasons = self._parse_seasons(d['seasons']) self.status = d['status'] self.tagline = d['tagline'] self.title = d['name'] self.watched = False self.activate_notification = self.in_production if self.next_air_date != '': self.soon_release = datetime.strptime( self.next_air_date, '%Y-%m-%d') < datetime.now() + timedelta(days=6) else: self.soon_release = False self.notes = '' else: self.activate_notification = t["activate_notification"] # type: ignore self.add_date = t["add_date"] # type: ignore self.backdrop_path = t["backdrop_path"] # type: ignore self.created_by = self._parse_creators( db_str=t["created_by"]) # type: ignore self.color = t["color"] # type: ignore self.episodes_number = t["episodes_number"] # type: ignore self.genres = self._parse_genres( db_str=t["genres"]) # type: ignore self.id = t["id"] # type: ignore self.in_production = t["in_production"] # type: ignore self.last_air_date = t["last_air_date"] # type: ignore self.last_episode_number = t["last_episode_number"] # type: ignore self.manual = t["manual"] # type: ignore self.new_release = t["new_release"] self.next_air_date = t["next_air_date"] self.original_language = local.LocalProvider.get_language_by_code( t["original_language"]) # type: ignore self.original_title = t["original_title"] # type: ignore self.overview = t["overview"] # type: ignore self.poster_path = t["poster_path"] # type: ignore self.recent_change = t["recent_change"] # type: ignore self.release_date = t["release_date"] # type: ignore self.seasons_number = t["seasons_number"] # type: ignore self.soon_release = t["soon_release"] # type: ignore self.status = t["status"] # type: ignore self.tagline = t["tagline"] # type: ignore self.title = t["title"] # type: ignore self.watched = t["watched"] # type: ignore if len(t) == 28: # type: ignore # TODO: increase this number every time a new field is added self.seasons = t["seasons"] # type: ignore else: self.seasons = local.LocalProvider.get_all_seasons( self.id) # type: ignore self.notes = t["notes"] # type: ignore def _parse_genres(self, api_dict: dict = {}, db_str: str = '') -> List[str]: """ Function to parse genres into a list of strings. Genres are provided by the TMDB API as a dict and are stored in the local db as a comma-separated string. Providing both arguments is an error. Args: from_api (dict): dict from TMDB API from_db (str): string from local db Returns: list of strings """ genres = [] if api_dict: for genre in api_dict: genres.append(genre['name']) return genres if db_str: return db_str.split(',') return genres def _parse_creators(self, api_dict: dict = {}, db_str: str = '') -> List[str]: """ Function to parse the creators into a list of strings. Creators are provided by the TMDB API as a dict and are stored in the local db as a comma-separated string. Providing both arguments is an error. Args: from_api (dict): dict from TMDB API from_db (str): string from local db Returns: list of strings """ creators = [] if api_dict: for creator in api_dict: creators.append(creator['name']) return creators if db_str: return db_str.split(',') return creators def _parse_seasons(self, api_dict: dict) -> List[SeasonModel]: """ Function to parse the seasons data into a list of SeasonModels. Args: api_dict (dict): dict from TMDB API Returns: list of SeasonModel """ seasons = [] for season in api_dict: seasons.append(SeasonModel(show_id=self.id, d=season)) return seasons def _download_background(self, path: str) -> str: """ Returns the uri of the background image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the background image """ if not path: return '' files = glob.glob(f'{path[1:-4]}.jpg', root_dir=shared.background_dir) if files: return f'file://{shared.background_dir}/{files[0]}' url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.background_dir}{path}', 'wb') as f: f.write(r.content) with Image.open(f'{shared.background_dir}{path}') as image: image = ( image.convert('RGB') .filter(ImageFilter.GaussianBlur(20)) ) image.save(f'{shared.background_dir}{path}', 'JPEG') return f'file://{shared.background_dir}{path}' else: return '' except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return '' def _download_poster(self, path: str) -> Tuple[str, bool]: """ Returns the uri of the poster image on the local filesystem, downloading if necessary. Args: path (str): path to dowload from Returns: str with the uri of the poster image """ if not path: return f'resource://{shared.PREFIX}/blank_poster.jpg', False files = glob.glob(f'{path[1:-4]}.jpg', root_dir=shared.poster_dir) if files: color = self._compute_badge_color(Path(f'{files[0]}')) return f'file://{shared.poster_dir}/{files[0]}', color url = f'https://image.tmdb.org/t/p/w500{path}' try: r = requests.get(url) if r.status_code == 200: with open(f'{shared.poster_dir}{path}', 'wb') as f: f.write(r.content) color = self._compute_badge_color(Path(f'{path}')) return f'file://{shared.poster_dir}{path}', color else: return f'resource://{shared.PREFIX}/blank_poster.jpg', color except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): return f'resource://{shared.PREFIX}/blank_poster.jpg', False def _compute_badge_color(self, path: str) -> bool: color_light = False im = Image.open(Path(f'{shared.poster_dir}/{path}')) box = (im.size[0]-175, 0, im.size[0], 175) region = im.crop(box) median = ImageStat.Stat(region).median if sum(median) < 3 * 128: color_light = True return color_light ticketbooth-1.1.1/src/pages/000077500000000000000000000000001475632104500157265ustar00rootroot00000000000000ticketbooth-1.1.1/src/pages/__init__.py000066400000000000000000000001251475632104500200350ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later ticketbooth-1.1.1/src/pages/details_page.py000066400000000000000000001043701475632104500207260ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging from datetime import datetime, timedelta from datetime import date from gettext import gettext as _ from gettext import ngettext from gettext import pgettext as C_ from typing import List, Tuple from gi.repository import Adw, Gio, GObject, Gtk from PIL import Image, ImageStat from .. import shared # type: ignore from ..background_queue import (ActivityType, BackgroundActivity, BackgroundQueue) from ..dialogs.add_manual_dialog import AddManualDialog from ..models.movie_model import MovieModel from ..models.season_model import SeasonModel from ..models.series_model import SeriesModel from ..models.episode_model import EpisodeModel from ..providers.local_provider import LocalProvider as local from ..providers.tmdb_provider import TMDBProvider as tmdb from ..widgets.episode_row import EpisodeRow from ..widgets.theme_switcher import ThemeSwitcher @Gtk.Template(resource_path=shared.PREFIX + '/ui/pages/details_page.ui') class DetailsView(Adw.NavigationPage): """ Widget that represents the details view. Properties: content (MovieModel or SeriesModel): content associated to the information shown Methods: None Signals: deleted: emited when the user confirms the deletion of the content edited: emited when a user confirms the edits for manually added content """ __gtype_name__ = 'DetailsView' content = GObject.Property(type=object) __gsignals__ = { 'deleted': (GObject.SIGNAL_RUN_FIRST, None, ()), 'edited': (GObject.SIGNAL_RUN_FIRST, None, ()), } _view_stack = Gtk.Template.Child() _menu_btn = Gtk.Template.Child() _background_picture = Gtk.Template.Child() _poster_picture = Gtk.Template.Child() _title_lbl = Gtk.Template.Child() _tagline_lbl = Gtk.Template.Child() _genres_lbl = Gtk.Template.Child() _chip1_lbl = Gtk.Template.Child() _chip2_lbl = Gtk.Template.Child() _chip3_lbl = Gtk.Template.Child() _chip4_lbl = Gtk.Template.Child() _watched_btn = Gtk.Template.Child() _btn_content = Gtk.Template.Child() _edit_btn = Gtk.Template.Child() _update_btn = Gtk.Template.Child() _activate_notification_btn = Gtk.Template.Child() _notification_icon = Gtk.Template.Child() _description_box = Gtk.Template.Child() _overview_lbl = Gtk.Template.Child() _creator_box = Gtk.Template.Child() _creator_lbl = Gtk.Template.Child() _seasons_box = Gtk.Template.Child() _seasons_group = Gtk.Template.Child() _additional_info_box = Gtk.Template.Child() _flow_box = Gtk.Template.Child() _loading_lbl = Gtk.Template.Child() _notes_save_btn = Gtk.Template.Child() _notes_save_revealer = Gtk.Template.Child() _notes_textview = Gtk.Template.Child() def __init__(self, content: MovieModel | SeriesModel, content_view): super().__init__() self.content_view = content_view # Theme switcher (Adapted from https://gitlab.gnome.org/tijder/blueprintgtk/) themeswitcher = ThemeSwitcher() themeswitcher.connect( 'themer-clicked', self._on_themeswitcher_clicked,) self._menu_btn.get_popover().add_child(themeswitcher, 'themeswitcher') if type(content) is MovieModel: self.content = local.get_movie_by_id(content.id) else: self.content = local.get_series_by_id(content.id) logging.info( f'Loading info [{"movie" if type(content) is MovieModel else "TV Serie"}] {self.content.title}') # type: ignore local.set_recent_change_status(self.content.id, False, type( # type: ignore content) is MovieModel) # reset recent_change since it was clicked on self.content_view.refresh_view() self.set_title(self.content.title) # type: ignore self._view_stack.set_visible_child_name('loading') if shared.schema.get_int('win-width') >= 550: self.mobile = False else: self.mobile = True self._populate_data() @Gtk.Template.Callback() def _on_breakpoint_applied(self, breakpoint: Adw.Breakpoint) -> None: """ Callback for the "applied" signal. Sets the orientation of the page based on the breakpoint. Args: breakpoint (Adw.Breakpoint): the breakpoint that was applied Returns: None """ self.mobile = True if type(self.content) is SeriesModel: self._build_seasons_group() @Gtk.Template.Callback() def _on_breakpoint_unapplied(self, breakpoint: Adw.Breakpoint) -> None: """ Callback for the "unapplied" signal. Sets the orientation of the page based on the breakpoint. Args: breakpoint (Adw.Breakpoint): the breakpoint that was unapplied Returns: None """ self.mobile = False if type(self.content) is SeriesModel: self._build_seasons_group() def _populate_data(self) -> None: """ Populates the widgets with the available information. Args: None Returns: None """ # Both movies and tv series if self.content.backdrop_path: # type: ignore if not Adw.StyleManager.get_default().get_high_contrast(): self._background_picture.set_file(Gio.File.new_for_uri( self.content.backdrop_path)) # type: ignore # type: ignore with Image.open(self.content.backdrop_path[7:]) as image: stat = ImageStat.Stat(image.convert('L')) luminance = [ min((stat.mean[0] + stat.extrema[0][0]) / 510, 0.7), max((stat.mean[0] + stat.extrema[0][1]) / 510, 0.3), ] self._background_picture.set_opacity(1 - luminance[0] if Adw.StyleManager.get_default().get_dark() else luminance[1]) self._poster_picture.set_file(Gio.File.new_for_uri( self.content.poster_path)) # type: ignore self._title_lbl.set_text(self.content.title) # type: ignore if self.content.tagline: # type: ignore self._tagline_lbl.set_visible(True) self._tagline_lbl.set_text(self.content.tagline) # type: ignore if self.content.genres: # type: ignore self._genres_lbl.set_visible(True) self._genres_lbl.set_label( ', '.join(self.content.genres)) # type: ignore if self.content.release_date: # type: ignore self._chip1_lbl.set_visible(True) self._chip1_lbl.set_text(date.fromisoformat( # type: ignore self.content.release_date).strftime('%d %b. %Y')) if self.content.manual: # type: ignore self._edit_btn.set_visible(True) else: self._update_btn.set_visible(True) if self.content.overview: # type: ignore self._description_box.set_visible(True) self._overview_lbl.set_label(self.content.overview) # type: ignore # Movie specific if type(self.content) is MovieModel: self._watched_btn.set_visible(True) if self.content.watched: self._btn_content.set_label(_('Watched')) self._btn_content.set_icon_name('check-plain') else: self._btn_content.set_label(_('Mark as Watched')) self._btn_content.set_icon_name('watchlist') if self.content.runtime: self._chip2_lbl.set_visible(True) self._chip2_lbl.set_text( self._format_runtime(self.content.runtime)) self._chip2_lbl.set_tooltip_text(_("Runtime of Movie")) if not self.content.manual and datetime.strptime(self.content.release_date, '%Y-%m-%d') > datetime.now(): self._notification_icon.set_visible(True) self._activate_notification_btn.set_visible(True) self._activate_notification_btn.set_active( local.get_notification_list_status(self.content.id, movie=True)) # TV series specific if type(self.content) is SeriesModel: if self.content.seasons_number: self._chip2_lbl.set_visible(True) # TRANSLATORS: {num} is the total number of seasons self._chip2_lbl.set_text(ngettext('{num} Season'.format(num=self.content.seasons_number), '{num} Seasons'.format( num=self.content.seasons_number), self.content.seasons_number)) self._chip2_lbl.set_tooltip_text(_("Number of Seasons")) if self.content.episodes_number: self._chip3_lbl.set_visible(True) # TRANSLATORS: {num} is the total number of episodes self._chip3_lbl.set_text(ngettext('{num} Episode'.format(num=self.content.episodes_number), '{num} Episodes'.format( num=self.content.episodes_number), self.content.episodes_number)) if self.content.next_air_date: # type: ignore self._chip4_lbl.set_visible(True) self._chip4_lbl.set_text(date.fromisoformat( # type: ignore self.content.next_air_date).strftime('%d %b. %Y')) if not self.content.manual and self.content.in_production: self._notification_icon.set_visible(True) self._activate_notification_btn.set_visible(True) self._activate_notification_btn.set_active( local.get_notification_list_status(self.content.id)) if self.content.created_by: self._creator_box.set_visible(True) self._creator_lbl.set_text(', '.join(self.content.created_by)) self._seasons_box.set_visible(True) self._build_seasons_group() self._build_flow_box() self._notes_textview.get_buffer().set_text(self.content.notes) # type: ignore self._notes_textview.get_buffer().connect( 'changed', self._on_notes_textview_changed) self._view_stack.set_visible_child_name('filled') def _build_seasons_group(self) -> None: """ Creates the widgets needed to show season and episodes metadata. Args: None Returns: None """ list_box = self._seasons_group.get_first_child().get_last_child().get_first_child() list_box.remove_all() self._episode_rows = [] for season in self.content.seasons: # type: ignore season_row = Adw.ExpanderRow(title=season.title, subtitle=ngettext('{num} Episode'.format(num=season.episodes_number), '{num} Episodes'.format( num=season.episodes_number), season.episodes_number)) poster = Gtk.Picture(height_request=112, width_request=75, content_fit=Gtk.ContentFit.FILL, margin_top=12, margin_bottom=12) poster.add_css_class('still') poster.set_file(Gio.File.new_for_uri(season.poster_path)) season_row.add_prefix(poster) button = Gtk.Button(valign=Gtk.Align.CENTER) if not self.mobile: btn_content = Adw.ButtonContent() if all(episode.watched for episode in season.episodes): btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') button.set_child(btn_content) else: if all(episode.watched for episode in season.episodes): button.set_icon_name('check-plain') else: button.set_icon_name('watchlist') season_row.add_suffix(button) tmp = [] for episode in season.episodes: episode_row = EpisodeRow(episode, small_controls=self.mobile) episode_row.connect( 'watched-clicked', self._on_episode_watch_clicked, (button, season, episode)) episode_row.add_css_class("groupcolor") season_row.add_row(episode_row) tmp.append(episode_row) self._seasons_group.add(season_row) self._episode_rows.append((season, tmp)) button.connect('clicked', self._on_season_watched_clicked, (button, season, self._episode_rows)) def _on_episode_watch_clicked(self, source: Gtk.Widget, data: Tuple[Gtk.Button, SeasonModel, EpisodeModel]) -> None: """ Callback for "watched-clicked" signal. Called after an episode is (un)marked as watched, checks and updates, if needed, the watched button for the corresponding season. Args: source (Gtk.Widget): caller widget data(tuple[Gtk.Button, SeasonModel, EpisodeModel]): tuple with the Gtk.Button to change and the SeasonModel parent of the changed episode Returns: None """ self.content = local.get_series_by_id(self.content.id) # type: ignore season_idx = 0 for idx, season in enumerate(self.content.seasons): # type: ignore if season == data[1]: season_idx = idx # compare if the episode clicked was the newest released episode if this is the case set new_release to False if (season_idx+1) == int(self.content.last_episode_number.split('.')[0]) \ and data[2].number == int(self.content.last_episode_number.split('.')[1]): local.set_new_release_status(self.content.id, False) if not self.mobile: btn_content = data[0].get_child() # type: ignore if all(episode.watched for episode in self.content.seasons[season_idx].episodes): btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') else: # type: ignore if all(episode.watched for episode in self.content.seasons[season_idx].episodes): data[0].set_icon_name('check-plain') else: data[0].set_icon_name('watchlist') # Update season status local.mark_watched_series(self.content.id, all( # type: ignore episode.watched for season in self.content.seasons for episode in season.episodes)) # type: ignore self.activate_action('win.refresh', None) def _on_season_watched_clicked(self, source: Gtk.Widget, data: Tuple[Gtk.Button, SeasonModel, List[Tuple[SeasonModel, List[EpisodeRow]]]]) -> None: """ Callback for "clicked" signal. Marks a whole season as (un)watched, making changes in the db and updating the ui. Args: source (Gtk.Widget): caller widget data (Tuple[Gtk.Button, SeasonModel, List[Tuple[SeasonModel, List[EpisodeRow]]]]): tuple with the Gtk.Button to change, the SeasonModel of the modified season, and a list of tuples of all SeasonModels and associated EpisodeRows. Returns: None """ self.content = local.get_series_by_id(self.content.id) # type: ignore season_idx = 0 for idx, season in enumerate(self.content.seasons): # type: ignore if season == data[1]: season_idx = idx episode_rows = [] for item in data[2]: if item[0] == self.content.seasons[season_idx]: # type: ignore episode_rows = item[1] # determine if we want to set all episodes to watched or to not watched if type(data[0].get_child()) is Adw.ButtonContent: set_to_watched = data[0].get_child().get_icon_name() == 'watchlist' else: set_to_watched = data[0].get_icon_name() == 'watchlist' # Make changes in db for episode in self.content.seasons[season_idx].episodes: local.mark_watched_episode( episode.id, set_to_watched) # type: ignore # if the season in which the last aired episode is in is clicked as watched remove new_release if season_idx == int(self.content.last_episode_number.split('.')[0]): local.set_new_release_status(self.content.id, False) # Update episode rows for episode_row in episode_rows: episode_row.set_watched_btn(set_to_watched) # type: ignore # Update season expander if not self.mobile: btn_content = data[0].get_child() if set_to_watched: # type: ignore btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') else: if set_to_watched: # type: ignore data[0].set_icon_name('check-plain') else: data[0].set_icon_name('watchlist') # refetch data from db since we have changed episode.watched earlier self.content = local.get_series_by_id(self.content.id) # Update season status local.mark_watched_series(self.content.id, all( episode.watched for season in self.content.seasons for episode in season.episodes)) self.activate_action('win.refresh', None) def _build_flow_box(self) -> None: """ Adds the available metadata to the 'additional information' section. Args: None Returns: None """ if self._flow_box.get_child_at_index(0): return # Both movies and tv series if self.content.status: # type: ignore box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('Status')) label.add_css_class('heading') box.append(label) box.append(Gtk.Label(label=self.content.status)) # type: ignore self._flow_box.append(box) if self.content.original_language and self.content.original_language.iso_name != 'xx': # type: ignore box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('Original Language')) label.add_css_class('heading') box.append(label) # type: ignore box.append( Gtk.Label(label=self.content.original_language.name, lines=2, wrap=True)) self._flow_box.append(box) if self.content.original_title: # type: ignore box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('Original Title')) label.add_css_class('heading') box.append(label) # type: ignore box.append( Gtk.Label(label=self.content.original_title, lines=2, wrap=True)) self._flow_box.append(box) # Movie specific if type(self.content) is MovieModel: if self.content.budget: box = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('Budget')) label.add_css_class('heading') box.append(label) box.append(Gtk.Label(label='US$ {budget:0.0f}'.format( budget=self.content.budget))) self._flow_box.append(box) if self.content.revenue: box = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('Revenue')) label.add_css_class('heading') box.append(label) box.append(Gtk.Label(label='US$ {revenue:0.0f}'.format( revenue=self.content.revenue))) self._flow_box.append(box) # TV series specific if type(self.content) is SeriesModel: box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('In Production')) label.add_css_class('heading') box.append(label) box.append(Gtk.Label(label=_('Yes') if self.content.in_production else _('No'))) self._flow_box.append(box) if self.content.id and self.content.manual == False: box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) label = Gtk.Label(label=_('TMDB ID')) label.add_css_class('heading') box.append(label) url_str = ' {id} ' \ .format(category=("tv") if type(self.content) is SeriesModel else ("movie"), id=self.content.id) box.append(Gtk.Label(label=url_str, use_markup=True)) self._flow_box.append(box) if self._flow_box.get_child_at_index(0) is None: self._additional_info_box.set_visible(False) def _format_runtime(self, runtime: str) -> str: """ Formats the runtime in hours and minutes. Args: runtime (str): runtime in minutes Returns: formatted duration string in hours and minutes """ h, m = divmod(int(runtime), 60) if h > 0: # TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively return _('{h}h {m}min').format(h=h, m=m) else: # TRANSLATORS: {m} is the runtime minutes return _('{m}min').format(m=m) @Gtk.Template.Callback('_on_watched_btn_clicked') def _on_watched_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Updates the watched flag for the content in the db and changes the button text accordingly. Args: user_data (object or None): additional data passed to the callback Returns: None """ if type(self.content) is MovieModel: local.mark_watched_movie(self.content.id, not self.content.watched) self.content.watched = not self.content.watched # type: ignore if self.content.watched: self._btn_content.set_label(_('Watched')) self._btn_content.set_icon_name('check-plain') else: self._btn_content.set_label(_('Mark as Watched')) self._btn_content.set_icon_name('watchlist') self.activate_action('win.refresh', None) @Gtk.Template.Callback('_on_edit_btn_clicked') def _on_edit_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Opens the edit window to change the metadata of the content. Available only for manually added content. Args: user_data (object or None): additional data passed to the callback Returns: None """ logging.info( f'Editing [{"movie" if type(self.content) is MovieModel else "TV Serie"}] {self.content.title}') dialog = AddManualDialog(edit_mode=True, content=self.content) dialog.connect('edit-saved', self._on_edit_saved) dialog.present(self) def _on_edit_saved(self, source: Gtk.Widget, content: MovieModel | SeriesModel) -> None: """ Callback for "edit-saved" signal. Replaces the navigation stack with an updated top page resulting in a content refresh. Args: source (Gtk.Widget): caller widget content (MovieModel or SeriesModel): updated content to show Returns: None """ root_page = self.get_ancestor( Adw.NavigationView).get_previous_page(self) self.get_ancestor(Adw.NavigationView).replace( [root_page, DetailsView(content, self.content_view)]) @Gtk.Template.Callback('_on_update_btn_clicked') def _on_update_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Adds a background activity to start a manual update. Args: user_data (object or None): additional data passed to the callback Returns: None """ self._view_stack.set_visible_child_name('loading') # TRANSLATORS: {title} is the showed content's title self._loading_lbl.set_label(_('Updating {title}').format( title=self.content.title)) # type: ignore BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.UPDATE, # TRANSLATORS: {title} is the content's title title=_('Update {title}').format(title=self.content.title), task_function=self._update), on_done=self._on_update_done) @Gtk.Template.Callback('_activate_notification_btn_toggled') def _activate_notification_btn_toggled(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Adds the series to the notification list Args: user_data (object or None): additional data passed to the callback Returns: None """ movie = type(self.content) == MovieModel local.set_notification_list_status( self.content.id, self._activate_notification_btn.get_active(), movie=movie) # if we remove the content from the notification_list then remove the new/soon_release flags and refresh the ContentView if not self._activate_notification_btn.get_active(): local.set_new_release_status(self.content.id, False, movie=movie) local.set_soon_release_status(self.content.id, False, movie=movie) self.content_view.refresh_view() else: # if we add content we check if should set the soon_release flag compare_date = self.content.release_date if movie else self.content.next_air_date # TODO make this a variable and sync with main_view.py if len(compare_date) > 0 and datetime.strptime(compare_date, '%Y-%m-%d') < datetime.now() + timedelta(days=14 if movie else 7): local.set_soon_release_status( self.content.id, True, movie=movie) self.content_view.refresh_view() def _update(self, activity: BackgroundActivity) -> None: """ Fetches updated information and updates the stored copy. Additionally it handles ui updates. Args: activity (BackgroundActivity): the calling activity Returns: None """ if type(self.content) is MovieModel: self.new_content = MovieModel(tmdb.get_movie(self.content.id)) local.update_movie(old=self.content, new=self.new_content) self.new_content = local.get_movie_by_id(self.content.id) else: self.new_content = SeriesModel(tmdb.get_serie(self.content.id)) local.update_series(old=self.content, new=self.new_content) self.new_content = local.get_series_by_id(self.content.id) def _on_update_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" root_page = self.get_ancestor( Adw.NavigationView).get_previous_page(self) self.get_ancestor(Adw.NavigationView).replace( [root_page, DetailsView(self.new_content, self.content_view)]) self._loading_lbl.set_label(_('Loading Metadata…')) self._view_stack.set_visible_child_name('filled') activity.end() @Gtk.Template.Callback('_on_delete_btn_clicked') def _on_delete_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Asks the user for a confirmation after a delete request. Args: user_data (object or None): additional data passed to the callback Returns: None """ logging.debug('Show delete dialog') # TRANSLATORS: {title} is the content's title dialog = Adw.AlertDialog.new(heading=C_('message dialog heading', 'Delete {title}?').format( title=self.content.title), # type: ignore body=C_('message dialog body', 'This title will be deleted from your watchlist.')) dialog.add_response('cancel', C_('message dialog action', '_Cancel')) dialog.add_response('delete', C_('message dialog action', '_Delete')) dialog.set_default_response('delete') dialog.set_close_response('cancel') dialog.set_response_appearance( 'delete', Adw.ResponseAppearance.DESTRUCTIVE) dialog.choose(self, None, self._on_message_dialog_choose, None) def _on_message_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the message dialog. Finishes the async operation and retrieves the user response. If the later is positive, adds a background activity to delete the content. Args: source (Gtk.Widget): object that started the async operation result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cancel': logging.debug('Delete dialog: cancel, aborting') return self.get_ancestor(Adw.NavigationView).pop() logging.debug(f'Delete dialog: confim, delete {self.content.title}') # type: ignore BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.REMOVE, # TRANSLATORS: {title} is the content's title title=_('Delete {title}').format( title=self.content.title), # type: ignore task_function=self._delete), on_done=self._on_delete_done) def _delete(self, activity: BackgroundActivity) -> None: """ Deletes the content from the db. Args: activity (BackgroundActivity): the calling activity Returns: None """ if type(self.content) is MovieModel: local.delete_movie(self.content.id) else: local.delete_series(self.content.id) # type: ignore def _on_delete_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" self.emit('deleted') activity.end() def _on_themeswitcher_clicked(self, source: Gtk.Widget) -> None: """ Callback for "themer-clicked" signal. Called after an theme is switched changes background picture if needed Args: source (Gtk.Widget): caller widget Returns: None """ if self.content.backdrop_path: # type: ignore if not Adw.StyleManager.get_default().get_high_contrast(): self._background_picture.set_file(Gio.File.new_for_uri( self.content.backdrop_path)) # type: ignore # type: ignore with Image.open(self.content.backdrop_path[7:]) as image: stat = ImageStat.Stat(image.convert('L')) luminance = [ min((stat.mean[0] + stat.extrema[0][0]) / 510, 0.7), max((stat.mean[0] + stat.extrema[0][1]) / 510, 0.3), ] self._background_picture.set_opacity(1 - luminance[0] if Adw.StyleManager.get_default().get_dark() else luminance[1]) @Gtk.Template.Callback() def _on_notes_btn_clicked(self, user_data: GObject.GPointer | None) -> None: """ Callback for the "clicked" signal. Saves the notes for the content in the db. Args: user_data (GObject.GPointer or None): additional data passed to the callback Returns: None """ notes = self._notes_textview.get_buffer().get_text( self._notes_textview.get_buffer().get_start_iter(), self._notes_textview.get_buffer().get_end_iter(), True ) if type(self.content) is MovieModel: local.update_movie_notes(self.content.id, notes) # type: ignore if type(self.content) is SeriesModel: local.update_serie_notes(self.content.id, notes) # type: ignore self._notes_save_revealer.set_reveal_child(False) self.content.notes = notes # type: ignore self.activate_action('win.refresh', None) def _on_notes_textview_changed(self, user_data: GObject.GPointer | None) -> None: """ Callback for the "changed" signal. Shows the save button. Args: user_data (GObject.GPointer or None): additional data passed to the callback Returns: None """ self._notes_save_revealer.set_reveal_child(True) ticketbooth-1.1.1/src/pages/edit_episode_page.py000066400000000000000000000073551475632104500217430ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Adw, GObject, Gtk from .. import shared # type: ignore from ..models.episode_model import EpisodeModel @Gtk.Template(resource_path=shared.PREFIX + '/ui/pages/edit_episode_page.ui') class EditEpisodeNavigationPage(Adw.NavigationPage): """ This class represents the 'edit episode' NavigationPane. Properties: None Methods: None Signals: edit-saved (title: str, episode_number: int, runtime: int, overview: str, still_uri: str): emited when the user clicks the save button """ __gtype_name__ = 'EditEpisodeNavigationPage' _still = Gtk.Template.Child() _episode_spin_row = Gtk.Template.Child() _title_entry = Gtk.Template.Child() _runtime_spin_row = Gtk.Template.Child() _overview_text = Gtk.Template.Child() __gsignals__ = { 'edit-saved': (GObject.SIGNAL_RUN_LAST, None, (str, int, int, str, str, bool,)), } def __init__(self, title: str = '', episode_number: int = 0, runtime: int = 0, overview: str = '', still_uri: str = f'resource://{shared.PREFIX}/blank_still.jpg', watched: bool = False): super().__init__() self._title = title self._episode_number = episode_number self._runtime = runtime self._overview = overview self._still_uri = still_uri self._watched = watched @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Sets the fields/still image to the provided values Args: user_data (object or None): user data passed to the callback. Returns: None """ self._overview_text.remove_css_class('view') self._title_entry.set_text(self._title) self._runtime_spin_row.set_value(self._runtime) self._still.set_blank_image(f'resource://{shared.PREFIX}/blank_still.jpg') if self._still_uri.startswith('file'): self._still.set_image(self._still_uri) self._overview_text.get_buffer().set_text(self._overview, -1) self._episode_spin_row.set_value(self._episode_number) self._title_entry.grab_focus() @Gtk.Template.Callback('_enable_save') def _enable_save(self, source: Gtk.Widget, title: str, episode_number: int) -> bool: """ Closure to determine if the 'save' button should be enabled or not. Args: source (Gtk.Widget): caller widget title (str): title text episode_number (int): episode number Returns: bool """ return True if title and episode_number > 0 else False @Gtk.Template.Callback('_on_save_btn_clicked') def _on_save_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Emits the "edit-saved" signal and pops the NavigationPage. Args: user_data (object or None): user data passed to the callback. Returns: None """ buffer = self._overview_text.get_buffer() start_iter = buffer.get_start_iter() end_iter = buffer.get_end_iter() overview = buffer.get_text(start_iter, end_iter, False) title = self._title_entry.get_text() episode_number = int(self._episode_spin_row.get_value()) runtime = int(self._runtime_spin_row.get_value()) still_uri = self._still.get_uri() self.emit('edit-saved', title, episode_number, runtime, overview, still_uri, self._watched) self.get_ancestor(Adw.NavigationView).pop() ticketbooth-1.1.1/src/pages/meson.build000066400000000000000000000005351475632104500200730ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) pagesdir = join_paths(pkgdatadir, 'src/pages') sources = [ '__init__.py', 'details_page.py', 'edit_episode_page.py', ] install_data(sources, install_dir: pagesdir) ticketbooth-1.1.1/src/preferences.py000066400000000000000000000506621475632104500175130ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import logging import os from gettext import gettext as _ from gettext import pgettext as C_ from pathlib import Path import tmdbsimple from gi.repository import Adw, Gio, GLib, GObject, Gtk from requests import HTTPError from . import shared # type: ignore from .background_queue import ActivityType, BackgroundActivity, BackgroundQueue from .models.language_model import LanguageModel from .providers.local_provider import LocalProvider as local from .providers.tmdb_provider import TMDBProvider as tmdb @Gtk.Template(resource_path=shared.PREFIX + '/ui/preferences.ui') class PreferencesDialog(Adw.PreferencesDialog): __gtype_name__ = 'PreferencesDialog' _download_group = Gtk.Template.Child() _language_comborow = Gtk.Template.Child() _language_model = Gtk.Template.Child() _update_freq_comborow = Gtk.Template.Child() _offline_group = Gtk.Template.Child() _offline_switch = Gtk.Template.Child() _tmdb_group = Gtk.Template.Child() _use_own_key_switch = Gtk.Template.Child() _own_key_entryrow = Gtk.Template.Child() _housekeeping_group = Gtk.Template.Child() _exit_cache_switch = Gtk.Template.Child() _cache_row = Gtk.Template.Child() _data_row = Gtk.Template.Child() def __init__(self): super().__init__() self.language_change_handler = self._language_comborow.connect( 'notify::selected', self._on_language_changed) self._update_freq_comborow.connect( 'notify::selected', self._on_freq_changed) shared.schema.bind('onboard-complete', self._offline_group, 'sensitive', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('onboard-complete', self._download_group, 'visible', Gio.SettingsBindFlags.INVERT_BOOLEAN) shared.schema.bind('onboard-complete', self._tmdb_group, 'sensitive', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('offline-mode', self._offline_switch, 'active', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('use-own-tmdb-key', self._use_own_key_switch, 'active', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('exit-remove-cache', self._exit_cache_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self._offline_switch.connect('notify::active', lambda pspec, user_data: logging.debug( f'Toggled offline mode: {self._offline_switch.get_active()}')) self._use_own_key_switch.connect( 'notify::active', self._on_use_own_key_switch_activated) self._exit_cache_switch.connect('notify::active', lambda pspec, user_data: logging.debug( f'Toggled clear cache on exit: {self._exit_cache_switch.get_active()}')) @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for the "map" signal. Populates dropdowns and checks if an automatic update of the content is due. Args: user_data (object or None): user data passed to the callback. Returns: None """ if shared.schema.get_boolean('onboard-complete'): self._setup_languages() # Update frequency dropdown match shared.schema.get_string('update-freq'): case 'never': self._update_freq_comborow.set_selected(0) case 'day': self._update_freq_comborow.set_selected(1) case 'week': self._update_freq_comborow.set_selected(2) case 'month': self._update_freq_comborow.set_selected(3) self._own_key_entryrow.set_text( shared.schema.get_string('own-tmdb-key')) # Update occupied space self._update_occupied_space() def _setup_languages(self): self._language_comborow.handler_block(self.language_change_handler) languages = local.get_all_languages() languages.pop(len(languages)-6) # remove 'no language' for language in languages: self._language_model.append(language.name) self._language_comborow.set_selected( self._get_selected_language_index(shared.schema.get_string('tmdb-lang'))) self._language_comborow.handler_unblock(self.language_change_handler) def _on_language_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for "notify::selected" signal. Updates the prefered TMDB language in GSettings. Args: pspec (GObject.ParamSpec): The GParamSpec of the property which changed user_data (object or None): additional data passed to the callback Returns: None """ language = self._get_selected_language( self._language_comborow.get_selected_item().get_string()) shared.schema.set_string('tmdb-lang', language) logging.debug(f'Changed TMDB language to {language}') def _on_freq_changed(self, pspec, user_data: object | None) -> None: """ Callback for "notify::selected" signal. Updates the frequency for content updates in GSettings. Args: pspec (GObject.ParamSpec): The GParamSpec of the property which changed user_data (object or None): additional data passed to the callback Returns: None """ freq = self._update_freq_comborow.get_selected() match freq: case 0: shared.schema.set_string('update-freq', 'never') logging.debug(f'Changed update frequency to never') case 1: shared.schema.set_string('update-freq', 'day') logging.debug(f'Changed update frequency to day') case 2: shared.schema.set_string('update-freq', 'week') logging.debug(f'Changed update frequency to week') case 3: shared.schema.set_string('update-freq', 'month') logging.debug(f'Changed update frequency to month') def _get_selected_language_index(self, iso_name: str) -> int: """ Loops all available languages and returns the index of the one with the specified iso name. If a result is not found, it returns the index for English (37). Args: iso_name: a language's iso name Return: int with the index """ for idx, language in enumerate(local.get_all_languages()): if language.iso_name == iso_name: return idx return 37 def _get_selected_language(self, name: str) -> str: """ Loops all available languages and returns the iso name of the one with the specified name. If a result is not found, it returns the iso name for English (en). Args: name: a language's name Return: str with the iso name """ for language in local.get_all_languages(): if language.name == name: return language.iso_name return 'en' @Gtk.Template.Callback('_on_download_activate') def _on_download_activate(self, user_data: object | None) -> None: """ Completes the downlaod, stores the data in the db and sets the relevant GSettings. Args: None Results: None """ logging.info('Attempting first setup completetion') Gio.NetworkMonitor.get_default().can_reach_async( Gio.NetworkAddress.parse_uri('https://api.themoviedb.org', 80), None, self._on_reach_done, None ) def _on_reach_done(self, source: GObject.Object | None, result: Gio.AsyncResult, data: object | None) -> None: """ Callback for asynchronous network check, reached after the first call. If the network is available, proced with the download, otherwise keep checking every second until it becomes available or the user goes in offline mode. Args: source (GObject.Object or None): the object the asynchronous operation was started with. result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): user data passed to the callback. Returns: None """ try: network = Gio.NetworkMonitor.get_default().can_reach_finish(result) except GLib.Error: network = None if network: logging.error('Network ok, start download') languages = tmdb.get_languages() for lang in languages: local.add_language(LanguageModel(lang)) local.update_movies_table() local.update_series_table() shared.schema.set_boolean('first-run', False) shared.schema.set_boolean('offline-mode', False) shared.schema.set_boolean('onboard-complete', True) shared.schema.set_boolean('db-needs-update', False) self._setup_languages() Gio.NetworkMonitor.get_default().connect( 'network-changed', self._on_network_changed) else: logging.error('No network, aborting first setup completion') dialog = Adw.AlertDialog.new( heading=C_('message dialog heading', 'No Network'), body=C_('message dialog body', 'Connect to the Internet to complete the setup.') ) dialog.add_response('ok', C_('alert dialog action', '_OK')) dialog.choose(self, None, None, None) def _on_network_changed(self, network_monitor: Gio.NetworkMonitor, network_available: bool) -> None: """ Callback for "network-changed" signal. If no network is available, it turns on offline mode. Args: network_monitor (Gio.NetworkMonitor): the NetworkMonitor in use network_available (bool): whether or not the network is available Returns: None """ shared.schema.set_boolean( 'offline-mode', GLib.Variant.new_boolean(not network_available)) @Gtk.Template.Callback('_on_clear_cache_activate') def _on_clear_cache_activate(self, user_data: object | None) -> None: """ Callback for "activated" signal. Shows a confirmation dialog to the user. Args: user_data (object or None): additional data passed to the callback Returns: None """ logging.debug('Show cache clear dialog') builder = Gtk.Builder.new_from_resource( shared.PREFIX + '/ui/dialogs/message_dialogs.ui') _clear_cache_dialog = builder.get_object('_clear_cache_dialog') _clear_cache_dialog.choose(self, None, self._on_cache_message_dialog_choose, None) def _on_cache_message_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the message dialog. Finishes the async operation and retrieves the user response. If the later is positive, adds a background activity to delete the cache. Args: source (Gtk.Widget): object that started the async operation result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cache_cancel': logging.debug('Cache clear dialog: cancel, aborting') return logging.debug('Cache clear dialog: sel, aborting') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.REMOVE, title=C_('Background activity title', 'Clear cache'), task_function=self._clear_cache), on_done=self._on_cache_clear_done) def _clear_cache(self, activity: BackgroundActivity) -> None: """ Clears the cache. Args: activity (BackgroundActivity): the calling activity Returns: None """ logging.info('Deleting cache') files = glob.glob('*.jpg', root_dir=shared.cache_dir) for file in files: os.remove(shared.cache_dir / file) logging.debug(f'Deleted {shared.cache_dir / file}') def _on_cache_clear_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): self._update_occupied_space() activity.end() @Gtk.Template.Callback('_on_clear_activate') def _on_clear_btn_clicked(self, user_data: object | None) -> None: """ Callback for "activated" signal. Shows a confirmation dialog to the user. Args: user_data (object or None): additional data passed to the callback Returns: None """ logging.debug('Show data clear dialog') builder = Gtk.Builder.new_from_resource( shared.PREFIX + '/ui/dialogs/message_dialogs.ui') _clear_data_dialog = builder.get_object('_clear_data_dialog') _movies_row = builder.get_object('_movies_row') _series_row = builder.get_object('_series_row') self._movies_checkbtn = builder.get_object('_movies_checkbtn') self._series_checkbtn = builder.get_object('_series_checkbtn') # TRANSLATORS: {number} is the number of titles _movies_row.set_subtitle(_('{number} Titles').format( number=len(local.get_all_movies()))) _series_row.set_subtitle(_('{number} Titles').format( number=len(local.get_all_series()))) _clear_data_dialog.choose(self, None, self._on_data_message_dialog_choose, None) def _on_data_message_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the message dialog. Finishes the async operation and retrieves the user response. If the later is positive, adds background activities to delete the selected data. Args: source (Gtk.Widget): object that started the async operation result (Gio.AsyncResult): a Gio.AsyncResultresult = Adw.AlertDialog.choose_finish(source, result) if result == 'data_cancel': return user_data (object or None): additional data passed to the callback Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'data_cancel': logging.debug('Data clear dialog: cancel, aborting') return # Movies if self._movies_checkbtn.get_active(): logging.debug('Data clear dialog: movies selected') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.REMOVE, title=C_('Background activity title', 'Delete all movies'), task_function=self._clear_movies), on_done=self._on_data_clear_done) # TV Series if self._series_checkbtn.get_active(): logging.debug('Data clear dialog: tv series selected') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.REMOVE, title=C_('Background activity title', 'Delete all TV Series'), task_function=self._clear_series), on_done=self._on_data_clear_done) def _clear_movies(self, activity: BackgroundActivity) -> None: """ Clears all movies. Args: activity (BackgroundActivity): the calling activity Returns: None """ logging.info('Deleting all movies') for movie in local.get_all_movies(): # type: ignore local.delete_movie(movie.id) logging.debug(f'Deleted ({movie.id}) {movie.title}') def _on_data_clear_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" self._update_occupied_space() self.get_parent().activate_action('win.refresh', None) activity.end() def _clear_series(self, activity: BackgroundActivity) -> None: """ Clears all TV series. Args: activity (BackgroundActivity): the calling activity Returns: None """ logging.info('Deleting all TV series') for serie in local.get_all_series(): # type: ignore local.delete_series(serie.id) logging.debug(f'Deleted ({serie.id}) {serie.title}') def _calculate_space(self, directory: Path) -> float: """ Given a directory, calculates the total space occupied on disk. Args: directory (Path): the directory to measure Returns: float with space occupied in MegaBytes (MB) """ return sum(file.stat().st_size for file in directory.rglob('*'))/1024.0/1024.0 def _update_occupied_space(self) -> None: """ After calculating space occupied by cache and data, updates the ui labels to reflect the values. Args: None Returns: None """ cache_space = self._calculate_space(shared.cache_dir) data_space = self._calculate_space(shared.data_dir) self._housekeeping_group.set_description( # TRANSLATORS: {total_space:.2f} is the total occupied space _('Ticket Booth is currently using {total_space:.2f} MB. Use the options below to free some space.').format(total_space=cache_space+data_space)) # TRANSLATORS: {space:.2f} is the occupied space self._cache_row.set_subtitle( _('{space:.2f} MB occupied').format(space=cache_space)) self._data_row.set_subtitle( _('{space:.2f} MB occupied').format(space=data_space)) @Gtk.Template.Callback('_on_own_key_changed') def _on_own_key_changed(self, user_data: object | None) -> None: """ Callback for 'changed' signal. Removes all CSS classes. Args: user_data (object or None): additional data passed to the callback Returns: None """ self._own_key_entryrow.remove_css_class('error') self._own_key_entryrow.remove_css_class('success') @Gtk.Template.Callback('_on_check_own_key_button_clicked') def _on_check_own_key_button_clicked(self, user_data: object | None) -> None: """ Callback for 'clicked' signal. Temporarelly changes the API key in use with the one provided and checks if it is valid. Args: user_data (object or None): additional data passed to the callback Returns: None """ tmdb.set_key(self._own_key_entryrow.get_text()) try: tmdb.get_movie(575264) shared.schema.set_string( 'own-tmdb-key', self._own_key_entryrow.get_text()) self._own_key_entryrow.add_css_class('success') except (tmdbsimple.base.APIKeyError, HTTPError): self._own_key_entryrow.add_css_class('error') tmdb.set_key(tmdb.get_builtin_key()) def _on_use_own_key_switch_activated(self, pspec, user_data: object | None) -> None: """ Callback for 'notify::active' signal. Sets the API key is use based on the state of the property. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ if self._use_own_key_switch.get_active(): tmdb.set_key(self._own_key_entryrow.get_text()) else: tmdb.set_key(tmdb.get_builtin_key()) ticketbooth-1.1.1/src/providers/000077500000000000000000000000001475632104500166445ustar00rootroot00000000000000ticketbooth-1.1.1/src/providers/__init__.py000066400000000000000000000001251475632104500207530ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later ticketbooth-1.1.1/src/providers/local_provider.py000066400000000000000000002226021475632104500222260ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging import os import shutil import sqlite3 import zipfile import shutil import json from typing import List, Dict, Any from pathlib import Path from PIL import Image, ImageStat from datetime import datetime, timedelta from .. import shared # type: ignore from ..models.episode_model import EpisodeModel from ..models.language_model import LanguageModel from ..models.movie_model import MovieModel from ..models.season_model import SeasonModel from ..models.series_model import SeriesModel from ..providers.tmdb_provider import TMDBProvider as tmdb class LocalProvider: """ This class provides methods to interface with the local db. Properties: None Methods: create_movies_table(): Creates the table used to store movie details in a local database create_series_table(): Creates the table used to store tv series details in a local database create_languages_table(): Creates the table used to store the available languages in a local database create_tables(): Convenience method to create all tables with a single call update_series_table(): Checks for missing and adds new columns to the database add_language(language: LanguageModel): Inserts the provided LanguageModel in the languages table add_movie(id: int, movie: MovieModel): Inserts a movie in the movies table, querying the data from TMDB if only id is provided. add_series(id: int, serie: SeriesModel): Inserts a tv series in the series table, querying the data from TMDB if only id is provided. add_content(id: int, media_type: str): Convenience method to add movies and series from TMDB without using separate methods get_language_by_code(iso_code: str): Retrieves a language from the db via its iso_639_1 code. get_movie_by_id(id: str): Retrieves a movie from the db via its id get_all_movies(): Retrieves all movies from the db mark_watched_movie(id: str, status: bool): Sets the watched flag on the movie with the provided id. delete_movie(id: str): Deletes the movie with the provided id, removing associated files too. get_all_seasons(show: str): Retrieves metadata for all seasons of a show. get_season_episodes(show: str, season_number: int): Retrieves the episodes for a season of a show get_series_by_id(id: str): Retrieves the series with the provided id. get_all_series(): Retrieves all tv series from the db. mark_watched_series(id: str, watched: bool): Sets the watched flag on all episodes in the series and the series itself. delete_series(id: str): Deletes the tv series with the provided id, removing associated files too. get_all_languages(): Retrieves all languages from the db. get_next_manual_movie(): Calculates the next id for a manually added movie. get_next_manual_series(): Calculates the next id for a manually added tv series. get_next_manual_season(): Calculates the next id for a manually added season. get_next_manual_episode(): Calculates the next id for a manually added episode. get_language_by_name(name: str): Retrieves a language from the db via its name. update_movie(old: MovieModel, new: MovieModel): Updates a movie with new data. mark_watched_episode(id: str, watched: bool): Sets the watched flag on the specified episode. get_episode_by_id(id: str): Retrieves an episode from the db via its id. set_notification_list_status(id: int, value: bool): Sets the activate_notification field of the given content to value get_notification_list_status(id: int): Returns if the content given by the id is on the notification list set_new_release_status(id: int, value: bool): Sets the new_release field of the given content to value get_new_release_status(id: int): Returns if the content given by the id has had a new release set_soon_release_status(id: int, value: bool): Sets the soon_release field of the given content to value get_soon_release_status(id: int): Returns if the content given by the id has a new release soon export_data(path: Path): Exports the database a zip archive to the given path """ @staticmethod def create_movies_table() -> None: """ Creates the table used to store movie details in a local database. Args: None Returns: None """ with sqlite3.connect(shared.db) as connection: logging.debug('[db] Create movie table') sql = """CREATE TABLE IF NOT EXISTS movies ( activate_notification BOOLEAN, add_date TEXT, backdrop_path TEXT, budget INTEGER, color BOOLEAN, genres TEXT, id TEXT PRIMARY KEY, manual BOOLEAN, notes TEXT, new_release BOOLEAN, original_language TEXT, original_title TEXT, overview TEXT, poster_path TEXT, recent_change BOOLEAN, release_date TEXT, revenue INTEGER, runtime INTEGER, soon_release BOOLEAN, status TEXT, tagline TEXT, title TEXT, watched BOOLEAN, FOREIGN KEY (original_language) REFERENCES languages (iso_639_1) );""" connection.cursor().execute(sql) connection.commit() @staticmethod def create_series_table() -> None: """ Creates the table used to store tv series details in a local database. Args: None Returns: None """ with sqlite3.connect(shared.db) as connection: logging.debug('[db] Create series, seasons, and episodes tables') series_sql = """CREATE TABLE IF NOT EXISTS series ( add_date TEXT, backdrop_path TEXT, color BOOLEAN, created_by TEXT, episodes_number INT, genres TEXT, id TEXT PRIMARY KEY, in_production BOOLEAN, last_air_date TEXT, last_episode_number TEXT, manual BOOLEAN, next_air_date TEXT, new_release BOOLEAN, notes TEXT, original_language TEXT, original_title TEXT, overview TEXT, poster_path TEXT, recent_change BOOLEAN, release_date TEXT, seasons_number INT, soon_release BOOLEAN, status TEXT, tagline TEXT, title TEXT, watched BOOLEAN, activate_notification BOOLEAN, FOREIGN KEY (original_language) REFERENCES languages (iso_639_1) );""" seasons_sql = """CREATE TABLE IF NOT EXISTS seasons ( episodes_number INTEGER, id TEXT PRIMARY KEY, number INTEGER, overview TEXT, poster_path TEXT, title TEXT, show_id INTERGER, FOREIGN KEY (show_id) REFERENCES series (id) ON DELETE CASCADE );""" episodes_sql = """CREATE TABLE IF NOT EXISTS episodes ( id TEXT PRIMARY KEY, number INTEGER, overview TEXT, runtime INTEGER, season_number INTEGER, show_id INTEGER, still_path TEXT, title TEXT, watched BOOLEAN, FOREIGN KEY (show_id) REFERENCES series (id) ON DELETE CASCADE );""" connection.cursor().execute(series_sql) connection.cursor().execute(seasons_sql) connection.cursor().execute(episodes_sql) connection.commit() @staticmethod def update_series_table() -> None: """ Update the series table to add new data needed for notifications Args: None Returns: None """ with sqlite3.connect(shared.db) as connection: sql = """pragma table_info(series)""" result = connection.cursor().execute(sql).fetchall() if not any(item[1] == "notes" for item in result): sql = """ALTER TABLE series ADD notes TEXT DEFAULT '';""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "last_air_date" for item in result): sql = """ALTER TABLE series ADD last_air_date TEXT DEFAULT '';""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "color" for item in result): sql = """ALTER TABLE series ADD color BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "new_release" for item in result): sql = """ALTER TABLE series ADD new_release BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "recent_change" for item in result): sql = """ALTER TABLE series ADD recent_change BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "next_air_date" for item in result): sql = """ALTER TABLE series ADD next_air_date TEXT DEFAULT '';""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "soon_release" for item in result): sql = """ALTER TABLE series ADD soon_release BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "activate_notification" for item in result): sql = """ALTER TABLE series ADD activate_notification BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "last_episode_number" for item in result): sql = """ALTER TABLE series ADD last_episode_number TEXT DEFAULT ('');""" connection.cursor().execute(sql) connection.commit() connection.cursor().close() sql = """SELECT * FROM series;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql) connection.cursor().close() for entry in result: backdrop = entry["backdrop_path"] poster = entry["poster_path"] new_watched = (all(episode.watched for season in LocalProvider.get_all_seasons( entry["id"]) for episode in season.episodes)) if shared.DEBUG: # if we are in debug build we add Devel to the path, this way we can copy release databases to the debug build to test. backdrop = backdrop.replace(".Devel", '') poster = poster.replace(".Devel", '') index = poster.find("/data") if index > 0: if shared.DEBUG: backdrop = backdrop[:index] + \ ".Devel" + backdrop[index:] poster = poster[:index] + ".Devel" + poster[index:] color = LocalProvider.compute_badge_color(Path(poster[7:])) else: color = False activate_notification = entry["in_production"] sql = """UPDATE series SET activate_notification = ?, backdrop_path = ?, poster_path = ?, color = ?, watched = ? WHERE id = ?;""" result = connection.cursor().execute(sql, ( activate_notification, backdrop, poster, color, new_watched, entry["id"], )) connection.commit() @staticmethod def update_movies_table() -> None: with sqlite3.connect(shared.db) as connection: sql = """pragma table_info(movies)""" result = connection.cursor().execute(sql).fetchall() if not any(item[1] == "notes" for item in result): sql = """ALTER TABLE movies ADD notes TEXT DEFAULT '';""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "color" for item in result): sql = """ALTER TABLE movies ADD color BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "recent_change" for item in result): sql = """ALTER TABLE movies ADD recent_change BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "activate_notification" for item in result): sql = """ALTER TABLE movies ADD activate_notification BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "new_release" for item in result): sql = """ALTER TABLE movies ADD new_release BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() if not any(item[1] == "soon_release" for item in result): sql = """ALTER TABLE movies ADD soon_release BOOLEAN DEFAULT (0);""" connection.cursor().execute(sql) connection.commit() sql = """SELECT * FROM movies;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql) connection.cursor().close() for entry in result: backdrop = entry["backdrop_path"] poster = entry["poster_path"] if shared.DEBUG: backdrop = backdrop.replace(".Devel", '') poster = poster.replace(".Devel", '') index = backdrop.find("/data") if index > 0: if shared.DEBUG: backdrop = backdrop[:index] + \ ".Devel" + backdrop[index:] poster = poster[:index] + ".Devel" + poster[index:] color = LocalProvider.compute_badge_color(Path(poster[7:])) else: color = False if entry["release_date"]: activate_notification = datetime.strptime( entry["release_date"], '%Y-%m-%d') > datetime.now() else: activate_notification = False sql = """UPDATE movies SET activate_notification = ?, backdrop_path = ?, poster_path = ?, color = ? WHERE id = ?;""" result = connection.cursor().execute(sql, ( activate_notification, backdrop, poster, color, entry["id"],)) connection.commit() @staticmethod def compute_badge_color(poster_path: Path) -> bool: im = Image.open(poster_path) box = (im.size[0]-175, 0, im.size[0], 175) region = im.crop(box) median = ImageStat.Stat(region).median if sum(median) < 3 * 128: return True else: return False @staticmethod def create_languages_table() -> None: """ Creates the table used to store the available languages in a local database. Not implemented yet. Args: None Returns: None """ with sqlite3.connect(shared.db) as connection: logging.debug('[db] Create languages table') sql = """CREATE TABLE IF NOT EXISTS languages ( iso_639_1 TEXT PRIMARY KEY, name TEXT NOT NULL );""" connection.cursor().execute(sql) connection.commit() @staticmethod def create_tables() -> None: """ Convenience method to create all tables with a single call. Args: None Returns: None """ LocalProvider.create_movies_table() LocalProvider.create_series_table() LocalProvider.create_languages_table() @staticmethod def add_language(language: LanguageModel) -> int | None: """ Inserts the provided LanguageModel in the languages table. Args: language: a LanguageModel to insert Returns: lastrowid: int or None containing the id of the last inserted row """ with sqlite3.connect(shared.db) as connection: sql = 'INSERT INTO languages VALUES (?,?);' result = connection.cursor().execute(sql, (language.iso_name, language.name)) connection.commit() logging.debug(f'[db] Add {language.name}: {result.lastrowid}') return result.lastrowid @staticmethod def add_movie(id: int = 0, movie: MovieModel | None = None) -> int | None: """ Inserts a movie in the movies table, querying the data from TMDB if only id is provided. Args: id (int): tmdb id to query movie (MovieModel or None): movie to add Returns: int or None containing the id of the last inserted row """ if not movie: movie = MovieModel(tmdb.get_movie(id)) with sqlite3.connect(shared.db) as connection: sql = """INSERT INTO movies ( activate_notification, add_date, backdrop_path, budget, color, genres, id, manual, new_release, original_language, original_title, overview, poster_path, recent_change, release_date, revenue, runtime, soon_release, status, tagline, title, watched, notes ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);""" result = connection.cursor().execute(sql, ( movie.activate_notification, movie.add_date, movie.backdrop_path, movie.budget, movie.color, ','.join(movie.genres), movie.id, movie.manual, movie.new_release, movie.original_language.iso_name, # type: ignore movie.original_title, movie.overview, movie.poster_path, movie.recent_change, movie.release_date, movie.revenue, movie.runtime, movie.soon_release, movie.status, movie.tagline, movie.title, movie.watched, movie.notes, )) connection.commit() logging.debug( f'[db] Add {movie.title}, {movie.release_date}: {result.lastrowid}') return result.lastrowid @staticmethod def add_series(id: int = 0, serie: SeriesModel | None = None) -> int | None: """ Inserts a tv series in the series table, querying the data from TMDB if only id is provided. Args: id (int): tmdb id to query serie (SeriesModel or None): tv series to add Returns: int or None containing the id of the last inserted row """ if not serie: serie = SeriesModel(tmdb.get_serie(id)) with sqlite3.connect(shared.db) as connection: sql = """INSERT INTO series ( activate_notification, add_date, backdrop_path, color, created_by, episodes_number, genres, id, in_production, last_air_date, last_episode_number, manual, next_air_date, new_release, original_language, original_title, overview, poster_path, recent_change, release_date, seasons_number, soon_release, status, tagline, title, watched, notes ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);""" result = connection.cursor().execute(sql, ( serie.activate_notification, serie.add_date, serie.backdrop_path, serie.color, ','.join(serie.created_by), serie.episodes_number, ','.join(serie.genres), serie.id, serie.in_production, serie.last_air_date, serie.last_episode_number, serie.manual, serie.next_air_date, serie.new_release, serie.original_language.iso_name, # type: ignore serie.original_title, serie.overview, serie.poster_path, serie.recent_change, serie.release_date, serie.seasons_number, serie.soon_release, serie.status, serie.tagline, serie.title, serie.watched, serie.notes, )) for season in serie.seasons: sql = 'INSERT INTO seasons VALUES (?,?,?,?,?,?,?);' connection.cursor().execute(sql, ( season.episodes_number, season.id, season.number, season.overview, season.poster_path, season.title, season.show_id )) for episode in season.episodes: sql = 'INSERT INTO episodes VALUES (?,?,?,?,?,?,?,?,?);' connection.cursor().execute(sql, ( episode.id, episode.number, episode.overview, episode.runtime, episode.season_number, episode.show_id, episode.still_path, episode.title, episode.watched )) connection.commit() connection.cursor().close() logging.debug( f'[db] Add {serie.title}, {serie.release_date}: {result.lastrowid}') return result.lastrowid @staticmethod def add_content(id: int, media_type: str) -> int | None: """ Convenience method to add movies and series from TDMB without using separate methods. Args: id (int): id of the content media_type (str): content's media type Returns: int or None containing the id of the last inserted row """ if media_type == 'movie': return LocalProvider.add_movie(id) else: return LocalProvider.add_series(id) @staticmethod def get_language_by_code(iso_code: str) -> LanguageModel | None: """ Retrieves a language from the db via its iso_639_1 code. Args: iso_code (str): iso_639_1 code of the language to look for Returns: LanguageModel of the requested language or None if not found in db """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM languages WHERE iso_639_1 = ?""" result = connection.cursor().execute(sql, (iso_code,)).fetchone() if result: language = LanguageModel(t=result) logging.debug( f'[db] Get language by code {iso_code}: {language.name}') return language else: logging.error(f'[db] Get language by code {iso_code}: {None}') return None @staticmethod def get_movie_by_id(id: str) -> MovieModel | None: """ Retrieves a movie from the db via its id. Args: id (str): id of the movie to look for Returns: MovieModel of the requested movie or None if not found in db """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM movies WHERE id = ?;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql, (id,)).fetchone() if result: movie = MovieModel(t=result) logging.debug( f'[db] Get movie id {id}: {movie.title}, {movie.release_date}') return movie else: logging.error(f'[db] Get movie id {id}: None') return None @staticmethod def get_all_movies() -> List[MovieModel]: """ Retrieves all movies from the db. Args: None Returns: List of MovieModel or None """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM movies;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql).fetchall() if result: logging.debug(f'[db] Get all movies: {result}') movies = [] for movie in result: movies.append(MovieModel(t=movie)) return movies else: logging.debug(f'[db] Get all movies: {[]}') return [] @staticmethod def mark_watched_movie(id: int, watched: bool) -> int | None: """ Sets the watched flag on the movie with the provided id. Args: id (str): movie id to change watched (bool): status to set the flag to Returns: int or None containing the id of the last modified row """ if watched: LocalProvider.set_new_release_status(id, False, movie=True) LocalProvider.set_soon_release_status(id, False, movie=True) with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET watched = ? WHERE id = ?""" result = connection.cursor().execute(sql, (watched, id,)) connection.commit() logging.debug( f'[db] Mark movie {id} watched {watched}: {result.lastrowid}') return result.lastrowid @staticmethod def delete_movie(id: str) -> int | None: """ Deletes the movie with the provided id, removing associated files too. Args: id (str): movie id to delete Returns: int or None containing the id of the last modified row """ logging.debug(f'[db] Movie {id}, delete requested') movie = LocalProvider.get_movie_by_id(id) if movie.backdrop_path.startswith('file'): # type: ignore os.remove(movie.backdrop_path[7:]) # type: ignore logging.debug(f'[db] Movie {id}, deleted backdrop') if movie.poster_path.startswith('file'): # type: ignore os.remove(movie.poster_path[7:]) # type: ignore logging.debug(f'[db] Movie {id}, deleted poster') with sqlite3.connect(shared.db) as connection: sql = """DELETE FROM movies WHERE id = ?""" result = connection.cursor().execute(sql, (id,)) connection.commit() logging.debug(f'[db] Movie {id}, deleted: {result.lastrowid}') return result.lastrowid @staticmethod def get_all_seasons(show: str) -> List[SeasonModel]: """ Retrieves metadata for all seasons of a show. Args: show (str): id of the show Returns: list of SeasonModel """ seasons = [] with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM seasons WHERE show_id = ? ORDER BY number;""" results = connection.cursor().execute(sql, (show,)).fetchall() if results: logging.debug(f'[db] Get all seasons: {results}') for result in results: seasons.append(SeasonModel(t=result)) else: logging.debug(f'[db] Get all seasons: {[]}') return seasons @staticmethod def get_season_episodes(show: str, season_num: int) -> List[EpisodeModel]: """ Retrieves the episodes for a season of a show. Args: show (str): id of the show season_num (int): season number Returns: list of EpisodeModel """ episodes = [] with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM episodes WHERE show_id = ? AND season_number = ? ORDER BY number;""" results = connection.cursor().execute(sql, (show, season_num,)).fetchall() if results: logging.debug( f'[db] Get show {show} season {season_num}: {results}') for result in results: episodes.append(EpisodeModel(t=result)) else: logging.debug( f'[db] Get show {show} season {season_num}: {[]}') return episodes @staticmethod def get_series_by_id(id: str) -> SeriesModel | None: """ Retrieves the series with the provided id. Args: id (str): id of the series to retrieve Returns: SeriesModel for the requested series or None """ with sqlite3.connect(shared.db) as connection: connection.row_factory = sqlite3.Row sql = 'SELECT * FROM series WHERE id=?;' result = connection.cursor().execute(sql, (id,)).fetchone() if result: serie = SeriesModel(t=result) logging.debug( f'[db] Get tv serie id {id}: {serie.title}') return serie else: logging.error(f'[db] Get tv serie id {id}: None') return None @staticmethod def get_all_series() -> List[SeriesModel]: """ Retrieves all tv series from the db. Args: None Returns: List of SeriesModel or None """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM series;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql).fetchall() if result: logging.debug(f'[db] Get all tv series: {result}') series = [] for serie in result: series.append(SeriesModel(t=serie)) return series else: logging.debug(f'[db] Get all tv series: {[]}') return [] @staticmethod def get_all_series_notification_list() -> List[SeriesModel]: """ Retrieves all tv series from the notification_list. Args: None Returns: List of SeriesModel or None """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM series WHERE activate_notification = 1;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql).fetchall() if result: logging.debug( f'[db] Get all tv series in notification_list: {result}') series = [] for serie in result: series.append(SeriesModel(t=serie)) return series else: logging.debug( f'[db] Get all tv series in notification_list: {[]}') return [] @staticmethod def get_all_movies_notification_list() -> List[MovieModel]: """ Retrieves all tv series from the notification_list. Args: None Returns: List of SeriesModel or None """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM movies WHERE activate_notification = 1;""" connection.row_factory = sqlite3.Row result = connection.cursor().execute(sql).fetchall() if result: logging.debug( f'[db] Get all moviesin notification_list: {result}') movies = [] for movie in result: movies.append(MovieModel(t=movie)) return movies else: logging.debug( f'[db] Get all movies in notification_list: {[]}') return [] @staticmethod def mark_watched_series(id: str, watched: bool) -> int | None: """ Sets the watched flag on the specified series. Args: id (str): tv series id to change watched (bool): status to set the flag to Returns: int or None containing the id of the last modified row """ # if all episodes are watched remove soon/new_release flags if watched: LocalProvider.set_new_release_status(id, False) LocalProvider.set_soon_release_status(id, False) with sqlite3.connect(shared.db) as connection: sql = 'UPDATE series SET watched = ? WHERE id = ?;' result = connection.cursor().execute(sql, (watched, id,)) connection.commit() logging.debug( f'[db] Mark tv serie {id} watched {watched}: {result.lastrowid}') return result.lastrowid @staticmethod def delete_series(id: str) -> int | None: """ Deletes the tv series with the provided id, removing associated files too. Args: id (str): tv series id to delete Returns: int or None containing the id of the last modified row """ logging.debug(f'[db] TV series {id}, delete requested') series = LocalProvider.get_series_by_id(id) if series.backdrop_path and series.backdrop_path.startswith('file'): # type: ignore try: os.remove(series.backdrop_path[7:]) # type: ignore logging.debug(f'[db] TV series {id}, deleted backdrop') except FileNotFoundError: pass if series.poster_path.startswith('file'): # type: ignore try: os.remove(series.poster_path[7:]) # type: ignore logging.debug(f'[db] TV series {id}, deleted poster') except FileNotFoundError: pass if (shared.series_dir/id).is_dir(): shutil.rmtree(shared.series_dir / id) logging.debug( f'[db] TV series {id}, deleted folder {shared.series_dir / id}') with sqlite3.connect(shared.db) as connection: connection.cursor().execute('PRAGMA foreign_keys = ON;') sql = """DELETE FROM series WHERE id = ?""" result = connection.cursor().execute(sql, (id,)) connection.commit() logging.debug(f'[db] TV series {id}, deleted: {result.lastrowid}') return result.lastrowid @staticmethod def get_all_languages() -> List[LanguageModel]: """ Retrieves all languages from the db. Args: None Returns: List of LanguageModel """ with sqlite3.connect(shared.db) as connection: sql = 'SELECT * FROM languages ORDER BY iso_639_1' result = connection.cursor().execute(sql).fetchall() languages = [] for language in result: languages.append(LanguageModel(t=language)) logging.debug(f'[db] Get all languages: {result}') return languages @staticmethod def get_next_manual_movie() -> str: """ Calculates the next id for a manually added movie. Args: None Returns: string with calculated id """ with sqlite3.connect(shared.db) as connection: sql = "SELECT id FROM movies WHERE id LIKE 'M-%' ORDER BY id DESC;" result = connection.cursor().execute(sql).fetchone() if result: l = result[0].split('-') return f'{l[0]}-{int(l[1])+1}' else: return 'M-1' @staticmethod def get_next_manual_series() -> str: """ Calculates the next id for a manually added tv series. Args: None Returns: string with calculated id """ with sqlite3.connect(shared.db) as connection: sql = "SELECT id FROM series WHERE id LIKE 'M-%' ORDER BY id DESC;" result = connection.cursor().execute(sql).fetchone() if result: l = result[0].split('-') return f'{l[0]}-{int(l[1])+1}' else: return 'M-1' @staticmethod def get_next_manual_season() -> str: """ Calculates the next id for a manually added season. Args: None Returns: string with calculated id """ with sqlite3.connect(shared.db) as connection: sql = "SELECT id FROM seasons WHERE id LIKE 'M-%' ORDER BY id DESC;" result = connection.cursor().execute(sql).fetchone() if result: l = result[0].split('-') return f'{l[0]}-{int(l[1])+1}' else: return 'M-1' @staticmethod def get_next_manual_episode() -> str: """ Calculates the next id for a manually added episode. Args: None Returns: string with calculated id """ with sqlite3.connect(shared.db) as connection: sql = "SELECT id FROM episodes WHERE id LIKE 'M-%' ORDER BY id DESC;" result = connection.cursor().execute(sql).fetchone() if result: l = result[0].split('-') return f'{l[0]}-{int(l[1])+1}' else: return 'M-1' @staticmethod def get_language_by_name(name: str) -> LanguageModel | None: """ Retrieves a language from the db via its name. Args: name (str): Returns: LanguageModel of the requested language or None if not found in db """ with sqlite3.connect(shared.db) as connection: sql = 'SELECT * FROM languages WHERE name = ?;' result = connection.cursor().execute(sql, (name,)).fetchone() if result: language = LanguageModel(t=result) logging.debug( f'[db] Get language by name {name}: {language.iso_name}') return language else: logging.error(f'[db] Get language by name {name}: {None}') return None @staticmethod def update_movie(old: MovieModel, new: MovieModel) -> int | None: """ Updates a movie with new data. Args: old: movie to be updated new: new movie data Returns: int or None containing the id of the last modified row """ with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET backdrop_path = ?, budget = ?, color = ?, genres = ?, manual = ?, original_language = ?, original_title = ?, overview = ?, poster_path = ?, release_date = ?, revenue = ?, runtime = ?, status = ?, tagline = ?, title = ?, notes = ? WHERE id = ?; """ result = connection.cursor().execute(sql, ( new.backdrop_path, new.budget, new.color, ','.join(new.genres), new.manual, new.original_language.iso_name, # type: ignore new.original_title, new.overview, new.poster_path, new.release_date, new.revenue, new.runtime, new.status, new.tagline, new.title, old.notes, old.id, )) connection.commit() logging.debug(f'[db] Update movie {old.id}: {(new.backdrop_path, new.budget, ",".join(new.genres), new.manual, new.original_language.iso_name, new.original_title, new.overview, new.poster_path, new.release_date, new.revenue, new.runtime, new.status, new.tagline, new.title, old.notes, old.id)}') return result.lastrowid @staticmethod def update_series(old: SeriesModel, new: SeriesModel) -> int | None: """ Updates a series with new data. Args: old: series to be updated new: new series data Returns: int or None containing the id of the last modified row """ # Save episodes statuses before delete watched_episodes = [] for season in old.seasons: # type: ignore for episode in season.episodes: if episode.watched: watched_episodes.append(episode.id) # remove series but not the posters, therefore not calling remove_series() # TODO Handle if the poster changes, the same problem in update_movie with sqlite3.connect(shared.db) as connection: connection.cursor().execute('PRAGMA foreign_keys = ON;') sql = """DELETE FROM series WHERE id = ?""" result = connection.cursor().execute(sql, (old.id,)) connection.commit() connection.cursor().close() logging.debug(f'[db] TV series {id}, deleted: {result.lastrowid}') # Copy all flags that get reset but are still needed from the old to the new soon_release is automatically set in SeriesModel new.activate_notification = old.activate_notification new.add_date = old.add_date new.new_release = old.new_release new.recent_change = old.recent_change new.watched = old.watched new.notes = old.notes # Restore episodes statuses if they match before addition for idx, season in enumerate(new.seasons): for jdx, episode in enumerate(season.episodes): try: watched_episodes.index(episode.id) new.seasons[idx].episodes[jdx].watched = True except ValueError: new.seasons[idx].episodes[jdx].watched = False # we have found a new episode therefore the watched flag needs to be set to false new.watched = False LocalProvider.add_series(serie=new) return result.lastrowid @staticmethod def mark_watched_episode(id: str, watched: bool) -> int | None: """ Sets the watched flag on the specified episode. Args: id (str): episode id to change watched (bool): status to set the flag to Returns: int or None containing the id of the last modified row """ with sqlite3.connect(shared.db, check_same_thread=False) as connection: sql = """UPDATE episodes SET watched = ? WHERE id = ?""" result = connection.cursor().execute(sql, (watched, id,)) connection.commit() logging.debug( f'[db] Mark episode {id} watched {watched}: {result.lastrowid}') return result.lastrowid @staticmethod def get_episode_by_id(id: str) -> EpisodeModel | None: """ Retrieves an episode from the db via its id. Args: id (str): id of the movie to look for Returns: EpisodeModel of the requested episode or None if not found in db """ with sqlite3.connect(shared.db) as connection: sql = """SELECT * FROM episodes WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() if result: episode = EpisodeModel(t=result) logging.debug(f'[db] Get episode id {id}: {episode.title}') return episode else: logging.error(f'[db] Get episode id {id}: None') return None @staticmethod def set_notification_list_status(id: int, value: bool, movie: bool = False) -> None: """ Sets notification_list status of the content with the id to value. Args: id (str): id of the movie to look for value (bool): the value to set Returns: None """ if not movie: logging.debug( f'[db] TV series {id}, set activation_notification field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET activate_notification = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() else: logging.debug( f'[db] Movie {id}, set activation_notification field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET activate_notification = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() @staticmethod def get_notification_list_status(id: int, movie: bool = False) -> bool: """ Returns activate_notification status from the content with given id. Args: id (str): id of the content to look for Returns: Bool with the status """ if not movie: logging.debug(f'[db] TV series {id}, get notification_list status') with sqlite3.connect(shared.db) as connection: sql = """SELECT activate_notification FROM series WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] else: logging.debug(f'[db] Movie {id}, get notification_list status') with sqlite3.connect(shared.db) as connection: sql = """SELECT activate_notification FROM movies WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] @staticmethod def set_new_release_status(id: int, value: bool, movie: bool = False) -> None: """ Sets new_release status of the content with the id to value. Args: id (str): id of the content to look for value (bool): the value to set Returns: Success int or None if not found in db """ if not movie: logging.debug( f'[db] TV series {id}, set new_release field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET new_release = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() else: logging.debug(f'[db] movie {id}, set new_release field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET new_release = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() @staticmethod def get_new_release_status(id: int, movie: bool = False) -> None: """ Returns new_release status from the content with given id. Args: id (str): id of the content to look for Returns: Success int or None if not found in db """ if not movie: logging.debug(f'[db] TV series {id}, get new_release status') with sqlite3.connect(shared.db) as connection: sql = """SELECT new_release FROM series WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] else: logging.debug(f'[db] movie {id}, get new_release status') with sqlite3.connect(shared.db) as connection: sql = """SELECT new_release FROM movies WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] @staticmethod def set_soon_release_status(id: int, value: bool, movie: bool = False) -> None: """ Sets soon_release status of the content with the id to value. Args: id (str): id of the content to look for value (bool): the value to set Returns: Success int or None if not found in db """ if not movie: logging.debug( f'[db] TV series {id}, set soon_release field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET soon_release = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() else: logging.debug( f'[db] movie {id}, set soon_release field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET soon_release = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)).fetchone() connection.commit() @staticmethod def get_soon_release_status(id: int, value: bool, movie: bool = False) -> None: """ Returns soon_release status from the content with given id. Args: id (str): id of the content to look for Returns: Success int or None if not found in db """ if not movie: logging.debug(f'[db] TV series {id}, get soon_release status') with sqlite3.connect(shared.db) as connection: sql = """SELECT soon_release FROM series WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] else: logging.debug(f'[db] movie {id}, get soon_release status') with sqlite3.connect(shared.db) as connection: sql = """SELECT soon_release FROM movies WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] @staticmethod def set_recent_change_status(id: int, value: bool, movie: bool = False) -> None: """ Sets recent_change status of the content with the id to value. Args: id (str): id of the content to look for value (bool): the value to set Returns: Success int or None if not found in db """ if not movie: logging.debug( f'[db] TV series {id}, set recent_change field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET recent_change = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)) connection.commit() else: logging.debug( f'[db] movie {id}, set recent_change field to {value}') with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET recent_change = ? WHERE id = ?""" result = connection.cursor().execute(sql, (value, id,)) connection.commit() @staticmethod def get_recent_change_status(id: int, value: bool, movie: bool = False) -> None: """ Returns recent_change status from the content with given id. Args: id (str): id of the content to look for Returns: Success int or None if not found in db """ if not movie: logging.debug(f'[db] TV series {id}, get recent_change status') with sqlite3.connect(shared.db) as connection: sql = """SELECT recent_change FROM series WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] else: logging.debug(f'[db] movie {id}, get recent_change status') with sqlite3.connect(shared.db) as connection: sql = """SELECT recent_change FROM movies WHERE id = ?;""" result = connection.cursor().execute(sql, (id,)).fetchone() return result[0] @staticmethod def reset_recent_change() -> None: """ Sets recent change of all content to False, must be called on application exit Args: None Returns: None """ logging.debug(f'[db] All content, set recent_change to false') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET recent_change = False;""" connection.cursor().execute(sql, ()) connection.commit() sql = """UPDATE movies SET recent_change = False;""" connection.cursor().execute(sql, ()) connection.commit() @staticmethod def reset_activate_notification() -> None: """ Sets activate_notification of all content to False Args: None Returns: None """ logging.debug(f'[db] All content, set activate_notification to false') with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET activate_notification = False;""" connection.cursor().execute(sql, ()) connection.commit() sql = """UPDATE movies SET activate_notification = False;""" connection.cursor().execute(sql, ()) connection.commit() @staticmethod def update_movie_notes(id: int, notes: str) -> int | None: """ Updates the notes on the movie with the provided id. Args: id (int): movie id to change notes (str): notes to save Returns: int or None containing the id of the last modified row """ with sqlite3.connect(shared.db) as connection: sql = """UPDATE movies SET notes = ? WHERE id = ?""" result = connection.cursor().execute(sql, (notes, id,)) connection.commit() logging.debug( f'[db] Save movie {id} notes {notes}: {result.lastrowid}') return result.lastrowid @staticmethod def update_serie_notes(id: int, notes: str) -> int | None: """ Updates the notes on the TV Series with the provided id. Args: id (int): serie id to change notes (str): notes to save Returns: int or None containing the id of the last modified row """ with sqlite3.connect(shared.db) as connection: sql = """UPDATE series SET notes = ? WHERE id = ?""" result = connection.cursor().execute(sql, (notes, id,)) connection.commit() logging.debug( f'[db] Save TV Serie {id} notes {notes}: {result.lastrowid}') return result.lastrowid @staticmethod def export_data(export_path: Path) -> bool: """ Exports all database content and associated images to a zip file. Args: export_path (Path): Path where to save the export zip file Returns: bool: True if export successful, False otherwise """ try: with zipfile.ZipFile(export_path, 'w') as archive: # Export database content data: Dict[str, Any] = { 'movies': [], 'series': [] } with sqlite3.connect(shared.db) as connection: connection.row_factory = sqlite3.Row # Export movies movies = connection.execute('SELECT * FROM movies').fetchall() for movie in movies: movie_dict = dict(movie) if movie_dict['poster_path'].startswith('file://'): poster_path = movie_dict['poster_path'][7:] if Path(poster_path).exists(): relative_path = str(Path(poster_path)).split('data/')[-1] archive.write(poster_path, f"images/{relative_path}") if movie_dict['backdrop_path'].startswith('file://'): backdrop_path = movie_dict['backdrop_path'][7:] if Path(backdrop_path).exists(): relative_path = str(Path(backdrop_path)).split('data/')[-1] archive.write(backdrop_path, f"images/{relative_path}") data['movies'].append(movie_dict) # Export series and related data series = connection.execute('SELECT * FROM series').fetchall() for serie in series: serie_dict = dict(serie) # Add series poster/backdrop if serie_dict['poster_path'].startswith('file://'): poster_path = serie_dict['poster_path'][7:] if Path(poster_path).exists(): relative_path = str(Path(poster_path)).split('data/')[-1] archive.write(poster_path, f"images/{relative_path}") if serie_dict['backdrop_path'].startswith('file://'): backdrop_path = serie_dict['backdrop_path'][7:] if Path(backdrop_path).exists(): relative_path = str(Path(backdrop_path)).split('data/')[-1] archive.write(backdrop_path, f"images/{relative_path}") # Add seasons seasons = connection.execute('SELECT * FROM seasons WHERE show_id = ?', (serie_dict['id'],)).fetchall() serie_dict['seasons'] = [] for season in seasons: season_dict = dict(season) # Add season poster with series/season folder structure if season_dict['poster_path'] and season_dict['poster_path'].startswith('file://'): poster_path = season_dict['poster_path'][7:] if Path(poster_path).exists(): filename = Path(poster_path).name archive.write(poster_path, f"images/series/{serie_dict['id']}/{season_dict['number']}/{filename}") # Add episodes episodes = connection.execute( 'SELECT * FROM episodes WHERE show_id = ? AND season_number = ?', (serie_dict['id'], season_dict['number'])).fetchall() season_dict['episodes'] = [] for episode in episodes: episode_dict = dict(episode) # Add episode still with series/season folder structure if episode_dict['still_path'] and episode_dict['still_path'].startswith('file://'): still_path = episode_dict['still_path'][7:] if Path(still_path).exists(): filename = Path(still_path).name archive.write(still_path, f"images/series/{serie_dict['id']}/{season_dict['number']}/{filename}") season_dict['episodes'].append(episode_dict) serie_dict['seasons'].append(season_dict) data['series'].append(serie_dict) # Write the JSON data archive.writestr('data.json', json.dumps(data, indent=2)) return True except Exception as e: logging.error(f'[db] Export failed: {str(e)}') return False @staticmethod def import_data(import_path: Path) -> bool: """ Imports database content and associated images from an export zip file. Restores images to their original locations and handles duplicate IDs. Overwrites existing entries if they have the same ID. Args: import_path (Path): Path to the zip file to import Returns: bool: True if import successful, False otherwise """ try: logging.debug(f'[db] Starting import from {import_path}') with zipfile.ZipFile(import_path, 'r') as archive: # Read the JSON data json_data = archive.read('data.json').decode('utf-8') logging.debug(f'[db] Read JSON data: {json_data[:100]}...') # Log first 100 chars data = json.loads(json_data) if not data or 'movies' not in data or 'series' not in data: logging.error(f'[db] Invalid JSON data in import file') return False logging.debug(f'[db] Found {len(data["movies"])} movies and {len(data["series"])} series') with sqlite3.connect(shared.db) as connection: # Import movies for movie in data['movies']: # Handle movie images if movie['poster_path'].startswith('file://'): poster_filename = Path(movie['poster_path'][7:]).name relative_path = str(Path(movie['poster_path'][7:])).split('data/')[-1] target_dir = Path(shared.data_dir) / Path(relative_path).parent target_dir.mkdir(parents=True, exist_ok=True) with archive.open(f"images/{relative_path}") as source, \ open(target_dir / poster_filename, 'wb') as target: shutil.copyfileobj(source, target) if movie['backdrop_path'].startswith('file://'): backdrop_filename = Path(movie['backdrop_path'][7:]).name relative_path = str(Path(movie['backdrop_path'][7:])).split('data/')[-1] target_dir = Path(shared.data_dir) / Path(relative_path).parent target_dir.mkdir(parents=True, exist_ok=True) with archive.open(f"images/{relative_path}") as source, \ open(target_dir / backdrop_filename, 'wb') as target: shutil.copyfileobj(source, target) # Delete existing movie if present cursor = connection.cursor() sql = "SELECT COUNT(*) FROM movies WHERE id = ?" if cursor.execute(sql, (movie['id'],)).fetchone()[0] > 0: sql = "DELETE FROM movies WHERE id = ?" connection.execute(sql, (movie['id'],)) # Handle manual movie IDs if movie['id'].startswith('M-'): movie['id'] = LocalProvider.get_next_manual_movie() # Insert movie columns = ', '.join(movie.keys()) placeholders = ', '.join(['?' for _ in movie]) sql = f"INSERT INTO movies ({columns}) VALUES ({placeholders})" connection.execute(sql, list(movie.values())) # Import series for serie in data['series']: seasons = serie.pop('seasons') # Handle series images if serie['poster_path'].startswith('file://'): poster_filename = Path(serie['poster_path'][7:]).name relative_path = str(Path(serie['poster_path'][7:])).split('data/')[-1] target_dir = Path(shared.data_dir) / Path(relative_path).parent target_dir.mkdir(parents=True, exist_ok=True) with archive.open(f"images/{relative_path}") as source, \ open(target_dir / poster_filename, 'wb') as target: shutil.copyfileobj(source, target) if serie['backdrop_path'].startswith('file://'): backdrop_filename = Path(serie['backdrop_path'][7:]).name relative_path = str(Path(serie['backdrop_path'][7:])).split('data/')[-1] target_dir = Path(shared.data_dir) / Path(relative_path).parent target_dir.mkdir(parents=True, exist_ok=True) with archive.open(f"images/{relative_path}") as source, \ open(target_dir / backdrop_filename, 'wb') as target: shutil.copyfileobj(source, target) # Delete existing series if present connection.execute('PRAGMA foreign_keys = ON;') cursor = connection.cursor() sql = "SELECT COUNT(*) FROM series WHERE id = ?" if cursor.execute(sql, (serie['id'],)).fetchone()[0] > 0: sql = "DELETE FROM episodes WHERE show_id = ?" connection.execute(sql, (serie['id'],)) sql = "DELETE FROM seasons WHERE show_id = ?" connection.execute(sql, (serie['id'],)) sql = "DELETE FROM series WHERE id = ?" connection.execute(sql, (serie['id'],)) # Handle manual series IDs if serie['id'].startswith('M-'): serie['id'] = LocalProvider.get_next_manual_series() series_id = serie['id'] # Insert series columns = ', '.join(serie.keys()) placeholders = ', '.join(['?' for _ in serie]) sql = f"INSERT INTO series ({columns}) VALUES ({placeholders})" connection.execute(sql, list(serie.values())) # Import seasons and episodes for season in seasons: episodes = season.pop('episodes') # Handle season images if season['poster_path'].startswith('file://'): poster_filename = Path(season['poster_path'][7:]).name target_dir = Path(shared.series_dir) / series_id / str(season['number']) target_dir.mkdir(parents=True, exist_ok=True) image_path = f"images/series/{series_id}/{season['number']}/{poster_filename}" with archive.open(image_path) as source, \ open(target_dir / poster_filename, 'wb') as target: shutil.copyfileobj(source, target) # Handle manual season IDs if season['id'].startswith('M-'): season['id'] = LocalProvider.get_next_manual_season() # Insert season columns = ', '.join(season.keys()) placeholders = ', '.join(['?' for _ in season]) sql = f"INSERT INTO seasons ({columns}) VALUES ({placeholders})" connection.execute(sql, list(season.values())) # Import episodes for episode in episodes: # Handle episode images if episode['still_path'].startswith('file://'): still_filename = Path(episode['still_path'][7:]).name target_dir = Path(shared.series_dir) / series_id / str(season['number']) target_dir.mkdir(parents=True, exist_ok=True) image_path = f"images/series/{series_id}/{season['number']}/{still_filename}" with archive.open(image_path) as source, \ open(target_dir / still_filename, 'wb') as target: shutil.copyfileobj(source, target) # Handle manual episode IDs if episode['id'].startswith('M-'): episode['id'] = LocalProvider.get_next_manual_episode() # Insert episode columns = ', '.join(episode.keys()) placeholders = ', '.join(['?' for _ in episode]) sql = f"INSERT INTO episodes ({columns}) VALUES ({placeholders})" connection.execute(sql, list(episode.values())) connection.commit() return True except Exception as e: logging.error(f'[db] Import failed: {str(e)}') return Falseticketbooth-1.1.1/src/providers/meson.build000066400000000000000000000005471475632104500210140ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) providersdir = join_paths(pkgdatadir, 'src/providers') sources = [ '__init__.py', 'tmdb_provider.py', 'local_provider.py', ] install_data(sources, install_dir: providersdir) ticketbooth-1.1.1/src/providers/tmdb_provider.py000066400000000000000000000077671475632104500220770ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import os import tmdbsimple as tmdb from .. import shared # type: ignore class TMDBProvider: """ This class provides methods to interface with the TMDB API. Properties: None Methods: search(query: str, lang: str or None): Searches the API for the given query get_languages(): Retrieves all available languages usable with the API get_movie(id: int, lang: str): Retrieves general information about a movie. get_serie(id: int, lang: str): Retrieves general information about a tv series. get_season_episodes(id: int, series:int, lang: str): Retrieves information about the episodes in a season. """ if shared.schema.get_boolean('use-own-tmdb-key'): tmdb.API_KEY = shared.schema.get_string('own-tmdb-key') else: tmdb.API_KEY = os.environ.get('TMDB_KEY') def __init__(self): super().__init__() @staticmethod def search(query: str, lang: str | None = None) -> dict: """ Searches the API for the given query. Args: query (str): a query to lookup lang (str or None): the prefered language for the results (ISO 639-1 format) Returns: dict containg the API result. """ if not lang: lang = shared.schema.get_string('tmdb-lang') return tmdb.Search().multi(query=query, language=lang, include_adult=False) @staticmethod def get_languages() -> dict: """ Retrieves all available languages usable with the API Args: None Returns: dict containg the API result. """ return tmdb.Configuration().languages() @staticmethod def get_movie(id: int, lang: str | None = None) -> dict: """ Retrieves general information about the movie with the provided id. Args: id (int): id of the movie lang (str): the prefered language for the results (optional) Returns: dict containg the API result. """ if not lang: lang = shared.schema.get_string('tmdb-lang') return tmdb.Movies(id).info(language=lang) @staticmethod def get_serie(id: int, lang: str | None = None) -> dict: """ Retrieves general information about the tv series with the provided id. Args: id (int): id of the tv series lang (str): the prefered language for the results (optional) Returns: dict containg the API result """ if not lang: lang = shared.schema.get_string('tmdb-lang') return tmdb.TV(id).info(language=lang) @staticmethod def get_season_episodes(id: int, season: int, lang: str | None = None) -> dict: """ Retrieves information about the episodes in a season for the specified tv series. Args: id (int): id of the tv series season (int): season number lang (str): the prefered language for the results (optional) Returns: dict containg the API result. """ if not lang: lang = shared.schema.get_string('tmdb-lang') return tmdb.TV_Seasons(id, season).info(language=lang)['episodes'] @staticmethod def set_key(key: str) -> None: """ Sets the API in use. Args: key (str): key to use Returns: None """ tmdb.API_KEY = key @staticmethod def get_key() -> str: """ Gets the API in use. Args: None Returns: str with the key in use """ return tmdb.API_KEY @staticmethod def get_builtin_key() -> str: """ Gets the builtin API key. Args: None Returns: str with the builtin key """ return os.environ.get('TMDB_KEY') # type: ignore ticketbooth-1.1.1/src/shared.py.in000066400000000000000000000026041475632104500170560ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Gdk, Gio, GLib from pathlib import Path import logging from .logging.session_file_handler import SessionFileHandler import faulthandler import os APP_ID = '@app_id@' VERSION = '@version@' PREFIX = '@prefix@' APP_NAME = '@app_name@' schema = Gio.Settings.new(APP_ID) data_dir = Path(GLib.get_user_data_dir()) cache_dir = Path(GLib.get_user_cache_dir()) poster_dir = data_dir / 'poster' background_dir = data_dir / 'background' series_dir = data_dir / 'series' db = data_dir / 'data.db' if not os.path.exists(data_dir/'logs'): os.makedirs(data_dir/'logs') faulthandler.enable(file=open(data_dir/'logs'/'crash.log',"w")) if '@debug@' == 'True': DEBUG = True logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', filename=data_dir / 'logs' / 'ticketbooth.log') else: DEBUG = False logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename=data_dir / 'logs' / 'ticketbooth.log') handler = SessionFileHandler(filename=data_dir / 'logs' / 'ticketbooth.log') handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) logging.getLogger().addHandler(handler) log_files = None ticketbooth-1.1.1/src/ticketbooth.gresource.xml.in000066400000000000000000000112201475632104500222660ustar00rootroot00000000000000 css/style.css css/style-dark.css ui/widgets/theme_switcher.ui ui/widgets/poster_button.ui ui/widgets/search_result_row.ui ui/widgets/episode_row.ui ui/widgets/image_selector.ui ui/widgets/season_expander.ui ui/widgets/background_indicator.ui ui/widgets/background_activity_row.ui ui/dialogs/add_manual.ui ui/dialogs/add_tmdb.ui ui/dialogs/edit_season.ui ui/dialogs/message_dialogs.ui ui/gtk/help-overlay.ui ui/window.ui ui/about_dialog.ui ui/preferences.ui ui/views/db_update_view.ui ui/views/first_run_view.ui ui/views/main_view.ui ui/views/content_view.ui ui/pages/details_page.ui ui/pages/edit_episode_page.ui ../data/blank_poster.jpg ../data/blank_still.jpg ../data/icons/symbolic/series-symbolic.svg ../data/icons/symbolic/bell-outline-symbolic.svg ../data/icons/symbolic/check-round-outline-symbolic.svg ../data/icons/symbolic/movies-symbolic.svg ../data/icons/symbolic/network-transmit-receive-symbolic.svg ../data/icons/symbolic/view-grid-symbolic.svg ../data/icons/symbolic/view-list-symbolic.svg ../data/icons/symbolic/loupe-symbolic.svg ../data/icons/symbolic/plus-symbolic.svg ../data/icons/symbolic/document-edit-symbolic.svg ../data/icons/symbolic/user-trash-symbolic.svg ../data/icons/symbolic/check-plain-symbolic.svg ../data/icons/symbolic/watchlist-symbolic.svg ../data/icons/symbolic/star-large-symbolic.svg ../data/icons/symbolic/hourglass-symbolic.svg ../data/icons/symbolic/right-symbolic.svg ../data/icons/symbolic/update-symbolic.svg ../data/icons/symbolic/warning-symbolic.svg ../data/icons/symbolic/floppy-symbolic.svg ticketbooth-1.1.1/src/ticketbooth.in000077500000000000000000000024641475632104500175070ustar00rootroot00000000000000#!@python@ # ticketbooth.in # # Copyright 2023 Ale # # 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 . # # SPDX-License-Identifier: GPL-3.0-or-later import os import sys import signal import locale import gettext version = '@version@' pkgdatadir = '@pkgdatadir@' localedir = '@localedir@' debug = '@debug@' sys.path.insert(1, pkgdatadir) signal.signal(signal.SIGINT, signal.SIG_DFL) locale.bindtextdomain('ticketbooth', localedir) locale.textdomain('ticketbooth') gettext.install('ticketbooth', localedir) if __name__ == '__main__': import gi from gi.repository import Gio resource = Gio.Resource.load(os.path.join(pkgdatadir, 'ticketbooth.gresource')) resource._register() from src import main sys.exit(main.main()) ticketbooth-1.1.1/src/ui/000077500000000000000000000000001475632104500152445ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/about_dialog.blp000066400000000000000000000011761475632104500204010ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; Adw.AboutDialog about_dialog { copyright: _("Copyright © 2023 - 2025 Alessandro Iepure\nSome icons are copyright of the GNOME Project"); comments: _("Keep track of your favorite shows"); website: "https://github.com/aleiepure/ticketbooth"; issue-url: "https://github.com/aleiepure/ticketbooth/issues"; license-type: gpl_3_0; developer-name: "Alessandro Iepure"; // TRANSLATORS: replace with your name (with optional email or website) translator-credits: _("translator-credits"); }ticketbooth-1.1.1/src/ui/dialogs/000077500000000000000000000000001475632104500166665ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/dialogs/add_manual.blp000066400000000000000000000117211475632104500214540ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $AddManualDialog: Adw.Dialog { content-height: 670; content-width: 650; map => $_on_map(); Adw.ToolbarView { [top] Adw.HeaderBar { show-end-title-buttons: false; show-start-title-buttons: false; title-widget: Box { orientation: vertical; Adw.WindowTitle { valign: center; vexpand: true; visible: bind template.edit-mode; title: bind template.title; } Box { visible: bind template.edit-mode inverted; orientation: horizontal; valign: center; styles [ "linked" ] ToggleButton _movies_btn { label: C_("Category", "Movie"); toggled => $_on_movies_btn_toggled(); } ToggleButton _series_btn { label: C_("Category", "TV Series"); group: _movies_btn; } } }; [start] Button { label: _("Cancel"); action-name: 'window.close'; } [end] Button _save_btn { label: _("Save"); sensitive: false; clicked => $_on_done_btn_clicked(); styles [ "suggested-action" ] } } content: ScrolledWindow { vexpand: true; hexpand: true; Box { orientation: vertical; margin-start: 20; margin-end: 20; margin-bottom: 20; $ImageSelector _poster {} Adw.PreferencesGroup { margin-bottom: 20; title: _("General"); Adw.EntryRow _title_entry { title: _("Title (required)"); changed => $_on_title_changed(); } Adw.ActionRow { title: _("Release Date"); activatable-widget: _release_date_menu_btn; MenuButton _release_date_menu_btn { valign: center; popover: Popover { Calendar _calendar { day-selected => $_on_calendar_day_selected(); } }; styles [ "flat" ] } } Adw.EntryRow _genres_entry { title: _("Genres (comma separated)"); } Adw.SpinRow _runtime_spinrow { visible: bind _movies_btn.active; title: _("Runtime (minutes)"); adjustment: Adjustment { lower: 0; upper: 900; step-increment: 1; }; } Adw.EntryRow _tagline_entry { title: _("Tagline"); } Adw.EntryRow _creator_entry { visible: bind _series_btn.active; title: _("Created by"); } } Adw.PreferencesGroup { title: _("Overview"); margin-bottom: 20; Gtk.TextView _overview_text { height-request: 100; top-margin: 12; bottom-margin: 12; right-margin: 12; left-margin: 12; wrap-mode: word; styles [ "card" ] } } Adw.PreferencesGroup _seasons_group { visible: bind _series_btn.active; title: _("Seasons (required)"); description: _("Use the + button to add seasons"); [header-suffix] Button { Adw.ButtonContent { label: _("Add"); icon-name: "plus"; } clicked => $_on_season_add_btn_clicked(); styles ["accent"] } } Adw.PreferencesGroup { title: _("Additional Information"); Adw.EntryRow _status_entry { title: _("Status"); } Adw.ComboRow _original_language_comborow { title: _("Original Language"); model: StringList _language_model {}; } Adw.EntryRow _original_title_entry { title: _("Original Title"); } Adw.SpinRow _budget_spinrow { visible: bind _movies_btn.active; title: _("Budget (US$)"); adjustment: Adjustment { lower: 0; upper: 9999999999999999999; step-increment: 1; }; } Adw.SpinRow _revenue_spinrow { visible: bind _movies_btn.active; title: _("Revenue (US$)"); adjustment: Adjustment { lower: 0; upper: 9999999999999999999; step-increment: 1; }; } Adw.ActionRow { title: _("In production"); visible: bind _series_btn.active; activatable-widget: _production_checkbtn; [suffix] CheckButton _production_checkbtn { valign: center; } } } } }; } } ticketbooth-1.1.1/src/ui/dialogs/add_tmdb.blp000066400000000000000000000042731475632104500211310ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Gio 2.0; using Adw 1; template $AddTMDBDialog: Adw.Dialog { focus-widget: _search_entry; content-width: 700; content-height: 550; ShortcutController { Shortcut { trigger: "Escape"; action: "action(window.close)"; } } Adw.ToolbarView { [top] Adw.HeaderBar { title-widget: SearchEntry _search_entry { activates-default: true; placeholder-text: _("Search The Movie Database…"); search-delay: 500; search-changed => $_on_searchentry_search_changed(); }; } content: Adw.ViewStack _stack { Adw.ViewStackPage { name: "empty"; child: Adw.StatusPage { title: _("Search For a Title"); icon-name: "loupe"; description: _("Start typing in the search bar to see a list of matching movies and TV series"); }; } Adw.ViewStackPage { name: "no-results"; child: Adw.StatusPage { title: _("No Results Found"); icon-name: "loupe"; description: _("Try a different search"); }; } Adw.ViewStackPage { name: "results"; child: ScrolledWindow { vexpand: true; ListView _list_view { styles ["navigation-sidebar"] orientation: vertical; model: NoSelection { model: Gio.ListStore _model {}; }; factory: BuilderListItemFactory { template ListItem { child: $SearchResultRow { tmdb-id: bind template.item as < $SearchResultModel > .tmdb-id; title: bind template.item as < $SearchResultModel > .title; year: bind template.item as < $SearchResultModel > .year; media-type: bind template.item as < $SearchResultModel > .media-type; description: bind template.item as < $SearchResultModel > .description; poster-path: bind template.item as < $SearchResultModel > .poster-path; }; } }; } }; } }; } } ticketbooth-1.1.1/src/ui/dialogs/edit_season.blp000066400000000000000000000035051475632104500216650ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $EditSeasonDialog: Adw.Dialog { content-width: 600; content-height: 640; map => $_on_map(); Adw.NavigationView _navigation_view { Adw.NavigationPage { title: _("Edit Season"); child: Adw.ToolbarView { [top] Adw.HeaderBar { show-end-title-buttons: false; show-start-title-buttons: false; [start] Button _cancel_btn { label: _("Cancel"); action-name: 'window.close'; } [end] Button _save_btn { label: _("Save"); sensitive: false; clicked => $_on_save_btn_clicked(); styles [ "suggested-action" ] } } content: ScrolledWindow { Box { orientation: vertical; margin-start: 20; margin-end: 20; margin-bottom: 20; $ImageSelector _poster {} Adw.PreferencesGroup { margin-bottom: 20; title: _("General"); Adw.EntryRow _title_entry { title: _("Title (required)"); changed => $_on_title_entry_changed(); } } Adw.PreferencesGroup _episodes_group { title: _("Episodes (required)"); description: _("Use the + button to add episodes"); [header-suffix] Button { Adw.ButtonContent { label: _("Add"); icon-name: "plus"; } clicked => $_on_add_btn_clicked(); styles ["accent"] } } } }; }; } } } ticketbooth-1.1.1/src/ui/dialogs/message_dialogs.blp000066400000000000000000000023531475632104500225160ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; Adw.AlertDialog _clear_cache_dialog { heading: C_("message dialog heading", "Clear Cached Data?"); body: C_("message dialog body", "This operation will clear all stored cache data. It might get downloaded again next time you add content from TMDB."); responses[ cache_cancel: C_("message dialog action", "Cancel"), cache_clear: C_("message dialog action", "Clear") destructive ] } Adw.AlertDialog _clear_data_dialog { heading: C_("message dialog heading", "Clear Stored Data?"); body: C_("message dialog body", "This operation will permanentlly delete the selected data, loosing all your changes."); extra-child: Adw.PreferencesGroup { Adw.ActionRow _movies_row { [prefix] CheckButton _movies_checkbtn {} title: _("Movies"); activatable-widget: _movies_checkbtn; } Adw.ActionRow _series_row { [prefix] CheckButton _series_checkbtn {} title: _("TV Series"); activatable-widget: _series_checkbtn; } }; responses[ data_cancel: C_("message dialog action", "Cancel"), data_clear: C_("message dialog action", "Clear") destructive ] } ticketbooth-1.1.1/src/ui/gtk/000077500000000000000000000000001475632104500160315ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/gtk/help-overlay.blp000066400000000000000000000024261475632104500211430ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; ShortcutsWindow help_overlay { modal: true; ShortcutsSection { section-name: "shortcuts"; max-height: 10; ShortcutsGroup { title: C_("shortcut window", "General"); ShortcutsShortcut { title: C_("shortcut window", "Show Shortcuts"); action-name: "win.show-help-overlay"; } ShortcutsShortcut { title: C_("shortcut window", "Show Preferences"); action-name: "app.preferences"; } ShortcutsShortcut { title: C_("shortcut window", "Search your Watchlist"); accelerator: "f"; } ShortcutsShortcut { title: C_("shortcut window", "Quit"); action-name: "app.quit"; } } ShortcutsGroup { title: C_("shortcut window", "Library management"); ShortcutsShortcut { title: C_("shortcut window", "Add title from TMDB"); accelerator: "n"; } ShortcutsShortcut { title: C_("shortcut window", "Add title manually"); accelerator: "n"; } ShortcutsShortcut { title: C_("shortcut window", "Refresh library"); accelerator: "r"; } } } } ticketbooth-1.1.1/src/ui/pages/000077500000000000000000000000001475632104500163435ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/pages/details_page.blp000066400000000000000000000332601475632104500214670ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $DetailsView: Adw.NavigationPage { child: Adw.ViewStack _view_stack { Adw.ViewStackPage { name: "filled"; child: Overlay { Picture _background_picture { content-fit: fill; hexpand: true; } [overlay] Adw.ToolbarView { [top] Adw.HeaderBar { styles [ "flat" ] [end] MenuButton _menu_btn { icon-name: "open-menu"; menu-model: _primary_menu; tooltip-text: _("Main Menu"); } } content: Adw.BreakpointBin { width-request: 360; height-request: 200; Adw.Breakpoint _breakpoint { condition ("max-width: 550sp") setters { main-details.orientation: vertical; main-details.margin-start: 0; main-details.margin-end: 0; main-details.margin-bottom: 0; main-details.spacing: 0; _poster_picture.halign: center; _poster_picture.margin-bottom: 20; details.margin-start: 20; details.margin-end: 20; _description_box.margin-start: 20; _description_box.margin-end: 20; _creator_box.margin-start: 20; _creator_box.margin-end: 20; _seasons_box.margin-start: 20; _seasons_box.margin-end: 20; _additional_info_box.margin-start: 20; _additional_info_box.margin-end: 20; _notes_box.margin-start: 20; _notes_box.margin-end: 20; } apply => $_on_breakpoint_applied(); unapply => $_on_breakpoint_unapplied(); } child: ScrolledWindow scrolled-window { child: Box { orientation: vertical; Box main-details { orientation: horizontal; margin-start: 50; margin-top: 25; margin-bottom: 50; margin-end: 50; spacing: 50; Picture _poster_picture { height-request: 300; width-request: 200; content-fit: fill; styles [ "poster" ] } Box details { orientation: vertical; margin-end: 50; spacing: 6; Label _title_lbl { lines: 2; halign: start; wrap: true; styles [ "title-1" ] } Label _tagline_lbl { visible: false; halign: start; wrap: true; lines: 2; styles [ "heading" ] } Label _genres_lbl { visible: false; halign: start; wrap: true; lines: 2; } Box { orientation: horizontal; spacing: 6; Label _chip1_lbl { visible: false; styles [ "caption", "chip" ] } Label _chip2_lbl { visible: false; styles [ "caption", "chip" ] } Label _chip3_lbl { visible: false; tooltip-text: _("Number of Episodes"); styles [ "caption", "chip" ] } Label _chip4_lbl { visible: false; tooltip-text: _("Air Date of Next Episode"); styles [ "caption", "chip" ] } } Box { Image _notification_icon { icon-name: "bell-outline-symbolic"; margin-end: 3; visible: false; icon-size: normal; } CheckButton _activate_notification_btn { label: _("Notify me on new releases"); tooltip-text: _("Notify me on new releases"); valign: center; visible: false; active: true; toggled => $_activate_notification_btn_toggled(); } } Box { orientation: horizontal; Button _watched_btn { visible: false; child: Adw.ButtonContent _btn_content {}; valign: center; margin-end: 16; styles [ "pill", "opaque" ] clicked => $_on_watched_btn_clicked(); } Box { orientation: horizontal; spacing: 6; Button _update_btn { icon-name: "update"; tooltip-text: _("Update Metadata"); valign: center; visible: false; styles [ "circular" ] clicked => $_on_update_btn_clicked(); } Button _edit_btn { icon-name: "document-edit"; tooltip-text: _("Edit"); valign: center; visible: false; styles [ "circular" ] clicked => $_on_edit_btn_clicked(); } Button _delete_btn { icon-name: "user-trash-symbolic"; tooltip-text: _("Delete"); valign: center; styles [ "circular" ] clicked => $_on_delete_btn_clicked(); } } } } } Box _description_box { orientation: vertical; visible: false; margin-start: 50; margin-end: 50; Separator { margin-top: 12; styles [ "spacer" ] } Label { label: _("Description"); halign: start; styles [ "title-2" ] } Label _overview_lbl { halign: start; wrap: true; } } Separator { styles [ "spacer" ] } Box _creator_box { visible: false; halign: start; orientation: vertical; margin-start: 50; margin-end: 50; Label { label: _("Created by"); halign: start; styles [ "heading" ] } Label _creator_lbl { halign: start; } } Separator { margin-bottom: 16; styles [ "spacer" ] } Box _seasons_box { margin-start: 50; margin-end: 50; visible: false; orientation: vertical; Label { label: _("Seasons"); halign: start; margin-bottom: 6; styles [ "title-2" ] } Adw.PreferencesGroup _seasons_group { styles [ "groupcolor" ] } Separator { margin-bottom: 16; styles [ "spacer" ] } } Box _additional_info_box { valign: start; orientation: vertical; margin-start: 50; margin-end: 50; Label { label: _("Additional Information"); halign: start; styles [ "title-2" ] } FlowBox _flow_box { orientation: horizontal; hexpand: true; selection-mode: none; max-children-per-line: 12; } } Box _notes_box { orientation: vertical; margin-top: 10; margin-bottom: 20; margin-start: 50; margin-end: 50; Box { orientation: horizontal; spacing: 10; Label { label: _("Notes"); halign: start; styles [ "title-2" ] } Revealer _notes_save_revealer { reveal-child: false; transition-type: swing_right; child: Button _notes_save_btn { icon-name: "floppy"; styles [ "circular" ] clicked => $_on_notes_btn_clicked(); }; } } TextView _notes_textview { vexpand: true; wrap-mode: word; margin-top: 10; top-margin: 12; left-margin: 12; right-margin: 12; bottom-margin: 12; height-request: 100; styles [ "notes", "card" ] } // Adw.ViewStack { // styles [ // "card" // ] // Adw.ViewStackPage { // name: "text-area"; // child: ScrolledWindow { // child: TextView _textview { // wrap-mode: word; // top-margin: 12; // left-margin: 12; // right-margin: 12; // bottom-margin: 12; // styles [ // "notes" // ] // }; // }; // } // } } }; }; }; } }; } Adw.ViewStackPage { name: "loading"; child: Adw.ToolbarView { [top] Adw.HeaderBar { styles [ "flat" ] } content: Box { orientation: vertical; spacing: 12; valign: center; vexpand: true; Adw.Spinner {} Box { orientation: vertical; margin-start: 12; margin-end: 12; Label _loading_lbl { label: "Loading Content…"; wrap: true; halign: center; justify: center; styles [ "title-1" ] } Label _status_lbl { label: "Please wait, this might take a while."; halign: center; justify: center; wrap: true; } } }; }; } }; } menu _primary_menu { section { item { custom: "themeswitcher"; } } section { item { label: _("_Preferences"); action: "app.preferences"; } item { label: _("_Keyboard Shortcuts"); action: "win.show-help-overlay"; } item { label: _("_About Ticket Booth"); action: "app.about"; } } } ticketbooth-1.1.1/src/ui/pages/edit_episode_page.blp000066400000000000000000000036471475632104500225050ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $EditEpisodeNavigationPage: Adw.NavigationPage { map => $_on_map(); title: _("Edit Episode"); child: Adw.ToolbarView { [top] Adw.HeaderBar { show-end-title-buttons: false; show-start-title-buttons: false; [end] Button _save_btn { label: _("Save"); sensitive: bind $_enable_save(_title_entry.text,(_episode_spin_row.value) as ) as ; clicked => $_on_save_btn_clicked(); styles [ "suggested-action" ] } } content: ScrolledWindow { Box { orientation: vertical; margin-start: 20; margin-end: 20; margin-bottom: 20; $ImageSelector _still { content-fit: cover; } Adw.PreferencesGroup { title: _("General"); margin-bottom: 20; Adw.SpinRow _episode_spin_row { title: _("Episode Number (required)"); adjustment: Adjustment { lower: 0; upper: 900; step-increment: 1; }; } Adw.EntryRow _title_entry { title: _("Title (required)"); use-markup: true; } Adw.SpinRow _runtime_spin_row { title: _("Runtime (minutes)"); adjustment: Adjustment { lower: 0; upper: 900; step-increment: 1; }; } } Adw.PreferencesGroup { title: _("Overview"); Gtk.TextView _overview_text { height-request: 100; top-margin: 12; bottom-margin: 12; right-margin: 12; left-margin: 12; wrap-mode: word; styles [ "card" ] } } } }; }; } ticketbooth-1.1.1/src/ui/preferences.blp000066400000000000000000000075531475632104500202560ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $PreferencesDialog: Adw.PreferencesDialog { search-enabled: false; map => $_on_map(); Adw.PreferencesPage { name: "preferences"; title: _("Preferences"); Adw.PreferencesGroup _download_group { title: C_("preferences", "Optional Download"); description: C_("preferences", "For a complete experience, a download of 15 KB is required. The initial setup could not retrieve the data automatically and thus offline mode has been activated. It will remain active until the setup is completed."); Adw.ActionRow _download_row { // TRANSLATORS: When clicked, it completes the initial setup by downloading the optional data. title: C_("preferences", "Complete Setup"); activated => $_on_download_activate(); activatable: true; Image { icon-name: "right"; } } } Adw.PreferencesGroup _offline_group { title: C_("preferences", "Offline Mode"); description: C_("preferences", "Ticket Booth can work entirely offline. If you choose to run in this mode, some features that require the Internet and/or access to third party APIs will not be available."); Adw.SwitchRow _offline_switch { title: C_("preferences", "Enable Offline Mode"); } } Adw.PreferencesGroup _tmdb_group { title: C_("preferences", "The Movie Database (TMDB)"); description: C_("preferences", "TMDB provides localized metadata for most content. Ticket Booth will download it in your prefered language, selectable below. In case it is not available, it will fallback to English US and then to the content's original language. If neither are available, it will result in a blank string. Please consider contributing to TMDB. Additionally, an automatic update is performed on a frequency of your choosing."); Adw.ComboRow _language_comborow { title: C_("preferences", "TMDB Results Language"); model: StringList _language_model {}; } Adw.ComboRow _update_freq_comborow { title: C_("preferences", "Update Frequency"); subtitle: C_("preferences", "Restart Ticket Booth after changing"); model: StringList { strings[ C_("preferences", "Never"), C_("preferences", "Daily"), C_("preferences", "Weekly"), C_("preferences", "Monthly") ] }; } Adw.SwitchRow _use_own_key_switch { title: C_("preferences", "Use Your API Key"); subtitle: C_("preferences", "Register yours here"); } Adw.EntryRow _own_key_entryrow { title: C_("preferences", "Your API key"); visible: bind _use_own_key_switch.active; [suffix] Button _check_own_key_button { label: C_("preferences", "Save Key"); valign: center; clicked => $_on_check_own_key_button_clicked(); } changed => $_on_own_key_changed(); } } Adw.PreferencesGroup _housekeeping_group { title: C_("preferences", "Housekeeping"); Adw.PreferencesGroup { Adw.SwitchRow _exit_cache_switch { title: C_("preferences", "Clear Cache on Exit"); } Adw.ActionRow _cache_row { title: C_("preferences", "Clear Cached Search Data"); activated => $_on_clear_cache_activate(); activatable: true; Image { icon-name: "right"; } } Adw.ActionRow _data_row { title: C_("preferences", "Clear Data"); activated => $_on_clear_activate(); activatable: true; Image { icon-name: "right"; } } } } } } ticketbooth-1.1.1/src/ui/views/000077500000000000000000000000001475632104500164015ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/views/content_view.blp000066400000000000000000000077601475632104500216160ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $ContentView: Adw.Bin { Adw.ViewStack _stack { Adw.ViewStackPage { name: "empty"; child: Adw.StatusPage { icon-name: bind template.icon-name; title: _("Your Watchlist Is Empty"); description: _("Add content with the + button or import from an older watchlist."); }; } Adw.ViewStackPage { name: "updating"; child: Adw.StatusPage { child: Box { orientation: vertical; Adw.Spinner { height-request: 64; } Box { orientation: vertical; margin-start: 12; margin-end: 12; Label { label: "Updating your watchlist…"; wrap: true; halign: center; justify: center; styles [ "title-1" ] } Label _updating_status_lbl { halign: center; justify: center; wrap: true; } } }; }; } Adw.ViewStackPage { name: "loading"; child: Adw.StatusPage { child: Box { orientation: vertical; Adw.Spinner { height-request: 64; } Box { orientation: vertical; margin-start: 12; margin-end: 12; Label _heading_lbl { label: "Loading your watchlist…"; wrap: true; halign: center; justify: center; styles [ "title-1" ] } Label _status_lbl { label: "Get your popcorns ready"; halign: center; justify: center; wrap: true; } } }; }; } Adw.ViewStackPage { name: "filled"; child: ScrolledWindow { Box { orientation: vertical; Box _full_box { visible: false; orientation: vertical; spacing: 12; halign: start; Label _title_lbl { halign: start; margin-start: 12; margin-top: 12; label: _("Your Watchlist"); styles [ "title-1" ] } FlowBox _flow_box { orientation: horizontal; min-children-per-line: 2; max-children-per-line: 15; selection-mode: none; halign: start; } } Box _separated_box { visible: false; orientation: vertical; spacing: 12; halign: start; Box _unwatched_box { orientation: vertical; Label { halign: start; margin-start: 12; margin-top: 12; label: _("Unwatched"); styles [ "title-1" ] } FlowBox _unwatched_flow_box { orientation: horizontal; min-children-per-line: 2; max-children-per-line: 15; selection-mode: none; halign: start; } } Box _watched_box { orientation: vertical; Label { halign: start; margin-start: 12; margin-top: 12; label: _("Watched"); styles [ "title-1" ] } FlowBox _watched_flow_box { orientation: horizontal; min-children-per-line: 2; max-children-per-line: 15; selection-mode: none; halign: start; } } } } }; } } } ticketbooth-1.1.1/src/ui/views/db_update_view.blp000066400000000000000000000047541475632104500220730ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $DbUpdateView: Adw.Bin { map => $_on_map(); Box { orientation: vertical; Adw.HeaderBar { styles ["flat"] title-widget: Label {}; } Adw.Carousel _carousel { vexpand: true; hexpand: true; allow-scroll-wheel: false; allow-mouse-drag: false; allow-long-swipes: false; Adw.StatusPage _update_progress_page { margin-top: 64; title: _("Updating your watchlist"); description: _("After updating Ticket Booth we need to update the local database entries"); icon-name: "network-transmit-receive"; vexpand: true; hexpand: true; Box { margin-top: 42; orientation: vertical; halign: center; valign: center; ProgressBar _progress_bar{ fraction: 0.0; show-text: true; margin-bottom: 24; } Button _offline_btn { visible: true; halign: center; label: _("Use Offline Mode"); clicked => $_on_offline_btn_clicked(); styles ["suggested-action", "pill"] } CheckButton _retry_check_btn { label: _("Try again on next run"); visible: true; active: true; halign: center; } } } Adw.StatusPage _notification_question { margin-top: 64; margin-end: 20; title: _("Activate Notifications?"); description: _("Would you like to activate notifications for all series that are still in production and for all movies that have not yet released?"); icon-name: "bell-outline-symbolic"; vexpand: true; hexpand: true; Box { orientation: horizontal; halign: center; Button _activate_btn { margin-end: 8; label: _("Activate"); use-underline: true; halign: center; clicked => $_on_activate_btn_clicked(); styles ["suggested-action", "pill"] } Button _deactivate_btn { margin-end: 8; label: _("Deactivate"); use-underline: true; halign: center; clicked => $_on_deactivate_btn_clicked(); styles ["destructive-action", "pill" ] } } } } } } ticketbooth-1.1.1/src/ui/views/first_run_view.blp000066400000000000000000000024421475632104500221470ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $FirstRunView: Adw.Bin { map => $_on_map(); Box { orientation: vertical; vexpand: true; Adw.HeaderBar { styles ["flat"] title-widget: Label {}; } Box { orientation: vertical; spacing: 12; valign: center; vexpand: true; Adw.Spinner { height-request: 64; } Box { orientation: vertical; margin-start: 12; margin-end: 12; Label _heading_lbl { label: "Getting things ready…"; wrap: true; halign: center; justify: center; styles ["title-1"] } Label _status_lbl { label: "Please wait, this might take a while."; halign: center; justify: center; wrap: true; } } Button _offline_btn { visible: false; halign: center; label: _("Use Offline Mode"); clicked => $_on_offline_btn_clicked(); styles ["suggested-action", "pill"] } CheckButton _retry_check_btn { label: _("Try again on next run"); visible: false; active: true; halign: center; } } } } ticketbooth-1.1.1/src/ui/views/main_view.blp000066400000000000000000000120641475632104500210610ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $MainView: Adw.Bin { map => $_on_map(); ShortcutController { scope: global; Shortcut { trigger: "n"; action: "action(win.add-tmdb)"; } Shortcut { trigger: "n"; action: "action(win.add-manual)"; } Shortcut { trigger: "F5"; action: "action(win.refresh)"; } Shortcut { trigger: "r"; action: "action(win.refresh)"; } Shortcut { trigger: "f"; action: "action(win.search)"; } } Adw.NavigationView { Adw.NavigationPage { title: "Ticket Booth"; child: Adw.BreakpointBin { width-request: 400; height-request: 600; Adw.Breakpoint { condition("max-width: 550sp") setters { _header_bar.title-widget: null; _switcher_bar.reveal: true; } } child: Adw.ToolbarView { [top] Adw.HeaderBar _header_bar { title-widget: Adw.ViewSwitcher _title { stack: _tab_stack; policy: wide; }; [start] MenuButton _add_btn { icon-name: "plus"; tooltip-text: _("Add a title to your library"); menu-model: _add_menu; } [start] ToggleButton _show_search_btn { icon-name: "loupe"; tooltip-text: _("Show/Hide search bar"); toggled => $_on_search_btn_toggled(); } [end] MenuButton _menu_btn { icon-name: "open-menu"; menu-model: _primary_menu; tooltip-text: _("Main Menu"); } [end] $BackgroundIndicator _background_indicator { visible: true; } } [top] SearchBar _search_bar { search-mode-enabled: bind _show_search_btn.active; child: Box { orientation: horizontal; spacing: 6; DropDown _search_mode { model: StringList { strings: ["Title", "Genre"]; }; selected: 0; } SearchEntry _search_entry { halign: center; activates-default: true; placeholder-text: _("Search Your Watchlist"); search-delay: 500; search-changed => $_on_searchentry_search_changed(); } }; } content: Box { orientation: vertical; Adw.Banner _banner { title: _("Offline Mode Enabled"); button-label: _("Preferences"); action-name: "app.preferences"; } Adw.ViewStack _tab_stack { vexpand: true; hexpand: true; } }; [bottom] Adw.ViewSwitcherBar _switcher_bar { stack: _tab_stack; } }; }; } } } menu _primary_menu { section { item { custom: "themeswitcher"; } } section { submenu { label: _("_Sorting"); section { item { label: _("A-Z"); action: "win.view-sorting"; target: "az"; } item { label: _("Z-A"); action: "win.view-sorting"; target: "za"; } item { label: _("Date added (newest first)"); action: "win.view-sorting"; target: "added-date-new"; } item { label: _("Date added (oldest first)"); action: "win.view-sorting"; target: "added-date-old"; } item { label: _("Release date (newest first)"); action: "win.view-sorting"; target: "released-date-new"; } item { label: _("Release date (oldest first)"); action: "win.view-sorting"; target: "released-date-old"; } } section { item { label: _("Separate watched from unwatched"); action: 'win.separate-watched'; } item { label: _("Hide watched"); action: 'win.hide-watched'; } } } item { label: _("_Refresh"); action: "win.refresh"; } } section { item { label: _("_Import"); action: "app.import"; } item { label: _("_Export"); action: "app.export"; } } section { item { label: _("_Preferences"); action: "app.preferences"; } item { label: _("_Keyboard Shortcuts"); action: "win.show-help-overlay"; } item { label: _("_About Ticket Booth"); action: "app.about"; } } } menu _add_menu { item { label: _("From The Movie Database (TMDB)"); action: "win.add-tmdb"; } item { label: _("Manually"); action: "win.add-manual"; } } ticketbooth-1.1.1/src/ui/widgets/000077500000000000000000000000001475632104500167125ustar00rootroot00000000000000ticketbooth-1.1.1/src/ui/widgets/background_activity_row.blp000066400000000000000000000012341475632104500243330ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $BackgroundActivityRow: Adw.Bin { tooltip-text: bind template.title; map => $_on_map(); Box { orientation: horizontal; spacing: 12; Image _icon { icon-name: 'check-plain'; pixel-size: 24; } Box { orientation: vertical; vexpand: true; valign: center; spacing: 6; Label { label: bind template.title; halign: start; max-width-chars: 30; ellipsize: end; } ProgressBar _progress_bar { hexpand: true; } } } } ticketbooth-1.1.1/src/ui/widgets/background_indicator.blp000066400000000000000000000031011475632104500235570ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Gio 2.0; using Adw 1; template $BackgroundIndicator: Adw.Bin { MenuButton _btn { styles ["flat"] tooltip-text: _("Background Activities"); child: Overlay { [overlay] Adw.Spinner _spinner { visible: false; } Image _image { icon-name: 'check-plain'; } }; popover: Popover { styles ["menu"] child: Adw.ViewStack _stack { Adw.ViewStackPage { name: 'empty'; child: Adw.Clamp { child: Adw.StatusPage { styles ["compact"] title: _("No Background Activities"); icon-name: 'check-plain'; }; }; } Adw.ViewStackPage { name: 'filled'; child: ScrolledWindow { vexpand: true; ListView _list_view { orientation: vertical; model: NoSelection { model: Gio.ListStore _model {}; }; factory: BuilderListItemFactory { template ListItem { child: $BackgroundActivityRow { title: bind template.item as < $BackgroundActivity > .title; activity-type: bind template.item as < $BackgroundActivity > .activity-type; completed: bind template.item as < $BackgroundActivity > .completed; }; } }; } }; } }; }; } } ticketbooth-1.1.1/src/ui/widgets/episode_row.blp000066400000000000000000000033211475632104500217270ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $EpisodeRow: Adw.PreferencesRow { map => $_on_map(); Box { margin-bottom: 12; margin-top: 12; margin-start: 12; margin-end: 12; orientation: horizontal; hexpand: true; spacing: 24; Picture _still_picture { height-request: 100; width-request: 56; content-fit: fill; styles ["still"] } Box { orientation: vertical; hexpand: true; Label _title_lbl { halign: start; lines: 2; wrap: true; styles ["heading"] } Label _runtime_lbl { halign: start; styles ["dim-label"] } Label _overview { margin-top: 3; halign: start; label: bind template.overview; wrap: true; lines: 3; wrap-mode: word; ellipsize: end; } } Box { visible: bind template.show-controls; Button _watched_btn { visible: bind template.editable inverted; valign: center; clicked => $_on_watched_btn_clicked(); } Box { styles ["linked"] orientation: horizontal; visible: bind template.editable; halign: end; hexpand: true; Button _delete_btn { valign: center; icon-name: "user-trash-symbolic"; clicked => $_on_delete_btn_clicked(); } Button _edit_btn { valign: center; child: Adw.ButtonContent { icon-name: "document-edit"; label: _("Edit"); }; clicked => $_on_edit_btn_clicked(); } } } } } ticketbooth-1.1.1/src/ui/widgets/image_selector.blp000066400000000000000000000024151475632104500223750ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $ImageSelector: Adw.Bin { halign: center; map => $_on_map(); Overlay { height-request: 250; valign: center; halign: center; [overlay] Adw.Spinner _spinner { visible: false; } Overlay { halign: center; valign: center; [overlay] Button _edit_btn { icon-name: "document-edit"; tooltip-text: _("Edit poster"); halign: end; valign: end; margin-bottom: 6; margin-end: 6; styles ["circular", "osd"] clicked => $_on_edit_btn_clicked(); } [overlay] Revealer _delete_revealer { reveal-child: false; transition-type: crossfade; margin-end: 40; Button _delete_btn { icon-name: "user-trash-symbolic"; tooltip-text: _("Delete poster"); halign: end; valign: end; margin-bottom: 6; margin-end: 6; styles ["circular", "osd"] clicked => $_on_delete_btn_clicked(); } } Picture _poster_picture { content-fit: bind template.content-fit; styles ["poster"] } } } } ticketbooth-1.1.1/src/ui/widgets/poster_button.blp000066400000000000000000000062001475632104500223160ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $PosterButton: Box { orientation: vertical; halign: center; valign: start; map => $_on_map(); Adw.Clamp { maximum-size: 200; Button _poster_btn { clicked => $_on_poster_btn_clicked(); styles ["flat"] overflow: hidden; accessibility { labelled-by: _title_lbl; } Box { orientation: vertical; Overlay _poster_box { halign: center; [overlay] Adw.Spinner _spinner { height-request: 32; valign: center; } [overlay] Box _new_release_badge { margin-top: 6; margin-end: 6; orientation: vertical; visible: false; tooltip-text:_("The series has a new release"); Overlay { halign: end; valign: start; Image{ icon-name: "star-large-symbolic"; icon-size: large; } } } [overlay] Box _soon_release_badge { margin-top: 6; margin-end: 6; orientation: vertical; visible: false; tooltip-text:_("The series has a new release soon"); Overlay { halign: end; valign: start; Image{ icon-name: "hourglass-symbolic"; icon-size: large; } } } [overlay] Box _watched_badge { margin-top: 6; margin-end: 6; orientation: vertical; visible: false; tooltip-text:_("This title is marked as watched"); Overlay { halign: end; valign: start; Image{ icon-name: "check-round-outline-symbolic"; icon-size: large; } } } Picture _picture { width-request: 150; height-request: 225; content-fit: fill; styles ["poster"] } } Box { orientation: vertical; spacing: 3; Label _title_lbl { ellipsize: end; hexpand: true; halign: start; margin-top: 6; label: bind template.title; lines: 2; wrap: true; } Box { orientation: horizontal; spacing: 6; Label _year_lbl { label: bind template.year; halign: start; styles ["caption", "chip"] } Label _status_lbl { label: bind template.status; halign: start; styles ["caption", "chip"] } Label _watched_lbl { halign: start; visible: false; label: _("Watched"); styles ["caption", "chip"] } } } } } } } ticketbooth-1.1.1/src/ui/widgets/search_result_row.blp000066400000000000000000000041031475632104500231410ustar00rootroot00000000000000// Copyright (C) 2022 - 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $SearchResultRow: ListBoxRow { map => $_on_map(); css-name: "search_result_row"; hexpand: true; vexpand: true; activatable: false; child: Box { valign: start; vexpand: true; spacing: 12; orientation: horizontal; margin-top: 6; margin-bottom: 6; Overlay { [overlay] Adw.Spinner _poster_spinner { height-request: 32; width-request: 32; valign: center; } Picture _poster_picture { width-request: 100; height-request: 150; styles ["poster"] } } Box { orientation: vertical; Label _title_lbl { halign: start; ellipsize: end; hexpand: true; label: bind template.title; styles ["heading"] } Box _caption_box { orientation: horizontal; spacing: 12; halign: start; Label _year_lbl { hexpand: true; halign: start; label: bind template.year; styles ["caption", "chip"] visible: bind template.year-visible; } Label _media_type_lbl { label: bind template.media_type; styles ["caption", "chip"] } } Label _description { hexpand: true; margin-top: 6; halign: start; wrap: true; wrap-mode: word; label: bind template.description; lines: 4; ellipsize: end; } Box { orientation: horizontal; spacing: 12; valign: end; Button { child: Adw.ButtonContent _add_btn { label: _("Add to watchlist"); icon-name: "plus"; }; halign: start; vexpand: true; valign: end; clicked => $_on_add_btn_clicked(); styles ["suggested-action"] } Adw.Spinner _add_spinner { height-request: 16; visible: false; } } } }; } ticketbooth-1.1.1/src/ui/widgets/season_expander.blp000066400000000000000000000014501475632104500225670ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $SeasonExpander: Adw.ExpanderRow { title: bind template.season_title; map => $_on_map(); [prefix] Picture _poster { height-request: 112; width-request: 75; content-fit: fill; margin-top: 12; margin-bottom: 12; styles ["still"] } [suffix] Box { orientation: horizontal; valign: center; styles ["linked"] Button _delete_btn { icon-name: "user-trash-symbolic"; clicked => $_on_delete_btn_clicked(); } Button _edit_btn { valign: center; child: Adw.ButtonContent { icon-name: "document-edit"; label: _("Edit"); }; clicked => $_on_edit_btn_clicked(); } } } ticketbooth-1.1.1/src/ui/widgets/theme_switcher.blp000066400000000000000000000021751475632104500224300ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; template $ThemeSwitcher : Box { styles [ "themeswitcher", ] hexpand: true; Box box { hexpand: true; orientation: horizontal; spacing: 12; CheckButton system { styles [ "theme-selector", "system", ] visible: bind template.show-system; hexpand: true; halign: center; focus-on-click: false; tooltip-text: _("Follow system style"); notify::active => $_on_color_scheme_changed(); } CheckButton light { styles [ "theme-selector", "light", ] hexpand: true; halign: center; group: system; focus-on-click: false; tooltip-text: _("Light style"); notify::active => $_on_color_scheme_changed(); } CheckButton dark { styles [ "theme-selector", "dark", ] hexpand: true; halign: center; group: system; focus-on-click: false; tooltip-text: _("Dark style"); notify::active => $_on_color_scheme_changed(); } } } ticketbooth-1.1.1/src/ui/window.blp000066400000000000000000000006171475632104500172560ustar00rootroot00000000000000// Copyright (C) 2023 Alessandro Iepure // // SPDX-License-Identifier: GPL-3.0-or-later using Gtk 4.0; using Adw 1; template $TicketboothWindow: Adw.ApplicationWindow { default-width: 1024; default-height: 600; width-request: 400; height-request: 600; map => $_on_map(); close-request => $_on_close_request(); Adw.ViewStack _win_stack { vexpand: true; hexpand: true; } } ticketbooth-1.1.1/src/views/000077500000000000000000000000001475632104500157645ustar00rootroot00000000000000ticketbooth-1.1.1/src/views/__init__.py000066400000000000000000000000001475632104500200630ustar00rootroot00000000000000ticketbooth-1.1.1/src/views/content_view.py000066400000000000000000000263201475632104500210450ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging from gettext import gettext as _ from gi.repository import Adw, GObject, Gtk import src.providers.local_provider as local from .. import shared # type: ignore from ..models.movie_model import MovieModel from ..models.series_model import SeriesModel from ..pages.details_page import DetailsView from ..widgets.poster_button import PosterButton @Gtk.Template(resource_path=shared.PREFIX + '/ui/views/content_view.ui') class ContentView(Adw.Bin): """ This class represents the content grid view. Properties: None Methods: refresh(): Causes the view to update its contents Signals: None """ __gtype_name__ = 'ContentView' movie_view = GObject.Property(type=bool, default=True) icon_name = GObject.Property(type=str, default='movies') _stack = Gtk.Template.Child() _updating_status_lbl = Gtk.Template.Child() _title_lbl = Gtk.Template.Child() _flow_box = Gtk.Template.Child() _full_box = Gtk.Template.Child() _separated_box = Gtk.Template.Child() _unwatched_box = Gtk.Template.Child() _unwatched_flow_box = Gtk.Template.Child() _watched_box = Gtk.Template.Child() _watched_flow_box = Gtk.Template.Child() def __init__(self, movie_view: bool): super().__init__() self.movie_view = movie_view self.icon_name = 'movies' if self.movie_view else 'series' self._stack.set_visible_child_name('loading') self._load_content(self.movie_view) self._set_sorting_function() self._set_filter_function() shared.schema.connect('changed::view-sorting', self._on_sort_changed) shared.schema.connect('changed::separate-watched', self._on_separate_watched_changed) shared.schema.connect('changed::hide-watched', self._on_hide_watched_changed) shared.schema.connect('changed::search-query', self._on_search_enabled_changed) def _on_sort_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for the "changed" signal. Calls the function to set the sorting function on the FlowBox. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ self._set_sorting_function() def _on_separate_watched_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for the "changed" signal. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ self.refresh_view() def _on_hide_watched_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for the "changed" signal. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ self._set_filter_function() def _load_content(self, movie_view: bool) -> None: """ For each title currently in the db, creates a PosterButton and adds it to the FlowBox. Args: movie_view (bool): if true it will load movies, otherwise it will load series Returns: None """ # self._stack.set_visible_child_name('loading') if movie_view: content = local.LocalProvider.get_all_movies() else: content = local.LocalProvider.get_all_series() if not content: self._stack.set_visible_child_name('empty') return else: self._stack.set_visible_child_name('filled') for item in content: logging.debug( f'Created poster button for [{"movie" if self.movie_view else "TV series"}] {item.title}') btn = PosterButton(content=item) btn.connect('clicked', self._on_clicked) if not shared.schema.get_boolean('search-enabled') and shared.schema.get_boolean('separate-watched'): if item.watched: self._watched_flow_box.insert(btn, -1) else: self._unwatched_flow_box.insert(btn, -1) else: self._flow_box.insert(btn, -1) idx = 0 while self._flow_box.get_child_at_index(idx): self._flow_box.get_child_at_index(idx).set_focusable(False) idx += 1 idx = 0 while self._watched_flow_box.get_child_at_index(idx): self._watched_flow_box.get_child_at_index(idx).set_focusable(False) idx += 1 idx = 0 while self._watched_flow_box.get_child_at_index(idx): self._watched_flow_box.get_child_at_index(idx).set_focusable(False) idx += 1 self._full_box.set_visible(False) self._separated_box.set_visible(False) self._unwatched_box.set_visible(False) self._watched_box.set_visible(False) if not shared.schema.get_boolean('search-enabled') and shared.schema.get_boolean('separate-watched'): self._separated_box.set_visible(True) if self._watched_flow_box.get_child_at_index(0) is not None: self._watched_box.set_visible(True) if self._unwatched_flow_box.get_child_at_index(0) is not None: self._unwatched_box.set_visible(True) else: self._full_box.set_visible(True) # self._stack.set_visible_child_name('filled') def refresh_view(self) -> None: """ Causes the view to refresh its contents by replacing the content of the FlowBox. Args: None Returns: None """ # self._stack.set_visible_child_name('loading') self._flow_box.remove_all() self._watched_flow_box.remove_all() self._unwatched_flow_box.remove_all() self._load_content(self.movie_view) def _on_clicked(self, source: Gtk.Widget, content: MovieModel | SeriesModel) -> None: """ Callback for the "clicked" signal. Opens the details view for the selected content. Args: source (Gtk.Widget): widget that emited the signal movie (MovieModel): associated movie Returns: None """ logging.info( f'Clicked on [{"movie" if self.movie_view else "TV series"}] {content.title}') page = DetailsView(content, self) page.connect('deleted', lambda *args: self.refresh_view()) self.get_ancestor(Adw.NavigationView).push(page) def _set_sorting_function(self) -> None: """ Based on the current setting, sets the sorting function of the FlowBox. Args: None Returns; None """ match shared.schema.get_string('view-sorting'): case 'az': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().title > child2.get_child().title) - (child1.get_child().title < child2.get_child().title) ), None) case 'za': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().title < child2.get_child().title) - (child1.get_child().title > child2.get_child().title) ), None) case 'added-date-new': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().content.add_date < child2.get_child().content.add_date) - (child1.get_child().content.add_date > child2.get_child().content.add_date) ), None) case 'added-date-old': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().content.add_date > child2.get_child().content.add_date) - (child1.get_child().content.add_date < child2.get_child().content.add_date) ), None) case 'released-date-new': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().content.release_date < child2.get_child().content.release_date) - (child1.get_child().content.release_date > child2.get_child().content.release_date) ), None) case 'released-date-old': self._flow_box.set_sort_func(lambda child1, child2, user_data: ( (child1.get_child().content.release_date > child2.get_child().content.release_date) - (child1.get_child().content.release_date < child2.get_child().content.release_date) ), None) self._flow_box.invalidate_sort() def _set_filter_function(self) -> None: """ Based on the current setting, sets the filter function of the FlowBox. Args: None Returns; None """ if shared.schema.get_boolean('search-enabled'): if shared.schema.get_string('search-mode') == 'title': self._flow_box.set_filter_func( lambda child, user_data: ( shared.schema.get_string( 'search-query').lower() in child.get_child().content.title.lower() ), None) else: self._flow_box.set_filter_func( lambda child, user_data: ( any( shared.schema.get_string( 'search-query').title() in genre for genre in child.get_child().content.genres) ), None) self._flow_box.invalidate_filter() return if shared.schema.get_boolean('hide-watched'): self._flow_box.set_filter_func(lambda child, user_data: ( not child.get_child().content.watched), None) self._flow_box.invalidate_filter() return self._flow_box.set_filter_func(lambda child, user_data: True, None) self._flow_box.invalidate_filter() def _on_search_enabled_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for the "changed" signal. Refreshes the view when the search is enabled or disabled. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ self._title_lbl.set_label(_("Search results") if shared.schema.get_boolean( 'search-enabled') else _("Your Watchlist")) self.refresh_view() self._set_filter_function() ticketbooth-1.1.1/src/views/db_update_view.py000066400000000000000000000146611475632104500213270ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import locale import logging import os import sqlite3 import time from datetime import datetime, timedelta from gettext import gettext as _ from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore from ..models.movie_model import MovieModel from ..models.series_model import SeriesModel from ..providers.local_provider import LocalProvider as local from ..providers.tmdb_provider import TMDBProvider as tmdb @Gtk.Template(resource_path=shared.PREFIX + '/ui/views/db_update_view.ui') class DbUpdateView(Adw.Bin): """ This class represents the initial setup the app needs to offer full fuctionality. Properties: None Methods: None Signals: exit: emited when the view has completed its operations, either the required data was successfully downloaded \ or the user requested "offline mode" """ __gtype_name__ = 'DbUpdateView' _progress_bar = Gtk.Template.Child() _update_progress_page = Gtk.Template.Child() _notification_question = Gtk.Template.Child() _activate_btn = Gtk.Template.Child() _deactivate_btn = Gtk.Template.Child() _carousel = Gtk.Template.Child() _offline_btn = Gtk.Template.Child() _retry_check_btn = Gtk.Template.Child() __gsignals__ = { 'exit': (GObject.SIGNAL_RUN_FIRST, None, ()), } _cancellable = Gio.Cancellable.new() def __init__(self): super().__init__() @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Creates the directories and tables in the local db, sets the tmdb results language based on the locale, and attempts to download required data if connected to the Internet. Args: user_data (object or None): user data passed to the callback. Returns: None """ logging.info('Updating Database...') local.update_movies_table() local.update_series_table() logging.info('Added new Columns to Database') if shared.schema.get_boolean('offline-mode'): self.emit('exit') logging.info('Refetching Data from TMDB...') self.task = Gio.Task.new() self.task.run_in_thread( lambda*_:self._fetch_data_from_tmdb() ) @Gtk.Template.Callback('_on_offline_btn_clicked') def _on_offline_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Stops the background network check and sets the app in offline mode. An option to retry on next launch is provided. Args: user_data (object or None): user data passed to the callback. Returns: None """ self._cancellable.cancel() shared.schema.set_boolean('offline-mode', True) logging.info('[Update] Offline mode enabled') if not self._retry_check_btn.get_active(): shared.schema.set_boolean('db-needs-update', False) logging.info('[Update] Database update partially complete') logging.info('[Update] Database update not completed, retrying on next run') self.emit('exit') def _fetch_data_from_tmdb(self) : with sqlite3.connect(shared.db) as connection: movies = local.get_all_movies() series = local.get_all_series() total = len(movies) + len(series) counter = 0 for movie in movies: if not movie.manual: new_movie = MovieModel(tmdb.get_movie(movie.id)) #Check if the soon_release flag should be set, that is the case if the movie is set to release in less than 14 days if len(movie.release_date) > 0 and datetime.strptime(movie.release_date, '%Y-%m-%d') < datetime.now() + timedelta(days=14): # TODO make this a variable and sync with main_view.py #Writing to the local db since update_movie updates entry of the local db local.set_soon_release_status(movie.id, True, True) local.update_movie(movie, new_movie) counter += 1 self._progress_bar.set_fraction(counter/total) for serie in series: if not serie.manual: new_serie = SeriesModel(tmdb.get_serie(serie.id)) #Check if the soon_release flag should be set, that is the case if the next episode is less than 7 days away compare_date = new_serie.next_air_date if len(compare_date) > 0 and datetime.strptime(compare_date, '%Y-%m-%d') < datetime.now() + timedelta(days=7): # TODO make this a variable and sync with main_view.py #Writing to variable since update_series deletes local db entry and creates a new entry with flags from argument serie.soon_release = True local.update_series(serie, new_serie) counter += 1 self._progress_bar.set_fraction(counter/total) logging.info('Fetched Data from TMDB.') #Go to next page in the carousel index = int(self._carousel.get_position()) next_page = self._carousel.get_nth_page(index + 1) self._carousel.scroll_to(next_page, True) @Gtk.Template.Callback('_on_deactivate_btn_clicked') def _on_btn_deactivate_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Sets all activate_notification to false in local db and exits carousel Args: user_data (object or None): user data passed to the callback. Returns: None """ local.reset_activate_notification() shared.schema.set_boolean('db-needs-update', False) logging.debug(f'db update dialog: confim, deactivate notifications') self.emit('exit') @Gtk.Template.Callback('_on_activate_btn_clicked') def _on_btn_activate_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Exits carousel. Args: user_data (object or None): user data passed to the callback. Returns: None """ shared.schema.set_boolean('db-needs-update', False) self.emit('exit')ticketbooth-1.1.1/src/views/first_run_view.py000066400000000000000000000202451475632104500214060ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import locale import logging import os from gettext import gettext as _ from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore from ..models.language_model import LanguageModel from ..providers.local_provider import LocalProvider as local from ..providers.tmdb_provider import TMDBProvider as tmdb @Gtk.Template(resource_path=shared.PREFIX + '/ui/views/first_run_view.ui') class FirstRunView(Adw.Bin): """ This class represents the initial setup the app needs to offer full fuctionality. Properties: None Methods: None Signals: exit: emited when the view has completed its operations, either the required data was successfully downloaded \ or the user requested "offline mode" """ __gtype_name__ = 'FirstRunView' _heading_lbl = Gtk.Template.Child() _status_lbl = Gtk.Template.Child() _offline_btn = Gtk.Template.Child() _retry_check_btn = Gtk.Template.Child() __gsignals__ = { 'exit': (GObject.SIGNAL_RUN_FIRST, None, ()), } _cancellable = Gio.Cancellable.new() def __init__(self): super().__init__() @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Creates the directories and tables in the local db, sets the tmdb results language based on the locale, and attempts to download required data if connected to the Internet. Args: user_data (object or None): user data passed to the callback. Returns: None """ logging.info('First run setup in progress...') for path in [shared.background_dir, shared.poster_dir, shared.series_dir]: if not os.path.exists(path): os.makedirs(path) logging.info(f'[setup] Created folder {path}') local.create_tables() logging.info('[setup] Created db tables') language = locale.getdefaultlocale()[0].lower()[:2] # type: ignore shared.schema.set_string('tmdb-lang', language) logging.info(f'[Setup] Set TMDB language to {language}') self._update_ui(need_download=True) Gio.NetworkMonitor.get_default().can_reach_async( Gio.NetworkAddress.parse_uri('https://api.themoviedb.org', 80), self._cancellable, self._on_first_reach_done, None ) logging.info('[Setup] Checking network connection...') def _update_ui(self, need_download: bool) -> None: """ Updates the UI strings to reflect its state: - if need_download is TRUE, the UI tells the user that the Internet is needed and some data will be downloaded. Additionally it shows options to proceed offline. - if need_download is FALSE, the UI tells the user a generic message. Args: need_download (bool): selected messages to be shown as stated above. Returns: None """ if need_download: self._heading_lbl.set_label(_('Waiting for Network…')) self._status_lbl.set_label( _("For a complete experience, a download of 15 KB is required. However, if you are not connected to the Internet or don't want to wait, you can skip this step and continue offline without some features.")) self._offline_btn.set_visible(True) self._retry_check_btn.set_visible(True) else: self._heading_lbl.set_label(_('Getting things ready…')) self._status_lbl.set_label(_('Downloading data')) self._offline_btn.set_visible(False) self._retry_check_btn.set_visible(False) def _on_first_reach_done(self, source: GObject.Object | None, result: Gio.AsyncResult, data: object | None) -> None: """ Callback for asynchronous network check, reached after the first call. If the network is available, proced with the download, otherwise keep checking every second until it becomes available or the user goes in offline mode. Args: source (GObject.Object or None): the object the asynchronous operation was started with. result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): user data passed to the callback. Returns: None """ try: network = Gio.NetworkMonitor.get_default().can_reach_finish(result) except GLib.Error: network = None if network: logging.info('[Setup] Network present, staring download') self._download_languages() else: self._has_network = False logging.error( '[Setup] Network not present, retrying in 10 seconds') # Continue checking in a separate thread GLib.Thread.new(None, self._loop_check_network) def _loop_check_network(self) -> None: """ Function run in a separate thread to continously check for network connection every second until the operation is cancelled or the network is restored. If the network is restored, the download is completed and the thread killed. Args: None Returns: None """ while not (self._cancellable.is_cancelled() or self._has_network): GLib.usleep(10000000) Gio.NetworkMonitor.get_default().can_reach_async( Gio.NetworkAddress.parse_uri('https://api.themoviedb.org', 80), self._cancellable, self._on_loop_reach_done, None ) if self._has_network: logging.info('[Setup] Network present, staring download') self._download_languages() GLib.Thread.exit() def _on_loop_reach_done(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for asynchronous network check, reached during the looped check. It sets the network presence flag based on the current condition. Args: source (GObject.Object or None): the object the asynchronous operation was started with. result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): user data passed to the callback. Returns: None """ try: self._has_network = Gio.NetworkMonitor.get_default().can_reach_finish(result) except GLib.Error: self._has_network = False logging.error( '[Setup] Network not present, retrying in 10 seconds') def _download_languages(self) -> None: """ Completes the downlaod, stores the data in the db and sets the relevant GSettings. Args: None Results: None """ self._update_ui(need_download=False) languages = tmdb.get_languages() for lang in languages: local.add_language(LanguageModel(lang)) shared.schema.set_boolean('first-run', False) shared.schema.set_boolean('offline-mode', False) shared.schema.set_boolean('onboard-complete', True) logging.info('[Setup] First setup complete') self.emit('exit') @Gtk.Template.Callback('_on_offline_btn_clicked') def _on_offline_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Stops the background network check and sets the app in offline mode. An option to retry on next launch is provided. Args: user_data (object or None): user data passed to the callback. Returns: None """ self._cancellable.cancel() shared.schema.set_boolean('offline-mode', True) logging.info('[Setup] Offline mode enabled') if not self._retry_check_btn.get_active(): shared.schema.set_boolean('first-run', False) logging.info('[Setup] First setup partially complete') logging.info('[Setup] Setup not completed, retrying on next run') self.emit('exit') ticketbooth-1.1.1/src/views/main_view.py000066400000000000000000000550451475632104500203250ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import logging from datetime import datetime, timedelta from gettext import gettext as _ from gettext import pgettext as C_ from gettext import ngettext as N_ from gi.repository import Adw, Gio, GObject, Gtk from .. import shared # type: ignore from ..background_queue import (ActivityType, BackgroundActivity, BackgroundQueue) from ..models.movie_model import MovieModel from ..models.series_model import SeriesModel from ..providers.local_provider import LocalProvider as local from ..providers.tmdb_provider import TMDBProvider as tmdb from ..views.content_view import ContentView from ..widgets.theme_switcher import ThemeSwitcher @Gtk.Template(resource_path=shared.PREFIX + '/ui/views/main_view.ui') class MainView(Adw.Bin): """ This class represents the main view of the app. Properties: None Methods: refresh(): Causes the window to update its contents Signals: None """ __gtype_name__ = 'MainView' _tab_stack = Gtk.Template.Child() _show_search_btn = Gtk.Template.Child() _menu_btn = Gtk.Template.Child() _banner = Gtk.Template.Child() _background_indicator = Gtk.Template.Child() _search_bar = Gtk.Template.Child() _search_mode = Gtk.Template.Child() _search_entry = Gtk.Template.Child() _needs_refresh = '' def __init__(self, window): super().__init__() self.app = window.app self._tab_stack.add_titled_with_icon(ContentView(movie_view=True), 'movies', C_('Category', 'Movies'), 'movies' ) self._tab_stack.add_titled_with_icon(ContentView(movie_view=False), 'series', C_('Category', 'TV Series'), 'series' ) shared.schema.bind('win-tab', self._tab_stack, 'visible-child-name', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('offline-mode', self._banner, 'revealed', Gio.SettingsBindFlags.GET) shared.schema.bind('search-enabled', self._search_bar, 'search-mode-enabled', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('search-enabled', self._show_search_btn, 'active', Gio.SettingsBindFlags.DEFAULT) self._search_mode.connect( 'notify::selected', self._on_search_mode_changed) self._tab_stack.connect( 'notify::visible-child-name', self._check_needs_refresh) # Theme switcher (Adapted from https://gitlab.gnome.org/tijder/blueprintgtk/) self._menu_btn.get_popover().add_child(ThemeSwitcher(), 'themeswitcher') def _check_needs_refresh(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Checks if the tab switched to is pending a refresh and does it if needed. Args: pspec (GObject.ParamSpec): pspec of the changed property user_data (object or None): additional data passed to the callback Returns: None """ if self._tab_stack.get_visible_child_name() == 'movies' and self._needs_refresh == 'movies': self._tab_stack.get_child_by_name('movies').refresh_view() logging.info('Refreshed movies tab') self._needs_refresh = '' elif self._tab_stack.get_visible_child_name() == 'series' and self._needs_refresh == 'series': self._tab_stack.get_child_by_name('series').refresh_view() logging.info('Refreshed TV Series tab') self._needs_refresh = '' @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Calls method to check if an automatic content update is due. Args: user_data (object or None): additional data passed to the callback Returns: None """ if not shared.schema.get_boolean('first-run'): self._check_update_content() def _check_update_content(self) -> None: """ Checks if a content update is due, triggering it by adding background activities, if necessary. Args: None Returns: None """ last_check = datetime.fromisoformat( shared.schema.get_string('last-update')) frequency = shared.schema.get_string('update-freq') last_notification_check = datetime.fromisoformat( shared.schema.get_string('last-notification-update')) if last_notification_check + timedelta(hours=12) < datetime.now(): shared.schema.set_string( 'last-notification-update', datetime.now().strftime('%Y-%m-%d %H:%M')) logging.info('Starting automatic notification list update...') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.UPDATE, title=C_('Notification List activity title', 'Automatic update of notification list'), task_function=self._update_notification_list), on_done=self._on_notification_list_done) logging.debug( f'Last update done on {last_check}, frequency {frequency}') run = True match frequency: case 'day': if last_check + timedelta(days=1) < datetime.now(): logging.info('Starting automatic update...') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.UPDATE, title=C_('Background activity title', 'Automatic update'), task_function=self._update_content), on_done=self._on_update_done) case 'week': if last_check + timedelta(days=7) < datetime.now(): logging.info('Starting automatic update...') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.UPDATE, title=C_('Background activity title', 'Automatic update'), task_function=self._update_content), on_done=self._on_update_done) case 'month': if last_check + timedelta(days=30) < datetime.now(): logging.info('Starting automatic update...') BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.UPDATE, title=C_('Background activity title', 'Automatic update'), task_function=self._update_content), on_done=self._on_update_done) case 'never': return shared.schema.set_string( 'last-update', datetime.now().strftime('%Y-%m-%d')) def _update_content(self, activity: BackgroundActivity) -> None: """ Performs a content update on content added from TMDB. Args: activity (BackgroundActivity): the calling activity Returns: None """ movies = local.get_all_movies() if movies: for movie in movies: # type: ignore if not movie.manual: new_movie = MovieModel(tmdb.get_movie(movie.id)) local.update_movie(old=movie, new=new_movie) series = local.get_all_series() if series: for serie in series: # type: ignore if not serie.manual: new_serie = SeriesModel(tmdb.get_serie(serie.id)) local.update_series(old=serie, new=new_serie) def _on_update_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" self.refresh() logging.info('Automatic update done') activity.end() def _update_notification_list(self, activity: BackgroundActivity) -> None: """ Performs a content update on the notification list. Args: activity (BackgroundActivity): the calling activity Returns: None """ series = local.get_all_series_notification_list() new_release_series = [] soon_release_series = [] out_of_production_series = [] for serie in series: last_air_date = datetime.strptime(serie.last_air_date, '%Y-%m-%d') # Get the latest info for the series from TMDB new_serie = SeriesModel(tmdb.get_serie(serie.id)) new_last_air_date = datetime.strptime( new_serie.last_air_date, '%Y-%m-%d') if new_serie.next_air_date != '': new_next_air_date = datetime.strptime( new_serie.next_air_date, '%Y-%m-%d') else: # create bogus next air date if it does not exist new_next_air_date = datetime.now() + timedelta(days=10) # Check if the latest release is newer than the last saved in the database -> new release has come out. if last_air_date < new_last_air_date: # Set the new release status and add the series to the new releases list and set soon_release to false local.set_new_release_status(serie.id, True) local.set_soon_release_status(serie.id, False) local.set_recent_change_status(serie.id, True) new_release_series.append(new_serie) # we only save one, since we do not use it if more than one series has a new release new_release_series_span = datetime.now() - new_last_air_date # Check if the next air date is set to soon (7 days in the future) if datetime.now() + timedelta(days=7) > new_next_air_date: local.set_soon_release_status(serie.id, True) # if we also detect a considerable amount of time bewteen epsidoe notify user that the series has new releases coming soon. # 3 weeks are chosen to include the new streaming release model of two chunks a month apart but not spam the user for weekly or bi-weekly releases if new_next_air_date - timedelta(days=20) > last_air_date: local.set_recent_change_status(serie.id, True) soon_release_series.append(new_serie) soon_release_series_span = new_next_air_date - datetime.now() # Check if the series went from in production to not in production if serie.in_production == 1 and new_serie.in_production == 0: local.set_recent_change_status(serie.id, True) out_of_production_series.append(new_serie) local.set_notification_list_status(serie.id, False) # refetch serie to get all the correct flags that we set from the database serie = local.get_series_by_id(serie.id) local.update_series(serie, new_serie) movies = local.get_all_movies_notification_list() new_release_movies = [] soon_release_movies = [] for movie in movies: # Get the latest info for the movie from TMDB new_movie = MovieModel(tmdb.get_movie(movie.id)) release_date = datetime.strptime( new_movie.release_date, '%Y-%m-%d') if release_date < datetime.now(): local.set_recent_change_status(movie.id, True, movie=True) local.set_new_release_status(movie.id, True, movie=True) local.set_soon_release_status(movie.id, False, movie=True) if not movie.new_release: # if new_release was not set send a notification new_release_movies_span = datetime.now() - release_date new_release_movies.append(new_movie) elif release_date < datetime.now() + timedelta(days=14): local.set_recent_change_status(movie.id, True, movie=True) local.set_soon_release_status(movie.id, True, movie=True) if not movie.soon_release: # if soon_release was not set send a notification soon_release_movies_span = release_date - datetime.now() soon_release_movies.append(new_movie) # For movies we do not need to refetch the movie from the local db since the new data gets inserted by SQL UPDATE local.update_movie(movie, new_movie) def length_check(x): return len(x) > 0 count = length_check(new_release_movies) + length_check(new_release_series) + length_check( soon_release_movies) + length_check(soon_release_series) + length_check(out_of_production_series) if count == 0: return elif count == 1: if new_release_series: if len(new_release_series) == 1: # TRANSLATOR: {title} is the title of the series title = _("New release for {title}").format( title=new_release_series[0].title) # TRANSLATOR: {title} is the title of the series and {days} the number of days body = N_("A new episode of {title} was released {days} day ago.", "A new episode of {title} was released {days} days ago.", new_release_series_span.days).format(title=new_release_series[0].title, days=new_release_series_span.days) else: # TRANSLATOR: {num} is the number of TV Series title = _("New release for {num} TV series on your watchlist").format( num=len(new_release_series)) series = ", ".join(new.title for new in new_release_series) # TRANSLATOR: {series} is a list of TV series seperated by a comma body = _("The TV Series are {series}.").format( series=series) if soon_release_series: if len(soon_release_series) == 1: # TRANSLATOR: {title} is the title of the series with a new episode soon title = _("{title} will have a release soon").format( title=soon_release_series[0].title) # TRANSLATOR: {title} is the title of the series and {days} the number of days body = N_("A new episode will release in {days} day.", "A new episode will release in {days} days.", soon_release_series_span.days).format( title=soon_release_series[0].title, days=soon_release_series_span.days) else: # TRANSLATOR: {num} is the number of TV Series title = _("{num} TV Series on your watchlist will have a new episode soon").format( num=len(soon_release_series)) series = ", ".join( soon.title for soon in soon_release_series) # TRANSLATOR: {series} is a list of all series affected seperated by a comma body = _("The TV Series are {series}.").format( series=series) if out_of_production_series: if len(out_of_production_series) == 1: # TRANSLATOR: {title} is the title of the series that has gone out of production title = _("{title} has gone out of production").format( title=out_of_production_series[0].title) # TRANSLATOR: {title} is the title of the series that has gone out of production body = _("{title} has wrapped up its run. Now is the perfect time to revisit your favorite moments or find the next binge!") else: # TRANSLATOR: {num} is the number of TV Series title = _("{num} TV Series of your watchlist have gone out of production").format( num=len(out_of_production_series)) series = ", ".join( out.title for out in out_of_production_series) # TRANSLATOR: {series} is a list of all series affected seperated by a comma body = _("The TV Series are {series}.").format( series=series) if new_release_movies: if len(new_release_movies) == 1: # TRANSLATOR: {title} is the title of the movie that has had its release title = _("{title} has had its release!").format( title=new_release_movies[0].title) # TRANSLATOR: {title} is the title of the series and {days} the number of days body = N_("{title} was released {days} day ago.", "{title} was released {days} days ago.", new_release_movies_span.days).format( title=new_release_movies[0].title, days=new_release_movies_span.days) else: title = _("{num} movies on your watchlist have had their releases.").format( num=len(new_release_movies)) movies = ", ".join(new.title for new in new_release_movies) # TRANSLATOR: {movies} is a list of all movies affected seperated by a comma body = _("The movies are {movies}.").format(movies=movies) if soon_release_movies: if len(soon_release_movies) == 1: # TRANSLATOR: {title} is the title of the movie that will have its release soon title = _("{title} will have its release soon!").format( title=soon_release_movies[0].title) # TRANSLATOR: {title} is the title of the movie and {days} the number of days body = N_("{title} will have its release in {days} day.", "{title} will have its release in {days} days.", soon_release_movies_span.days).format( title=soon_release_movies[0].title, days=soon_release_movies_span.days) else: # TRANSLATOR: {num} is the number of movies title = _("{num} movies on your watchlist will have their releases soon") movies = ", ".join(soon.title for soon in soon_release_movies) # TRANSLATOR: {movies} will be list of all series affected seperated by a comma body = _("The movies are {movies}.").format(movies=movies) notification = Gio.Notification.new(title) notification.set_body(body) self.app.send_notification(None, notification) else: count_movies = len(new_release_movies) + len(soon_release_movies) count_series = len( new_release_series) + len(soon_release_series) + len(out_of_production_series) # TRANSLATOR: {num} is the number of affected items title = _("{num} items of your watchlist have an update").format( num=count_movies + count_series) if count_movies > 0 and count_series > 0: # TRANSLATOR: {count_movies} is the number of movies movie = N_("These updates affect {count_movies} movie", "These updates affect {count_movies} movies", count_movies) # TRANSLATOR: the connector between the two parts of the sentence (foo and bar) connector = _(" and ") # TRANSLATOR: {count_series} is the number of series series = N_(" {count_series} TV serie", " {count_series} TV series", count_series) body = f"{movie}{connector}{series}." elif count_movies > 0: # TRANSLATOR: {count_movies} is the number of movies body = N_("These updates affect {count_movies} movie", "These updates affect {count_movies} movies", count_movies) elif count_series > 0: # TRANSLATOR: {count_series} is the number of series body = N_("These updates affect {count_series} TV serie", "These updates affect {count_series} TV series", count_series) notification = Gio.Notification.new(title) notification.set_body(body) self.app.send_notification(None, notification) def _on_notification_list_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" self.refresh() logging.info('Automatic notification list update done') activity.end() def refresh(self) -> None: """ Refreshes the visible window. Args: None Returns: None """ if self._tab_stack.get_visible_child_name() == 'movies': self._tab_stack.get_child_by_name('movies').refresh_view() logging.info('Refreshed movies tab') self._needs_refresh = 'series' else: self._tab_stack.get_child_by_name('series').refresh_view() logging.info('Refreshed TV series tab') self._needs_refresh = 'movies' @Gtk.Template.Callback() def _on_searchentry_search_changed(self, user_data: GObject.GPointer | None) -> None: shared.schema.set_string('search-query', self._search_entry.get_text()) @Gtk.Template.Callback() def _on_search_btn_toggled(self, user_data: GObject.GPointer | None) -> None: shared.schema.set_boolean( 'search-enabled', self._show_search_btn.get_active()) shared.schema.set_string('search-query', '') def _on_search_mode_changed(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: if self._search_mode.get_selected() == 0: shared.schema.set_string('search-mode', 'title') else: shared.schema.set_string('search-mode', 'genre') ticketbooth-1.1.1/src/views/meson.build000066400000000000000000000006031475632104500201250ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) viewsdir = join_paths(pkgdatadir, 'src/views') sources = [ '__init__.py', 'main_view.py', 'first_run_view.py', 'db_update_view.py', 'content_view.py', ] install_data(sources, install_dir: viewsdir) ticketbooth-1.1.1/src/widgets/000077500000000000000000000000001475632104500162755ustar00rootroot00000000000000ticketbooth-1.1.1/src/widgets/__init__.py000066400000000000000000000001251475632104500204040ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later ticketbooth-1.1.1/src/widgets/background_activity_row.py000066400000000000000000000066121475632104500235760ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Adw, GObject, Gtk from .. import shared # type: ignore @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/background_activity_row.ui') class BackgroundActivityRow(Adw.Bin): """ This class represents a row in the BackgroundIndicator popover. Properties: title (str): a title activity_type (str): an activity type, name as in ActivityType completed (bool): indicates if the activity is completed Methods: None Signals: None """ __gtype_name__ = 'BackgroundActivityRow' title = GObject.Property(type=str, default='') activity_type = GObject.Property(type=str, default='') completed = GObject.Property(type=bool, default=False) has_error = GObject.Property(type=bool, default=False) _icon = Gtk.Template.Child() _progress_bar = Gtk.Template.Child() def __init__(self): super().__init__() self.connect('notify::completed', self._on_complete) @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Sets the icon based on the completion status and activity type, and starts the progress bar. Args: user_data (object or None): additional data passed to the callback Returns: None """ if not self.completed: match self.activity_type: case 'ADD': self._icon.set_from_icon_name('plus') case 'REMOVE': self._icon.set_from_icon_name('user-trash-symbolic') case 'UPDATE': self._icon.set_from_icon_name('update') GObject.timeout_add(500, self._on_timeout, None) else: if self.has_error: self._progress_bar.add_css_class('progress_error') self._icon.set_from_icon_name('warning') else: self._progress_bar.add_css_class('progress_complete') self._icon.set_from_icon_name('check-plain') self._progress_bar.set_fraction(1) def _on_timeout(self, user_data: object | None) -> bool: """ Callback for GObject.timeout_add. Pulses the progress bar. Args: user_data (object or None): additional data passed to the callback Returns: True if the timeout should be called again, False otherwise """ if not self.completed: self._progress_bar.pulse() return True else: return False def _on_complete(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for "notify::completed" signal. Sets the icon and progres bar to show a completed status, updates the background indicator. Args: pspec (GObject.ParamSpec): The GParamSpec of the property which changed user_data (object or None): additional data passed to the callback Returns: None """ self._icon.set_from_icon_name('check-plain') self._progress_bar.set_fraction(1) if self.get_ancestor(Adw.ApplicationWindow): self.get_ancestor(Adw.ApplicationWindow).activate_action( 'win.update-backgroud-indicator') ticketbooth-1.1.1/src/widgets/background_indicator.py000066400000000000000000000042231475632104500230230ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Adw, Gio, GObject, Gtk from .. import shared # type: ignore from ..background_queue import BackgroundQueue @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/background_indicator.ui') class BackgroundIndicator(Adw.Bin): """ This class represents the indicator for background activities. Properties: queue (Gio.ListStore): the queue Methods: refresh(): updates the icon button Signals: None """ __gtype_name__ = 'BackgroundIndicator' queue = GObject.Property(type=Gio.ListStore) _stack = Gtk.Template.Child() _model = Gtk.Template.Child() _image = Gtk.Template.Child() _spinner = Gtk.Template.Child() _list_view = Gtk.Template.Child() def __init__(self): super().__init__() self.queue = BackgroundQueue.get_queue() self._spinner.bind_property('visible', self._image, 'visible', GObject.BindingFlags.INVERT_BOOLEAN) self.queue.connect('notify::n-items', self._on_queue_change) def _on_queue_change(self, pspec: GObject.ParamSpec, user_data: object | None) -> None: """ Callback for "notify::n-items" signal. Updates the model and refreshes the indicator. Args: pspec (GObject.ParamSpec): The GParamSpec of the property which changed user_data (object or None): additional data passed to the callback Returns: None """ if self.queue.get_property('n-items') > 0: self._model.remove_all() for activity in self.queue: self._model.append(activity) self._stack.set_visible_child_name('filled') self.refresh() def refresh(self) -> None: """ Checks the activities and shows a spinner as the button icon if at least one activity is running. If all activities are completed, the icon is set to a check mark. Args: None Returns: None """ self._spinner.set_visible(not all(activity.completed for activity in self.queue)) ticketbooth-1.1.1/src/widgets/episode_row.py000066400000000000000000000273741475632104500212030ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gettext import gettext as _ from gettext import pgettext as C_ from gi.repository import Adw, Gio, GObject, Gtk import src.dialogs.edit_season_dialog as dialog from .. import shared # type: ignore from ..models.episode_model import EpisodeModel from ..pages.edit_episode_page import EditEpisodeNavigationPage from ..providers.local_provider import LocalProvider as local @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/episode_row.ui') class EpisodeRow(Adw.PreferencesRow): """ Widget that represents an episode inside the season expander row. Properties: title (str): episode title episode_number (int): episode number in a season runtime (int): episode runtime in minutes overview (str): episode overview still_uri (str): episode still image uri editable (bool): whether or not to show delete and edit buttons instead of the "watched" checkbutton show_controls (bool): whether or not to show the suffix widgets Methods: None Signals: toggled(active: bool): emited when the user toggles the checkbox """ __gtype_name__ = 'EpisodeRow' id = GObject.Property(type=str, default='') title = GObject.Property(type=str, default='') episode_number = GObject.Property(type=int, default=0) runtime = GObject.Property(type=int, default=0) overview = GObject.Property(type=str, default='') still_uri = GObject.Property(type=str, default='') editable = GObject.Property(type=bool, default=False) show_controls = GObject.Property(type=bool, default=True) watched = GObject.Property(type=bool, default=False) small_controls = GObject.Property(type=bool, default=False) __gsignals__ = { 'watched-clicked': (GObject.SIGNAL_RUN_FIRST, None, ()), } _still_picture = Gtk.Template.Child() _runtime_lbl = Gtk.Template.Child() _title_lbl = Gtk.Template.Child() _watched_btn = Gtk.Template.Child() def __init__(self, episode: EpisodeModel | None = None, id: str = '', title: str = '', episode_number: int = 0, runtime: int = 0, overview: str = '', still_uri: str = '', watched: bool = False, editable: bool = False, show_controls: bool = True, small_controls: bool = False): super().__init__() if episode: self.id = episode.id self.title = episode.title self.episode_number = episode.number self.runtime = episode.runtime self.overview = episode.overview self.still_uri = episode.still_path self.watched = episode.watched else: self.id = id self.title = title self.episode_number = episode_number self.runtime = runtime self.overview = overview self.still_uri = still_uri self.watched = watched self.editable = editable self.show_controls = show_controls self.small_controls = small_controls @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Sets the still image and title/runtime entries. Args: user_data (object or None): additional data passed to the callback Returns: None """ if not self.editable and self.show_controls: self.watched = local.get_episode_by_id( self.id).watched # type: ignore if self.small_controls: self._still_picture.set_visible(False) else: self._still_picture.set_file(Gio.File.new_for_uri(self.still_uri)) self._title_lbl.set_text(f'{self.episode_number}. {self.title}') self._runtime_lbl.set_text(self._format_runtime(self.runtime)) if self.small_controls: if self.watched: self._watched_btn.set_icon_name('check-plain') else: self._watched_btn.set_icon_name('watchlist') else: btn_content = Adw.ButtonContent() if self.watched: btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') self._watched_btn.set_child(btn_content) @Gtk.Template.Callback('_on_watched_btn_clicked') def _on_watched_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Toggles the watched property of the associated episode in the db. The "watched-clicked" signal is emited after this callback is completed. Args: user_data (object or None): additional data passed to the callback Returns: None """ local.mark_watched_episode(self.id, not self.watched) self.watched = not self.watched if self.small_controls: if self.watched: self._watched_btn.set_icon_name('check-plain') else: self._watched_btn.set_icon_name('watchlist') else: btn_content = Adw.ButtonContent() if self.watched: btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') self._watched_btn.set_child(btn_content) self.emit('watched-clicked') def _format_runtime(self, runtime: int) -> str: """ Formats the runtime in hours and minutes. Args: runtime (str): runtime in minutes Returns: formatted duration string in hours and minutes """ h, m = divmod(runtime, 60) if h > 0: # TRANSLATORS: {h} and {m} are the runtime hours and minutes respectively return _('{h}h {m}min').format(h=h, m=m) else: # TRANSLATORS: {m} is the runtime minutes return _('{m}min').format(m=m) @Gtk.Template.Callback('_on_edit_btn_clicked') def _on_edit_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Shows the "edit episode" page. Args: user_data (object or None): user data passed to the callback. Returns: None """ edit_episode_page = EditEpisodeNavigationPage(title=self.title, episode_number=self.episode_number, runtime=self.runtime, overview=self.overview, still_uri=self.still_uri, watched=self.watched) edit_episode_page.connect('edit-saved', self._on_episode_saved) self.get_ancestor(Adw.NavigationView).push(edit_episode_page) def _on_episode_saved(self, source: Gtk.Widget, title: str, episode_number: int, runtime: int, overview: str, still_uri: str, watched: bool) -> None: """ Callback for "edit-saved" signal. Appends the recieved data as a tuple in the episodes list after removing the changed one and updates the ui. Args: source (Gtk.Widget): caller widget title (str): episode title episode_number (int): episode number runtime (int): episode runtime in minutes overview (str): episode overview still_uri (str): episode still uri Returns: None """ parent = self.get_ancestor(dialog.EditSeasonDialog) old_episode = parent.get_episode(self.title, self.episode_number, self.runtime, self.overview, self.still_uri) parent._episodes.remove(old_episode) parent.update_episodes_ui() parent._episodes.append( (title, episode_number, runtime, overview, still_uri, watched)) parent.update_episodes_ui() @Gtk.Template.Callback('_on_delete_btn_clicked') def _on_delete_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Asks the user for a confirmation after a delete request. Args: user_data (object or None): additional data passed to the callback Returns: None """ # TRANSLATORS: {title} is the showed content's title dialog = Adw.AlertDialog.new( heading=C_('alert dialog heading', 'Delete {title}?').format( title=f'{self.episode_number}. {self.title}'), body=C_('alert dialog body', 'All changes to this episode will be lost.') ) dialog.add_response('cancel', C_('alert dialog action', '_Cancel')) dialog.add_response('delete', C_('alert dialog action', '_Delete')) dialog.set_default_response('delete') dialog.set_close_response('cancel') dialog.set_response_appearance( 'delete', Adw.ResponseAppearance.DESTRUCTIVE) dialog.choose(self, None, self._on_alert_dialog_choose, None) def _on_alert_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the alert dialog. Finishes the async operation and retrieves the user response. If the later is positive, deletes the episode from the list and updates the ui. Args: source (Gtk.Widget): object that started the async operation result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cancel': return parent = self.get_ancestor(dialog.EditSeasonDialog) old_episode = parent.get_episode(self.title, self.episode_number, self.runtime, self.overview, self.still_uri) parent._episodes.remove(old_episode) parent.update_episodes_ui() def set_watched_btn(self, watched: bool) -> None: """ Updates the watched button label and icon. Args: watched (bool): status to set Returns: None """ if self.small_controls: if watched: self._watched_btn.set_icon_name('check-plain') else: self._watched_btn.set_icon_name('watchlist') else: btn_content = Adw.ButtonContent() if watched: btn_content.set_label(_('Watched')) btn_content.set_icon_name('check-plain') else: btn_content.set_label(_('Mark as Watched')) btn_content.set_icon_name('watchlist') self._watched_btn.set_child(btn_content) ticketbooth-1.1.1/src/widgets/image_selector.py000066400000000000000000000112441475632104500216330ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/image_selector.ui') class ImageSelector(Adw.Bin): """ This class represents the image selector and previewer with options to open a file and, if one is already opened, to delete the selection. Properties: content-fit (Gtk.ContentFit): content fit for the image Methods: set_file(file: Gio.File): sets the shown file get_uri(): gets the uri for the shown file Signals: None """ __gtype_name__ = 'ImageSelector' content_fit = GObject.Property(type=Gtk.ContentFit, default=Gtk.ContentFit.FILL) shown_image = GObject.Property(type=str, default=f'resource://{shared.PREFIX}/blank_poster.jpg') blank_image = GObject.Property(type=str, default=f'resource://{shared.PREFIX}/blank_poster.jpg') _poster_picture = Gtk.Template.Child() _edit_btn = Gtk.Template.Child() _spinner = Gtk.Template.Child() _delete_revealer = Gtk.Template.Child() def __init__(self): super().__init__() @Gtk.Template.Callback('_on_map') def _on_map(self, user_data): self._poster_picture.set_file(Gio.File.new_for_uri(self.shown_image)) @Gtk.Template.Callback('_on_edit_btn_clicked') def _on_edit_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Setups and shows a file chooser dialog to choose a new image. Args: user_data (object or None): additional data passed to the callback Returns: None """ self._edit_btn.set_sensitive(False) self._spinner.set_visible(True) file_filter_store = Gio.ListStore.new(Gtk.FileFilter) file_filter = Gtk.FileFilter() file_filter.add_pixbuf_formats() file_filter_store.append(file_filter) self.dialog = Gtk.FileDialog.new() self.dialog.set_modal(True) self.dialog.set_filters(file_filter_store) self.dialog.open(self.get_ancestor(Gtk.Window), None, self._on_file_open_complete, None) def _on_file_open_complete(self, source: Gtk.Widget, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the file dialog. Finishes the file selection and, if successfull, shows the new selected image. Args: source (Gtk.Widget): caller widget result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ try: poster_file = self.dialog.open_finish(result) except GLib.GError: poster_file = None if poster_file: self.shown_image = poster_file.get_uri() self._poster_picture.set_file(poster_file) self._delete_revealer.set_reveal_child(True) self._spinner.set_visible(False) self._edit_btn.set_sensitive(True) @Gtk.Template.Callback('_on_delete_btn_clicked') def _on_delete_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Restores the blank image and hides the delete button. Args: user_data (object or None): additional data passed to the callback Returns: None """ self.shown_image = self.blank_image self._poster_picture.set_file(Gio.File.new_for_uri(self.shown_image)) self._delete_revealer.set_reveal_child(False) def set_blank_image(self, image_uri: str) -> None: """ Sets the blank image and shows it. Args: image_uri (str): uri to use Returns: None """ self.blank_image = image_uri self.shown_image = self.blank_image self._poster_picture.set_file(Gio.File.new_for_uri(self.shown_image)) def set_image(self, image_uri: str) -> None: """ Sets the image. Args: image_uri (str): uri to use Returns: None """ self.shown_image = image_uri self._poster_picture.set_file(Gio.File.new_for_uri(self.shown_image)) self._delete_revealer.set_reveal_child(True) def get_uri(self) -> str: """ Returns the shown image uri. Args: None Returns: string with the uri """ return self._poster_picture.get_file().get_uri() ticketbooth-1.1.1/src/widgets/meson.build000066400000000000000000000007731475632104500204460ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) widgetsdir = join_paths(pkgdatadir, 'src/widgets') sources = [ '__init__.py', 'theme_switcher.py', 'poster_button.py', 'search_result_row.py', 'episode_row.py', 'image_selector.py', 'season_expander.py', 'background_indicator.py', 'background_activity_row.py', ] install_data(sources, install_dir: widgetsdir) ticketbooth-1.1.1/src/widgets/poster_button.py000066400000000000000000000102761475632104500215640ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gi.repository import Gio, GObject, Gtk from pathlib import Path from .. import shared # type: ignore from ..models.movie_model import MovieModel from ..models.series_model import SeriesModel @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/poster_button.ui') class PosterButton(Gtk.Box): """ Widget shown in the main view with poster, title, and release year. Properties: title (str): content's title year (str): content's release year tmdb_id (str): content's tmdb id poster_path (str): content's poster uri Methods: None Signals: clicked(content: MovieModel or SeriesModel): emited when the user clicks on the widget """ __gtype_name__ = 'PosterButton' _poster_box = Gtk.Template.Child() _picture = Gtk.Template.Child() _spinner = Gtk.Template.Child() _year_lbl = Gtk.Template.Child() _status_lbl = Gtk.Template.Child() _watched_lbl = Gtk.Template.Child() _new_release_badge = Gtk.Template.Child() _soon_release_badge = Gtk.Template.Child() _watched_badge = Gtk.Template.Child() # Properties title = GObject.Property(type=str, default='') year = GObject.Property(type=str, default='') status = GObject.Property(type=str, default='') tmdb_id = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') watched = GObject.Property(type=bool, default=False) content = GObject.Property(type=object, default=None) __gsignals__ = { 'clicked': (GObject.SIGNAL_RUN_FIRST, None, (object,)), } def __init__(self, content: MovieModel | SeriesModel): super().__init__() self.activate_notification = content.activate_notification self.title = content.title self.badge_color_light = content.color self.year = content.release_date[0:4] if content.release_date else None self.tmdb_id = content.id self.poster_path = content.poster_path self.watched = content.watched self.status = content.status self.new_release = content.new_release self.soon_release = content.soon_release self.recent_change = content.recent_change self.content = content @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for the 'map' signal. Sets images and hides release year label if not present. Args: user_data (object or None): data passed to the callback Returns: None """ self._picture.set_file(Gio.File.new_for_uri(self.poster_path)) self._spinner.set_visible(False) badge_visible = False if self.activate_notification: if self.recent_change: self._poster_box.add_css_class("pulse") self._picture.add_css_class("shadow") if self.new_release: self._new_release_badge.set_visible(True) badge_visible = True if self.badge_color_light: self._new_release_badge.add_css_class("light") else: self._new_release_badge.add_css_class("dark") elif self.soon_release: self._soon_release_badge.set_visible(True) badge_visible = True if self.badge_color_light: self._soon_release_badge.add_css_class("light") else: self._soon_release_badge.add_css_class("dark") if not self.year: self._year_lbl.set_visible(False) if self.status == '': self._status_lbl.set_visible(False) if self.watched and not badge_visible: self._watched_badge.set_visible(True) if self.badge_color_light: self._watched_badge.add_css_class("light") else: self._watched_badge.add_css_class("dark") @Gtk.Template.Callback('_on_poster_btn_clicked') def _on_poster_btn_clicked(self, user_data: object | None) -> None: self.emit('clicked', self.content) ticketbooth-1.1.1/src/widgets/search_result_row.py000066400000000000000000000217501475632104500224060ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import logging from gettext import gettext as _ from gettext import pgettext as C_ import requests from gi.repository import Adw, Gio, GLib, GObject, Gtk from .. import shared # type: ignore from ..background_queue import (ActivityType, BackgroundActivity, BackgroundQueue) from ..providers.local_provider import LocalProvider as local @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/search_result_row.ui') class SearchResultRow(Gtk.ListBoxRow): """ Widget used to show a search result from TMDB in the search window. Properties: title (str): a title year (str): a release year description (str): a description poster_path (str): an API endpoint for a poster tmdb_id (int): a TMDB id media_type (str): a media type year_visible (bool): whether or not to show the release year Methods: None Signals: None """ __gtype_name__ = 'SearchResultRow' _poster_picture = Gtk.Template.Child() _poster_spinner = Gtk.Template.Child() _media_type_lbl = Gtk.Template.Child() _add_btn = Gtk.Template.Child() _add_spinner = Gtk.Template.Child() tmdb_id = GObject.Property(type=int, default=0) title = GObject.Property(type=str, default='') year = GObject.Property(type=str, default='') description = GObject.Property(type=str, default='') poster_path = GObject.Property(type=str, default='') media_type = GObject.Property(type=str, default='') year_visible = GObject.Property(type=bool, default=False) def __init__(self): super().__init__() @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for the "map" signal. Sets the visibility of the release year, the media type label and the poster to show. Additionally calls method in another thread to check if the content is already in db. Args: user_data (object or None): user data passed to the callback Returns: None """ logging.debug( f'Result row for [{"movie" if self.media_type == "movie" else "TV series"}] {self.title}, {self.year} ({self.poster_path})') if self.year: self.year_visible = True if self.media_type == 'movie': self._media_type_lbl.set_label(C_('Category', 'Movie')) else: self._media_type_lbl.set_label(C_('Category', 'TV Series')) self._poster_spinner.set_visible(True) self._poster_picture.set_file(self._get_poster_file()) self._check_in_db() def _check_in_db(self) -> None: """ Checks if the content is already in db and disables the 'add' button. Args: thread_data (object or None): data passed to the thread Returns: None """ if local.get_movie_by_id(self.tmdb_id) or local.get_series_by_id(self.tmdb_id): self._add_btn.set_label(_('Already in your watchlist')) self._add_btn.set_icon_name('check-plain') self._add_btn.set_sensitive(False) def _get_poster_file(self) -> None | Gio.File: """ Get the associated poster image. Files can be retrieved from Internet or from local storage if already downloaded in the past. In case no image is found, a blank poster will be returned. The retrieval is done asynchronously. Args: None Returns: None or a Gio.File containing an image """ if self.poster_path: Gio.Task.new(self, None, self._on_get_poster_done, None).run_in_thread(self._get_poster_thread) else: self._poster_spinner.set_visible(False) return Gio.File.new_for_uri(f'resource://{shared.PREFIX}/blank_poster.jpg') def _on_get_poster_done(self, source_widget: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the async poster retrieval. Hides the spinner and shows the poster. Args: source (GObject.Object or None): the object the asynchronous operation was started with. result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): user data passed to the callback Returns: None """ poster = self._get_poster_file_finish(result, self) self._poster_spinner.set_visible(False) self._poster_picture.set_file(poster) @Gtk.Template.Callback('_on_add_btn_clicked') def _on_add_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Adds a background activity to add content to the local db. Args: user_data (object or None): user data passed to the callback Returns: None """ logging.info( f'Clicked result for [{"movie" if self.media_type == "movie" else "TV series"}] {self.title}, {self.year}') self._add_spinner.set_visible(True) self._add_btn.set_sensitive(False) BackgroundQueue.add( activity=BackgroundActivity( activity_type=ActivityType.ADD, title=C_('Background activity title', 'Add {title}').format(title=self.title), task_function=self._add_content_to_db), on_done=self._on_add_done) def _add_content_to_db(self, activity: BackgroundActivity) -> None: """ Adds the associated title to the corresponding table in the db. Disables the 'add' button when done. Args: activity (BackgroundActivity): the calling activity Returns: None """ try: local.add_content(id=self.tmdb_id, media_type=self.media_type) except ConnectionError: activity.set_error(True) def _on_add_done(self, source: GObject.Object, result: Gio.AsyncResult, cancellable: Gio.Cancellable, activity: BackgroundActivity): """Callback to complete async activity""" activity.activity_finish(result, self) self._add_btn.set_label(_('Already in your watchlist')) self._add_btn.set_icon_name('check-plain') self._add_spinner.set_visible(False) # Try getting root window and refreshing. If root is gone, use application instance if self.get_root(): self.get_root().activate_action('win.refresh', None) else: app = Gio.Application.get_default() if app: app.props.active_window.activate_action('win.refresh') activity.end() def _get_poster_thread(self, task: Gio.Task, source_object: GObject.Object, task_data: object | None, cancelable: Gio.Cancellable | None) -> None: """ Wraper around a blocking function to run it as a non-blocking. Args: task (Gio.Task): the Gio.Task source_object (GObject.Object): task's source object task_data (object or None): task's task data cancellable (Gio.Cancellable or None): task's Gio.Cancellable, or None Returns: None """ if task.return_error_if_cancelled(): return outcome = self._get_poster() task.return_value(outcome) def _get_poster(self) -> Gio.File: """ Returns the poster file from cached data, downloading it if necessary. Args: None Returns: Gio.File containing the poster """ files = glob.glob( f'{self.poster_path[1:-4]}.jpg', root_dir=shared.cache_dir) if files: logging.debug( f'{self.poster_path}, cache hit: {shared.cache_dir}/{files[0]}') return Gio.File.new_for_path(f'{shared.cache_dir}/{files[0]}') else: url = f'https://image.tmdb.org/t/p/w500{self.poster_path}' r = requests.get(url) if r.status_code == 200: with open(f'{shared.cache_dir}{self.poster_path}', 'wb') as f: f.write(r.content) logging.debug( f'{self.poster_path}, downloaded to {shared.cache_dir}{self.poster_path}') return Gio.File.new_for_path(f'{shared.cache_dir}{self.poster_path}') def _get_poster_file_finish(self, result: Gio.AsyncResult, caller: GObject.Object) -> int | Gio.File: """ Finishes the async operation returning the value. Args: result: a Gio.AsyncResult caller: the caller of the task Returns: int or Gio.File """ if not Gio.Task.is_valid(result, caller): return -1 return result.propagate_value().value ticketbooth-1.1.1/src/widgets/season_expander.py000066400000000000000000000135111475632104500220260ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later from gettext import gettext as _ from gettext import pgettext as C_ from typing import List from gi.repository import Adw, Gio, GObject, Gtk import src.dialogs.add_manual_dialog as dialog from .. import shared # type: ignore from ..dialogs.edit_season_dialog import EditSeasonDialog from ..widgets.episode_row import EpisodeRow @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/season_expander.ui') class SeasonExpander(Adw.ExpanderRow): """ This class represents a season in the manual add window. Properties: season_title (str): season title poster_uri (str): season poster uri Methods: None Signals: None """ __gtype_name__ = 'SeasonExpander' season_title = GObject.Property(type=str) poster_uri = GObject.Property(type=str) episodes = GObject.Property(type=object) _poster = Gtk.Template.Child() def __init__(self, season_title: str = _('Season'), poster_uri: str = f'resource://{shared.PREFIX}/blank_poster.jpg', episodes: List | None = None): super().__init__() self.season_title = season_title self.poster_uri = poster_uri self.episodes = episodes if episodes else [] @Gtk.Template.Callback('_on_map') def _on_map(self, user_data: object | None) -> None: """ Callback for "map" signal. Sets the poster image and populates the episode data. Args: user_data (object or None): user data passed to the callback. Returns: None """ self._poster.set_file(Gio.File.new_for_uri(self.poster_uri)) for episode in self.episodes: self.add_row(EpisodeRow(title=episode[0], episode_number=episode[1], runtime=episode[2], overview=episode[3], still_uri=episode[4], watched=episode[5], show_controls=False) ) @Gtk.Template.Callback('_on_edit_btn_clicked') def _on_edit_btn_clicked(self, user_data: object | None) -> None: """ Callback for "clicked" signal. Shows the "edit season" window. Args: user_data (object or None): user data passed to the callback. Returns: None """ dialog = EditSeasonDialog(self.get_ancestor(Gtk.Window), title=self.season_title, poster_uri=self.poster_uri, episodes=self.episodes) dialog.connect('edit-saved', self._on_edit_saved) dialog.present() def _on_edit_saved(self, source: Gtk.Widget, title: str, poster_uri: str, episodes: List[tuple]) -> None: """ Callback for "edit-saved" signal. Appends the recieved data as a tuple in the seasons list after removing the changed one and updates the ui. Args: source (Gtk.Widget): caller widget title (str): season title poster_uri (str): season poster uri episodes (List[tuple]): episodes in season Returns: None """ parent_dialog = self.get_ancestor(dialog.AddManualDialog) old_season = parent_dialog.get_season(self.season_title, self.poster_uri, self.episodes) parent_dialog.seasons.remove(old_season) parent_dialog.seasons.append((title, poster_uri, episodes)) parent_dialog.update_seasons_ui() @Gtk.Template.Callback('_on_delete_btn_clicked') def _on_delete_btn_clicked(self, user_data: object | None) -> None: """ Callback for the "clicked" signal. Asks the user for a confirmation after a delete request. Args: user_data (object or None): additional data passed to the callback Returns: None """ # TRANSLATORS: {title} is the showed content's title dialog = Adw.AlertDialog.new( heading=C_('alert dialog heading', 'Delete {title}?').format( title=self.season_title), body=C_('alert dialog body', 'This season contains unsaved metadata.') ) dialog.add_response('cancel', C_('alert dialog action', '_Cancel')) dialog.add_response('delete', C_('alert dialog action', '_Delete')) dialog.set_default_response('delete') dialog.set_close_response('cancel') dialog.set_response_appearance( 'delete', Adw.ResponseAppearance.DESTRUCTIVE) dialog.choose(self, None, self._on_alert_dialog_choose, None) def _on_alert_dialog_choose(self, source: GObject.Object | None, result: Gio.AsyncResult, user_data: object | None) -> None: """ Callback for the alert dialog. Finishes the async operation and retrieves the user response. If the later is positive, delete the content from the db. Args: source (Gtk.Widget): object that started the async operation result (Gio.AsyncResult): a Gio.AsyncResult user_data (object or None): additional data passed to the callback Returns: None """ result = Adw.AlertDialog.choose_finish(source, result) if result == 'cancel': return parent_dialog = self.get_ancestor(dialog.AddManualDialog) old_season = parent_dialog.get_season( self.season_title, self.poster_uri, self.episodes) parent_dialog.seasons.remove(old_season) parent_dialog.update_seasons_ui() ticketbooth-1.1.1/src/widgets/theme_switcher.py000066400000000000000000000053071475632104500216660ustar00rootroot00000000000000# Code modified from https://gitlab.gnome.org/tijder/blueprintgtk # Original header below # --------------------- # # Copyright 2020 Manuel Genovés # Copyright 2022 Mufeed Ali # Copyright 2022 Rafael Mardojai CM # SPDX-License-Identifier: GPL-3.0-or-later # # Code modified from Apostrophe # https://github.com/dialect-app/dialect/blob/c0b7ca0580d4c7cfb32ff7ed0a3a08c06bbe40e0/dialect/theme_switcher.py from gi.repository import Adw, Gdk, Gio, GObject, Gtk from .. import shared # type: ignore @Gtk.Template(resource_path=shared.PREFIX + '/ui/widgets/theme_switcher.ui') class ThemeSwitcher(Gtk.Box): __gtype_name__ = 'ThemeSwitcher' __gsignals__ = { 'themer-clicked': (GObject.SIGNAL_RUN_FIRST, None, ()), } show_system = GObject.property(type=bool, default=True) color_scheme = 'light' system = Gtk.Template.Child() light = Gtk.Template.Child() dark = Gtk.Template.Child() @GObject.Property(type=str) def selected_color_scheme(self): # type: ignore """Read-write integer property.""" return self.color_scheme @selected_color_scheme.setter def set_selected_color_scheme(self, color_scheme): self.color_scheme = color_scheme if color_scheme == 'auto': self.system.set_active(True) self.style_manager.set_color_scheme(Adw.ColorScheme.PREFER_LIGHT) if color_scheme == 'light': self.light.set_active(True) self.style_manager.set_color_scheme(Adw.ColorScheme.FORCE_LIGHT) if color_scheme == 'dark': self.dark.set_active(True) self.style_manager.set_color_scheme(Adw.ColorScheme.FORCE_DARK) def __init__(self, **kwargs): super().__init__(**kwargs) self.style_manager = Adw.StyleManager.get_default() self.style_manager.bind_property( 'system-supports-color-schemes', self, 'show_system', GObject.BindingFlags.SYNC_CREATE ) self.selected_color_scheme = shared.schema.get_string('style-scheme') @Gtk.Template.Callback() def _on_color_scheme_changed(self, _widget, _paramspec): if self.system.get_active(): self.selected_color_scheme = 'auto' # type: ignore shared.schema.set_string('style-scheme', 'auto') if self.light.get_active(): self.selected_color_scheme = 'light' # type: ignore shared.schema.set_string('style-scheme', 'light') if self.dark.get_active(): self.selected_color_scheme = 'dark' # type: ignore shared.schema.set_string('style-scheme', 'dark') # emit signal so we can change the background of details page if needed self.emit('themer-clicked') ticketbooth-1.1.1/src/window.py000066400000000000000000000266431475632104500165230ustar00rootroot00000000000000# Copyright (C) 2023 Alessandro Iepure # # SPDX-License-Identifier: GPL-3.0-or-later import glob import logging import os from gettext import gettext as _ from gettext import pgettext as C_ from gi.repository import Adw, Gio, GLib, Gtk from . import shared # type: ignore from .background_queue import BackgroundQueue from .dialogs.add_manual_dialog import AddManualDialog from .dialogs.add_tmdb_dialog import AddTMDBDialog from .views.first_run_view import FirstRunView from .views.db_update_view import DbUpdateView from .views.main_view import MainView from .providers.local_provider import LocalProvider as local @Gtk.Template(resource_path=shared.PREFIX + '/ui/window.ui') class TicketboothWindow(Adw.ApplicationWindow): """ This class reppresents the main application window. Properties: None Methods: None Signals: None """ __gtype_name__ = 'TicketboothWindow' _win_stack = Gtk.Template.Child() def _sort_on_changed(self, new_state: str, source: Gtk.Widget) -> None: """ Callback for the win.view-sorting action Args: new_state (str): new selected state source (Gtk.Widget): widget that caused the activation Returns: None """ self.set_state(new_state) logging.debug(f'Sort: {new_state}') shared.schema.set_string('view-sorting', str(new_state)[1:-1]) def _add_tmdb(self, new_state: None, source: Gtk.Widget) -> None: """ Callback for the win.add-tmdb action Args: new_state (None): stateless action, always None Returns: None """ dialog = AddTMDBDialog() logging.info('Add from TMDB dialog open') dialog.present(source) def _add_manual(self, new_state: None, source: Gtk.Widget) -> None: """ Callback for the win.add-manual action Args: new_state (None): stateless action, always None Returns: None """ dialog = AddManualDialog() logging.info('Add manual dialog open') dialog.present(source) def _refresh(self, new_state: None, source: Gtk.Widget) -> None: """ Callback for the win.refresh action Args: new_state (None): stateless action, always None source (Gtk.Widget): widget that caused the activation Returns: None """ logging.info('Refresh requested') source._win_stack.get_child_by_name('main').refresh() def _update_background_indicator(self, new_state: None, source: Gtk.Widget) -> None: """ Callback for the win.update-background-indicator Args: new_state (None): stateless action, always None source (Gtk.Widget): widget that caused the activation Returns: None """ source._win_stack.get_child_by_name( 'main')._background_indicator.refresh() def _unwatched_first_changed(self, new_state: GLib.Variant, source: Gtk.Widget) -> None: """ Callback for the win.unwatched-first action Args: new_state (bool): new selected state source (Gtk.Widget): widget that caused the activation Returns: None """ logging.debug(f'Sort unwatched first: {new_state.get_boolean()}') shared.schema.set_boolean('unwatched-first', new_state.get_boolean()) self.set_state(new_state) def _separate_watched_changed(self, new_state: GLib.Variant, source: Gtk.Widget) -> None: """ Callback for the win.separate-watched action Args: new_state (bool): new selected state source (Gtk.Widget): widget that caused the activation Returns: None """ logging.debug(f'Separate watched: {new_state.get_boolean()}') shared.schema.set_boolean('separate-watched', new_state.get_boolean()) self.set_state(new_state) def _hide_watched_changed(self, new_state: GLib.Variant, source: Gtk.Widget) -> None: """ Callback for the win.hide-watched action Args: new_state (bool): new selected state source (Gtk.Widget): widget that caused the activation Returns: None """ logging.debug(f'Hide watched: {new_state.get_boolean()}') shared.schema.set_boolean('hide-watched', new_state.get_boolean()) self.set_state(new_state) def _search(self, new_state: GLib.Variant, source: Gtk.Widget) -> None: """ Callback for the win.search action Args: new_state (bool): new selected state source (Gtk.Widget): widget that caused the activation Returns: None """ logging.debug(f'Search: {new_state.get_boolean()}') shared.schema.set_boolean('search-enabled', new_state.get_boolean()) self.set_state(new_state) _actions = { ('view-sorting', None, 's', f"'{shared.schema.get_string('view-sorting')}'", _sort_on_changed), ('separate-watched', None, None, 'true' if shared.schema.get_boolean( 'separate-watched') else 'false', _separate_watched_changed), ('hide-watched', None, None, 'true' if shared.schema.get_boolean('hide-watched') else 'false', _hide_watched_changed), ('add-tmdb', _add_tmdb), ('add-manual', _add_manual), ('refresh', _refresh), ('update-backgroud-indicator', _update_background_indicator), ('search', None, None, 'true' if shared.schema.get_boolean('search-enabled') else 'false', _search), } def __init__(self, **kwargs): super().__init__(**kwargs) self.add_action_entries(self._actions, self) self._restore_state() self.app = kwargs.get("application") if shared.DEBUG: self.add_css_class('devel') shared.schema.bind('offline-mode', self.lookup_action('add-tmdb'), 'enabled', Gio.SettingsBindFlags.INVERT_BOOLEAN) shared.schema.bind('separate-watched', self.lookup_action('hide-watched'), 'enabled', Gio.SettingsBindFlags.INVERT_BOOLEAN) if shared.schema.get_boolean('onboard-complete'): Gio.NetworkMonitor.get_default().connect( 'network-changed', self._on_network_changed) @Gtk.Template.Callback('_on_close_request') def _on_close_request(self, user_data: object | None) -> bool: """ Callback for "close-request" signal. Checks for background activities to prevent quiting and corruption, deletes cached data if enabled in settings. Args: user_data (object or None): additional data passed to the callback Returns: True to block quiting, False to allow it """ logging.info('Close requested') # Background activities if not all(activity.completed for activity in BackgroundQueue.get_queue()): dialog = Adw.AlertDialog.new( heading=C_('message dialog heading', 'Background Activies Running'), body=C_('message dialog body', 'Some activities are running in the background and need to be completed before exiting. Look for the indicator in the header bar to check when they are finished.') ) dialog.add_response('ok', C_('alert dialog action', '_OK')) dialog.choose(self, None, None, None) logging.error('Close inhibited, running activities in background') return True # Cache if shared.schema.get_boolean('exit-remove-cache'): files = glob.glob('*.jpg', root_dir=shared.cache_dir) for file in files: os.remove(shared.cache_dir / file) logging.info('Cache deleted') # recent_change reset local.reset_recent_change() logging.info('recent_change reseted') logging.info('Closing') return False @Gtk.Template.Callback('_on_map') def _on_map(self, widget: Gtk.Widget) -> None: """ Callback for the "map" signal. Determines what view to show on startup. Args: widget (Gtk.Widget): the object which received the signal Returns: None """ is_first_run = shared.schema.get_boolean('first-run') logging.info(f'is first run: {is_first_run}') if is_first_run: logging.info('Start first run setup') self.first_run_view = FirstRunView() self._win_stack.add_named(child=self.first_run_view, name='first-run') self._win_stack.set_visible_child_name('first-run') self.first_run_view.connect('exit', self._on_first_run_exit) shared.schema.set_boolean('db-needs-update', False) return db_needs_update = shared.schema.get_boolean('db-needs-update') if db_needs_update: logging.info('Start db update') self.db_update_view = DbUpdateView() self._win_stack.add_named(child=self.db_update_view, name='db-update') self._win_stack.set_visible_child_name('db-update') self.db_update_view.connect('exit', self._on_db_update_exit) return self._win_stack.add_named(child=MainView(self), name='main') self._win_stack.set_visible_child_name('main') return def _on_network_changed(self, network_monitor: Gio.NetworkMonitor, network_available: bool) -> None: """ Callback for "network-changed" signal. If no network is available, it turns on offline mode. Args: network_monitor (Gio.NetworkMonitor): the NetworkMonitor in use network_available (bool): whether or not the network is available Returns: None """ logging.warning(f'Network changed, current status {network_available}') logging.warning(f'Offline mode: {not network_available}') shared.schema.set_boolean( 'offline-mode', GLib.Variant.new_boolean(not network_available)) def _on_first_run_exit(self, source: Gtk.Widget) -> None: """ Callback for the "exit" signal. Changes the visible view. Args: None Returns: None """ logging.info('First setup done') self._win_stack.add_named(child=MainView(self), name='main') self._win_stack.set_visible_child_name('main') def _on_db_update_exit(self, source: Gtk.Widget) -> None: """ Callback for the "exit" of the db_update task. Changes the visible view. Args: None Returns: None """ logging.info('Database Update done') self._win_stack.add_named(child=MainView(self), name='main') self._win_stack.set_visible_child_name('main') def _restore_state(self) -> None: """ Restores the last known state of the window between runs. Args: None Returns: None """ shared.schema.bind('win-width', self, 'default-width', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('win-height', self, 'default-height', Gio.SettingsBindFlags.DEFAULT) shared.schema.bind('win-maximized', self, 'maximized', Gio.SettingsBindFlags.DEFAULT) ticketbooth-1.1.1/ticketbooth.doap000066400000000000000000000037201475632104500172260ustar00rootroot00000000000000 Ticket Booth Keep track of your favorite shows Ticket Booth allows you to build your watchlist of movies and TV Shows, keep track of watched titles, and find information about the latest releases. Ticket Booth does not allow you to watch or download content. This app uses the TMDB API but is not endorsed or certified by TMDB. Python GTK 4 Libadwaita Alessandro Iepure aleiepure aleiepure